第 02 課 · 入門 · 18 分鐘

Python 變數與資料型別

用變數儲存值,理解 Python 如何判斷一個值屬於什麼型別。

變數賦值型別查看算術與轉換

到了中午,Maya 腦子裡記著六個數,已經漏掉兩個。給每個數起名字——杯數、單價、找零——是第一步。可如果同一個名字這次裝的是文字,而不是數字呢?

變數給值起名字,讓程式可以重複使用它。Python 是動態型別語言:你不需要聲明型別,但每個值仍然有型別。理解型別,才能預測運算子和函式的行為。 你還會看到別名如何改變列表,以及為什麼轉換應該放在邊界。

賦值就是給值起名

等號把右邊的值賦給左邊的名字。重新賦值會替換舊值。變數名要描述用途,例如用 order_total 而不是 t。

price = 4.5
quantity = 3
total = price * quantity
print(total)

一次小計算

先認識四種型別

整數儲存整數值,浮點數儲存小數,字串儲存文字,布林值只有 True 和 False。type() 可以查看任何值的型別。看起來像數字的值,如果加了引號,仍然是字串。

print(type(7).__name__)
print(type(4.5).__name__)
print(type("7").__name__)
print(type(True).__name__)

查看型別

有意識地轉換型別

int() 把兼容的文字或小數轉成整數,float() 轉成小數,str() 把值轉成文字。轉換可能失敗:int("hello") 會拋出 ValueError,後面會學習如何處理它。

count = int("12")
price = float("4.5")
label = str(2026)
print(count, price, label)

顯式型別轉換

一個名字可以指向可變物件

賦值不會複製列表。alias = orders 讓兩個名字指向同一個物件,所以通過一個名字修改,另一個也會看到。orders[:] 建立淺拷貝;如果列表裡還有列表,內層物件仍然共用。

orders = ["latte", "tea"]
alias = orders
copy = orders[:]
alias.append("mocha")
copy.append("water")
print(orders)
print(copy)
records = [{"id": 1}]
shallow = records[:]
shallow[0]["id"] = 99
print(records)

別名、淺拷貝和共用的內層物件

在邊界處轉換一次

來自檔案、網址和表單的值一開始都是文字。在邊界處轉換一次,之後就用數字計算。反覆轉換會把型別錯誤擴散到整個程式;只轉換一次,後面的程式碼才可預測。

raw_count = "3"
raw_price = "4.50"
count = int(raw_count)
price = float(raw_price)
total = count * price
print(type(count).__name__, type(price).__name__)
print(f"{total:.2f}")

把文字變成數字一次

不要直接用 == 比較浮點數

在二進位浮點數裡,0.1 + 0.2 並不精確等於 0.3。這個微小差異用 print() 看不出來,但用在相等判斷裡就會出錯。展示時可以 round,做判斷時用 math.isclose(),或者改用整數分。金額常用整數分儲存,就是這個原因。

total = 0.1 + 0.2
print(total)
print(total == 0.3)
print(round(total, 2) == 0.3)
cents = 10 + 20
print(cents / 100)

近似浮點數與精確整數分

本課要點

  • 賦值把名字綁定到值,重新賦值會替換原值。
  • int、float、str、bool 是最先要熟悉的四種型別。
  • type(value).__name__ 會回傳可讀的型別名稱。
  • 做算術前,先把輸入或文字轉換成數字。
  • 給列表賦值可能只是起別名;切片只複製外層列表。
  • 浮點數是近似值;比較時用誤差範圍,或者改用整數分。

常見錯誤

  • 把字串和數字直接相加,沒有先轉換其中一邊。
  • 以為 / 回傳整數;在 Python 3 中,除法總是回傳浮點數。
  • 在賦值之前使用變數,會觸發 NameError。
  • 以為 b = a 複製了列表,其實兩個名字指向同一個物件。
  • 浮點數運算之後直接寫 if total == 0.3。
輪到你

為一個商品建立名稱、單價和數量變數,列印保留兩位小數的總價。

動手試試

改改變數、先預測輸出,再執行程式碼。第一次點擊「執行程式碼」時會下載 Python 執行時,可能需要幾秒鐘。

瀏覽器內 Python本機執行 · 無需帳號
首次執行會從 CDN 下載 Pyodide。修改後點擊「執行程式碼」。

練習本課

12 道題,作答後立即看到解釋。

查看 12 道題答案開始練習
← 列印與字串字串方法 →