輸入函式
2024年10月8日大约 3 分鐘
學習內容:
- 理解並運用
input()
函式 - 常見的錯誤
- 使用
eval()
函式處理輸入字串 - 處理以逗號或空格分隔的數字輸入並轉換為數字列表
輸入函式 input()
input()
函式用來從使用者那裡取得輸入,並回傳一個字串形式的值。函式參數的字串,會輸出到螢幕上用來提示使用者。要特別注意的是:即使輸入的是數字,它也會被當作字串來處理。
範例:
user_input = input("請輸入一些內容:")
print(f"你輸入的是:{user_input}")
執行結果:
請輸入一些內容:123
你輸入的是:123
注意:即使輸入了數字
123
,它還是會被當作字串"123"
處理。
常見的錯誤
input()
回傳的永遠是一個字串。如果想要將這個輸入字串轉換為數字類型,我們需要進行類型轉換,否則會出現錯誤。例如:
num = input("請輸入一個數字:")
print(num + 10)
輸入數字後會得到以下結果:
請輸入一個數字:10
TypeError: can only concatenate str (not "int") to str
錯誤的原因是
num
是字串"10"
,而不是數字,無法直接進行數字運算。
解決方法:
如果輸入的結果是字串,可以使用 int()
將其轉換為整數,或者用 float()
將其轉換為浮點數。另外也可以使用 eval 函式處理。
num = int(input("請輸入一個數字:"))
print(num + 10) # 正確
使用 eval()
函式處理輸入字串
eval()
可以把輸入字串當成 Python 指令,並對這個指令進行運算。如果這個字串本身就是數值形式,那麼其結果就是相應的數值。不過使用 eval()
需要注意安全性問題,不應在不受信任的輸入中使用。
範例:
num = eval(input("請輸入數字或表達式:"))
print("計算結果:", num)
執行結果:
請輸入數字或表達式:3 + 5
計算結果: 8
輸入多個數字
當你想從使用者輸入中同時接收兩個以逗號分隔的數字,並將它們分別賦值給變數 x
和 y
時,可以使用以下方法來實現。
範例程式碼:
# 請輸入兩個數字,以逗號分隔
x, y = input("請輸入兩個以逗號分隔的數字:").split(",")
# 將字串轉換成整數
x = int(x)
y = int(y)
# 印出 x + y
print("x + y = ", x+y)
注意:上述程式在輸入兩個數字時,是使用逗號做分隔。如果使用者用空白分隔的話,程式就會產生錯誤。假設要允許使用者輸入的時候用逗號或者空白進行分隔的話,可以用以下方式處理:
# 請輸入兩個數字,可以用逗號或空格分隔
x, y = input("請輸入兩個以逗號或空格分隔的數字:").replace(",", " ").split()
# 將字串轉換成整數
x = int(x)
y = int(y)
# 印出 x + y
print("x + y = ", x+y)
第 2 行程式碼解釋:
input()
函式:提示使用者輸入數字。replace(",", " ")
:將輸入字串中的逗號替換成空格,這樣無論是以逗號還是空格分隔,最終都會變成以空格分隔。split()
:將字串按空格分割,得到兩個數字字串的串列,這樣就可以分別對 x, y 賦值了。
練習
- 使用者輸入三個數字 a, b, c,計算 a + b + c 的值。
- 假設在上面的題目中,在計算相加之前並沒有將輸入內容轉數字型態,那麼程式會得什麼樣的結果?