在程式語言中,電腦需要知道「現在處理的是什麼資料」,才能決定該做什麼動作。例如:數字可以相加 (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,不再是函數了