iT邦幫忙

2025 iThome 鐵人賽

DAY 5
0
Software Development

Python 小白的逆襲:30 天從零到能教人的精華筆記,寫給迷惘的你與當年的我自己!系列 第 5

【Day5】程式會跟你對話啦:輸入 input() 與資料型別轉換

  • 分享至 

  • xImage
  •  

前言

昨天,我們學會了「變數」這個神奇的櫃子。
你可以把數字、文字甚至布林值都存進去,還能用 type() 來檢查櫃子裡裝的是什麼。
到目前為止,我們寫的程式有點像一個 單口相聲演員

  • 你叫它印「Hello」,它就乖乖印「Hello」
  • 你叫它算 2 + 3,它就算給你看

但總覺得少了點什麼…
因為這樣的程式,永遠只能「自言自語」,它沒有辦法 主動問你問題
想像一下,如果電腦能問你:「你叫什麼名字?」「你幾歲?」
然後根據你的回答再決定下一步動作,那感覺是不是更「有靈魂」了?

這就是今天的主角:

input() —— 讓你的程式能夠和人類「互動」!

不過,事情還沒結束。
因為就算程式聽到了你的回覆,它一開始 只會把你的輸入當成「文字」
那要怎麼讓「18」真的變成數字 18?

這時候,就得請出我們今天的另一位主角 —— 資料型別轉換

ㄧ、 為什麼我們需要 input()?

我們先想像一個場景~
你要做一個「小算盤」,輸入兩個數字,再輸出相加的結果。
如果沒有 input(),你只能這樣寫:

x = 10
y = 20
print(x + y)

可是假如今天我不想算 10 + 20,我想算 99 + 88 怎麼辦?
總不能每次都打開程式,手動改變數字吧?
這樣的算盤會氣死數學老師啦哈哈哈也會搞到自己!!

所以,我們需要一個辦法,讓程式可以 等使用者輸入資料,再去運算。
這個辦法就是 input()

二、input() 的基本用法

input()的格式長這樣:

變數名稱 = input("提示文字")

這邊的邏輯是:

  1. 顯示「提示文字」
  2. 等使用者輸入東西,然後按下 Enter
  3. 把輸入的東西存到變數裡

先來看一個最簡單的例子:

name = input("請輸入你的名字:")
print("哈囉," + name + "!很高興認識你🐍")

按下執行會長這樣:(會跳出一個輸入對話框)
https://ithelp.ithome.com.tw/upload/images/20250919/20164721WXJWzAIbIj.png

假設我輸入Sharon,按下enter,畫面會長這樣:
https://ithelp.ithome.com.tw/upload/images/20250919/20164721N7GL3Y4sLW.png

⚠️ 小陷阱:所有輸入都會變成「字串」

這裡要特別提醒!!
不管你輸入數字還是文字,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。
所以這時候資料型別的轉換就很重要!

三、 資料型別轉換:int()、float()、str()

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計算題目,並顯示BMI數值。
公式為:體重(公斤)除以身高(公尺)的平方

# 請使用者輸入身高與體重
height = float(input("請輸入身高,單位為公分:"))
weight = float(input("請輸入體重,單位為公斤:"))

# 換算身高為公尺
height = height / 100  

# 計算 BMI
bmi = weight / (height ** 2)

# 輸出結果
print("你的 BMI 為:" + str(round(bmi, 2)))

這邊有一些運算符號如果還不太熟悉的話,我們會在明天的時候介紹到呦!
可以注意一下在一開始輸入身高及體重的時候,
我們有將數值轉換為float(浮點數)型態,
因為身高跟體重通常不會是整數~所以這邊是用float不是用int‼️

進階補充1:不同資料型態的輸入

前面有說, 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()  

進階補充2:可以一次輸入多個數字嗎?

到目前為止,我們都是一個問題、一個答案:
在初學時,我們常常用 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,你們的支持也是我最大的動力~

/images/emoticon/emoticon12.gif


上一篇
【Day4】我的程式櫃子,放什麼都行──變數與資料型別
下一篇
【Day6】Python 的數字 & 文字運算大補帖
系列文
Python 小白的逆襲:30 天從零到能教人的精華筆記,寫給迷惘的你與當年的我自己!8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言