Semorphe

讀進來

讓程式問使用者要資料。 · ⏱ 約 20 分鐘

你會學到三件事

  1. input() 讓程式停下來等人打字
  2. 🔴 它讀進來的一定是文字,即使你打的是數字
  3. + 用在文字上是「接起來」

開始之前

上一課的資料是寫死的:

name = "小明"

這一課要讓使用者決定它。

🟢 先把編輯器打開,跟著下面一起做:跟著做

一、停下來等

要讓使用者打字,用 input():

1name = input()
讀一行輸入,提示設定name為1

執行到這一行,程式會停住,主控台出現一個等你打字的地方。

打完按 Enter,你打的東西就會被放進 name。

⚠️ 括號不能省。 input 沒有括號的話,你拿到的是那個函式本身,不是它的結果。

可以順便給一句提示:

🔎 這一段是試一下——打了看結果就好,不要留在程式裡。

1name = input("請輸入你的名字:")
"請輸入你的名字:"讀一行輸入,提示設定name為1

二、🔴 讀進來的一定是文字

試試看直接拿它去加——它會出事:

🚫 這一段是反例——課文在說不要這樣寫,別照著拉。

1n = input()      # 打 52print(n + 1)     # 💥 TypeError
讀一行輸入,提示變數n1+印出設定n為12

即使你打的是 5,n 裡面裝的是文字 "5",不是數字 5。

因為 Python 不知道你想要什麼,它只知道你打了幾個字元。

要當成數字用,得自己說:

🔎 這一段是試一下——打了看結果就好,不要留在程式裡。

1n = int(input())     # 讀進來 → 轉成整數2print(n + 1)         # 6
讀一行輸入,提示把轉成整數變數n1+印出設定n為12
轉成
int(x) 整數
float(x) 小數
str(x) 文字

⚠️ int("abc") 會出錯(那不是數字)。怎麼處理它是第 11 課的事, 現在先假設使用者會乖乖打數字。

三、+ 用在文字上是接起來

兩段文字用 + 接起來:

1print("你好," + name)
"你好,"變數name+印出1

+ 對數字是相加,對文字是接起來。同一個符號,兩種意思。

⚠️ 兩邊型別要一樣:

🚫 這一段是反例——課文在說不要這樣寫,別照著拉。

1print("我今年 " + 16)          # 💥 TypeError2print("我今年 " + str(16))     # ✅3print("我今年", 16)            # ✅ 逗號更省事
"我今年 "16+"我今年 "16把轉成文字+"我今年"16印出印出印出123
差別
+ 直接黏起來,兩邊都要是文字
, 自動加一個空格,什麼型別都吃

大部分時候用逗號就好。

完成的樣子

這一課的參考做法——程式碼每一行的號碼,就印在對應的那塊積木上。

1name = input()2print("你好," + name)3print("歡迎")
讀一行輸入,提示"你好,"變數name+"歡迎"印出印出設定name為123

把積木打散,自己排回去:排回去:把剛才那支程式的積木排好

換你了

讀進一個數字,印出它的兩倍。

⚠️ 先不要用 int(...) 試一次,你會看到 "5" * 2 得到 "55", 因為文字乘數字是「重複」。而它不會報錯。

到編輯器做這一題:練習:讀進一個數字,印出兩倍

做一個

讀進姓名和年齡,印出「某某 明年 幾 歲」。

🔴 年齡讀進來是文字,要加 1 得先變成數字;印出來的時候又得變回文字。 這兩次轉換就是這一課的重點。⚠️ 裁判用的是 小美 和 16。

到編輯器做這一題:做一個:明年幾歲

這一課你做了什麼

如果卡住了

你看到 多半是因為
程式沒停就跑完了 input() 的括號漏了
TypeError: can only concatenate str 用 + 接了文字和數字。轉型或改用逗號
"5" * 2 得到 "55" 那是「重複」。要先 int(...)
ValueError: invalid literal for int() 使用者打的不是數字(第 11 課處理)
在編輯器打開這一課 →