昨天,我們學會了「變數」這個神奇的櫃子。
你可以把數字、文字甚至布林值都存進去,還能用 type()
來檢查櫃子裡裝的是什麼。
到目前為止,我們寫的程式有點像一個 單口相聲演員:
2 + 3
,它就算給你看但總覺得少了點什麼…
因為這樣的程式,永遠只能「自言自語」,它沒有辦法 主動問你問題。
想像一下,如果電腦能問你:「你叫什麼名字?」「你幾歲?」
然後根據你的回答再決定下一步動作,那感覺是不是更「有靈魂」了?
這就是今天的主角:
input()
—— 讓你的程式能夠和人類「互動」!
不過,事情還沒結束。
因為就算程式聽到了你的回覆,它一開始 只會把你的輸入當成「文字」。
那要怎麼讓「18」真的變成數字 18?
這時候,就得請出我們今天的另一位主角 —— 資料型別轉換。
我們先想像一個場景~
你要做一個「小算盤」,輸入兩個數字,再輸出相加的結果。
如果沒有 input()
,你只能這樣寫:
x = 10
y = 20
print(x + y)
可是假如今天我不想算 10 + 20,我想算 99 + 88 怎麼辦?
總不能每次都打開程式,手動改變數字吧?
這樣的算盤會氣死數學老師啦哈哈哈也會搞到自己!!
所以,我們需要一個辦法,讓程式可以 等使用者輸入資料,再去運算。
這個辦法就是 input()
!
input()
的格式長這樣:
變數名稱 = input("提示文字")
這邊的邏輯是:
先來看一個最簡單的例子:
name = input("請輸入你的名字:")
print("哈囉," + name + "!很高興認識你🐍")
按下執行會長這樣:(會跳出一個輸入對話框)
假設我輸入Sharon,按下enter,畫面會長這樣:
這裡要特別提醒!!
不管你輸入數字還是文字,input()
都會把它當成字串 (string)。
這部分是入門者很常忽略的小陷阱!
age = input("請輸入你的年齡:")
print("你的年齡是:" + age)
如果我輸入 18,輸出結果是:
請輸入你的年齡:18
你的年齡是:18
看起來沒問題,但問題藏在後面!如果我想把年齡拿來算數學呢?
age = input("請輸入你的年齡:")
print("明年你就 " + (age + 1) + " 歲了!")
結果直接報錯:
TypeError: can only concatenate str (not "int") to str
原因是因為 age
是字串,Python 不知道該怎麼把它拿去加 1。
所以這時候資料型別的轉換就很重要!
Python 幫我們準備了好用的轉換工具:
int("123")
→ 把字串 "123"
轉成整數 123
float("3.14")
→ 把字串 "3.14"
轉成浮點數 3.14
str(123)
→ 把整數 123
轉成字串 "123"
來修正剛剛的程式:
age = input("請輸入你的年齡:")
age = int(age) # 把字串轉成整數
print("明年你就 " + str(age + 1) + " 歲了!")
執行結果:
請輸入你的年齡:18
明年你就 19 歲了!
讓我們寫一個簡單的小算盤,輸入兩個數字,輸出加總。
num1 = input("請輸入第一個數字:")
num2 = input("請輸入第二個數字:")
# 先把輸入的字串轉換成數字
num1 = float(num1)
num2 = float(num2)
print("兩數相加的結果是:" + str(num1 + num2))
執行後,會看到輸出結果是(假設是輸入3.5跟7.2):
請輸入第一個數字:3.5
請輸入第二個數字:7.2
兩數相加的結果是:10.7
請設計一個BMI計算題目,並顯示BMI數值。
公式為:體重(公斤)除以身高(公尺)的平方
# 請使用者輸入身高與體重
height = float(input("請輸入身高,單位為公分:"))
weight = float(input("請輸入體重,單位為公斤:"))
# 換算身高為公尺
height = height / 100
# 計算 BMI
bmi = weight / (height ** 2)
# 輸出結果
print("你的 BMI 為:" + str(round(bmi, 2)))
這邊有一些運算符號如果還不太熟悉的話,我們會在明天的時候介紹到呦!
可以注意一下在一開始輸入身高及體重的時候,
我們有將數值轉換為float(浮點數)型態,
因為身高跟體重通常不會是整數~所以這邊是用float不是用int‼️
前面有說, input()
會把使用者輸入的內容存成 字串 (str)。
但是在真實世界裡,我們輸入的資料可能是數字、布林值、甚至是列表。
別擔心,Python 很貼心,給我們很多小技巧來處理不同情況:
(1) 基本輸入轉型
# 輸入整數(int)
num = int(input("請輸入整數:"))
# 輸入浮點數(float)
score = float(input("請輸入分數:"))
# 輸入字串(str)
name = input("請輸入名字:") # 預設就是字串,不需要轉型
# 輸入布林值(bool)
yes = input("是否繼續 (y/n):") == "y"
# 如果輸入 "y" → True,否則 False
(2)其他常見結構(後面會陸續介紹到)
# 輸入元組(tuple)
tup = tuple(input("請輸入多個值(空格分隔):").split())
# 例如輸入:a b c → ('a', 'b', 'c')
# 輸入集合(set)
s = set(input("請輸入多個值(空格分隔):").split())
# 例如輸入:a b a c → {'a', 'b', 'c'} (自動去掉重複)
# 輸入字典(dict)
kv = input("請輸入鍵與值,用冒號分隔(例如 name:Tom):")
key, value = kv.split(":")
d = {key: value}
print(d)
# 例如輸入:name:Tom → {'name': 'Tom'}
(3)一次輸入多個值(直接拆成變數)
這部分可以先偷看下面的進階補充2再回來這邊看呦!
# 輸入多個整數
a, b = map(int, input("請輸入兩個整數:").split())
# 輸入多個浮點數
x, y = map(float, input("請輸入兩個浮點數:").split())
# 輸入多個字串
first, last = input("請輸入姓與名(空格分隔):").split()
到目前為止,我們都是一個問題、一個答案:
在初學時,我們常常用 input()
一次接收一個值,
但如果要輸入好幾個數字,就要呼叫好幾次 input()
,這樣顯得有點麻煩。
比如說:如果你要輸入三個數字,代表某個學生的三次考試成績,
你可能會這樣寫:
score1 = int(input("請輸入成績1: "))
score2 = int(input("請輸入成績2: "))
score3 = int(input("請輸入成績3: "))
print(score1, score2, score3)
這樣可以動,但一旦要輸入更多數字,就會變得很冗長。
這邊介紹一個新語法~:
split()
:我們可以在一行裡把數字都輸入,再用 split()
自動切開,轉換成清單:
data = input("請輸入三個數字(以空格分隔): ").split() # 將輸入分割為清單
numbers = list(map(int, data)) # 轉換成整數清單
print(f"輸入的數字是: {numbers}")
輸出內容:
請輸入三個數字(以空格分隔): 5 10 20
輸入的數字是: [5, 10, 20]
.split()
的意思是「把輸入的字串切開」,預設用空格分隔。map(int, data)
則是把清單裡的每個元素都轉換成整數。list()
把結果包起來,就得到整數清單啦!再看一個例子:
# 輸入字串列表
items = input("請輸入多個值(以空格分隔):").split()
# 例如輸入:a b c → ['a', 'b', 'c']
這個技巧在很多場景超好用,例如:
看到這邊的你,辛苦啦!今天我們學會了:
input()
讓程式和使用者互動int()
、float()
、str()
split()
)回想第一次看到程式跳出輸入框,等待我輸入時,我真的覺得好神奇!
「原來,我可以讓程式問我問題,然後它會根據我的答案做事情!」
那一刻,就好像程式突然有了靈魂 🐍✨,變得生動起來。
當然,也不是完全沒有挫折感。
一開始我常常忘記做資料型態轉換,把輸入的數字直接拿去運算,結果程式報錯……
那時候我才真正理解「資料型別轉換」的重要性,也體會到程式對細節的嚴格要求。
學到最後,我發現寫程式不只是解題,更像是在跟程式「對話」:
它問我問題,我回答,它再做出回應。這種互動感,讓學程式變得有趣又充滿成就感!
而且 input()
真的是一個超實用的語法,它會在往後每一章都派上用場。
其實換個角度想,這很正常!日常生活中很多資料都是由使用者輸入的,
像是註冊、登入,甚至購物車系統等等。
所以,好好認識 input()
,不只是學會一個語法而已,更是為之後所有互動式程式打下堅實的基礎!
明天,我們要進一步探討「數字」的世界!
學會四則運算、次方、取餘數,甚至是一些好玩的數學運算。
從此,你就能用 Python 當強大的運算幫手!
那今天的練功日就結束囉!辛苦啦!我們明天見~
如果有任何問題,歡迎在底下留言~
若覺得內容還不錯的話!也可以幫我點個like,你們的支持也是我最大的動力~