輸入函式
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 的值。
- 假設在上面的題目中,在計算相加之前並沒有將輸入內容轉數字型態,那麼程式會得什麼樣的結果?
