【Python超入門教學】EP2 | 資料型態:新手常見誤區

by 龍冥

在程式語言中,電腦需要知道「現在處理的是什麼資料」,才能決定該做什麼動作。例如:數字可以相加 (1+1=2),但文字相加是串接 ("1"+"1"="11")。

為什麼需要資料型態?

Python 雖然不需要像 C 語言一樣在宣告變數時強制定義型態(例如 int a),但它在執行時仍有嚴格的型態區分。若型態不對,程式會出現非預期運作方式甚至無法執行。

常見的基礎型態

我整理一些對於入門新手的人來講,初學必須先知道的幾個資料型態,但電腦還有很多更進階的資料型態,也很常用到,如list、tuple等型態,但為了入門學習,在本篇文章就先不提。

  • 整數 (int):Integer。完整的數字,不帶小數點。
    • 範例:1, 50, 10, 18
  • 浮點數 (float):Floating-point。帶有小數點的數字。
    • 範例:3.14, 0.5, 1.0 (即使是 .0 也是浮點數)
  • 字串 (str):String。文字資料,必須用引號包覆。
    • 範例:"龍龍", "Hello", "123" (被引號包起來的數字也是字串)
  • 布林值 (Boolean):只有是和否的二種狀態,常用在判斷句 (if) 中,也可以是比較運算的結果。
    • 範例:10 > 3   # True
  • 空值 (None):代表「沒有值」、「尚未設定」。用來表示「這裡現在沒有有效資料」
    • 範例:data = None

檢查資料型態:type()

當我們不確定某個變數是什麼型態時,可以使用 type() 函數來檢查。這在除錯(Debug)時非常重要。例如1+1出來不是2,而是11時,就可透過 type() 函數來判斷變數 (var) 是否為字串 (str) 類型造成的錯誤。

n1 = 1
f1 = 3.14
s1 = "文字"

print(type(n1))  # 輸出:<class 'int'>
print(type(f1))  # 輸出:<class 'float'>
print(type(s1))  # 輸出:<class 'str'>

數值四則運算對資料型態的影響

在 Python 中,不同的運算符號會產生不同結果的資料型態,特別是除法。

四則運算的寫法

在變數的四則運算中,會因應結果的不同,進而產生出不同的資料型態,在撰寫code時,要稍加注意,以避免後續設計產生非預期的結果,如不確定,可透過type() 來輔助判斷結果的資料型態。

請特別注意除法 (/) 與取商數 (//) 的差別,如果後續程式邏輯依賴「整數」,請務必使用 // 或用 int() 轉變成整數的資料型態。

  • 10 / 2 結果是 5.0 (float)
  • 10 // 2 結果是 5 (int)
a = 1
b = 50

print(a + b)   # 加法:51
print(a - b)   # 減法:-49
print(a * b)   # 乘法:50
print(a / b)   # 除法:0.02 (注意:Python 的除法結果永遠是 float)
print(a // b)  # 商數 (整除):0 (無條件捨去小數部分)
print(a % b)   # 餘數:1
print(a ** b)  # 次方:1 的 50 次方

input() 的型態陷阱與轉型 (Type Casting)

intput() 回傳的資料型態是「字串 (str)」,這是初學者很容易踩到的「新手陷阱」。

陷阱:input 永遠是字串

無論使用者輸入的是文字還是數字,input() 函數接收進來的資料,電腦一律視為字串 (str)。

# 錯誤示範
user_in = input("請輸入數字:")  # 假設使用者輸入 5
# print(user_in + 1)           # 報錯!TypeError
# 原因:字串 "5" 不能直接跟數字 1 相加

解法:資料型態轉換

下面範例中提到 user_in 的型態是 <class ‘str’>,而 user_int 的型態是 <class ‘int’>。務必記得 input 讀進來的變數若要進行運算,必須先透過 int() 或 float()進行資料型態的轉換。

  • int():轉為整數。
  • float():轉為浮點數。
  • str():轉為字串。
# 正確寫法
user_in = input("請輸入數字:")       # 讀取輸入 (str)
user_int = int(user_in)             # 轉型為整數 (int)

print(f"輸入數字+1 = {user_int + 1}") # 現在可以運算了

# 也可以寫成一行:
# age = int(input("請輸入年齡:"))

變數命名規則:保留字 (Reserved Words)

在命名變數時,不能使用 Python 已經賦予特殊功能的單字(保留字),否則會發生語法錯誤 (SyntaxError: invalid syntax) 或導致程式功能異常。

絕對不能用的字 (Keyword)

這些字在 Python 語法中有特定用途,不能當變數名:

  • if, else, for, while, class, def, return, import, True, False, None 等。

建議不要用的字 (Built-in Functions)

這些是 Python 內建的函數名,雖然語法上允許覆蓋,但會導致原本功能失效(極度危險):

  • print, input, int, str, list, type
# 危險示範
# print = 100
# print("Hello")  # 會報錯,因為 print 已經變成數字 100,不再是函數了

Related Posts