Python 101 基礎教學 (2) - 變數與資料型態
變數與資料是所有程式語言共同的基礎。不同程式語言的資料型態稍有差異但大同小異,不外乎是整數、小數、布林值 (boolean)、字串等。而變數(variables)是一個可以存取資料的地方(或是標籤),而存取的目的是為了之後可以被重複使用。
變數與資料是所有程式語言共同的基礎。不同程式語言的資料型態稍有差異但大同小異,不外乎是整數、小數、布林值 (boolean)、字串等。而變數(variables)是一個可以存取資料的地方(或是標籤),而存取的目的是為了之後可以被重複使用。
變數
# 範例:a 是變數的代號;'123'是一個字串型態的資料
a = '123'
# 如果想要執行程式看到結果,打完以上邏輯後還要用 print 印出
print(a) # output: 123
解釋以上的例子:我們定義了字母 a 為變數,然後把 '123' 這個字串資料儲存到變數 a 裡。
變數命名規則
基本上以英文字母組成,開頭不能是阿拉伯數字或是特殊字元( _ underscore 例外),你想要的話甚至可以用中文命名,但不推薦。
a = 1 # ok
abc = 1 # ok
how_are_you = 1 # ok
_hi = 1 # ok
甲 = 1 # ok...
金城武 = 1 # ok...
@a = 1 # error
3q = 1 # error
變數存取方向是從右到左
看到等式會往數學聯想,但是很不一樣的事是,變數的用法是一個 assign 的概念,把資料(右)assign 到變數(左)。
# 存取方向為右至左:
# '123'先存到變數b裡,變數b的資料('123')在儲存到a裡。
# 執行完以下後,a, b都會等於'123'
a = b = '123'
print(a, b) # output: 123, 123
# 我們沒法把變數存取到資料裡,所以會報錯
'123' = a
變數可以修改
a = 'hi'
print(a) # output: hi
a = 'hello'
print(a) # output: hello
# 以上例子a從一開始的hi被修改為hello
變數可以做運算
當變數被賦予值之後,就可以跟資料一起做運算
a = 100
b = a * 5 # b = 500
print(b) # output: 500
print(b - 100) # output: 400
c = 4
a = (b - 100) / 4 # a = 100.0
print(a, b, c) # output: 100.0, 500, 4
# a = 100.0 是因為 python3 會自動把除法結果轉乘小數型態
# 如果只要整數的話可以使用 "//" (無條件捨去)
print(23 // 3) # output: 7
print(500 // 5) # ouptut: 100
# 更新自己的資料
a = 0
a = a + 1
# 上面右邊先做a+1=1然後assign給左邊a,最後a變成1
# 以上意義上面就是把a這個變數加上1
# 一些語法上簡化
a += 1 # 等於 a = a + 1
a *= 1 # 等於 a = a * 1
a /= 1 # 等於 a = a / 1
a -= 1 # 等於 a = a - 1
資料型態
Python 內建有一些基本型態,常用的有:
整數 int、浮點數 double、字串 str、布林值 bool、列表 list、tuple(不會翻)、字典 dict、集合 set。
其中整數、浮點數、字串、布林值是自己為單位資料型態,而剩下的是 collection,意思是這些資料型態可以包含多筆資料。
布林值很簡單,資料種類就只有 True/False。
# 這邊是一些基本資料型態的例子
# 我們在檢查型態的時候,通常可以用'type'這個函式
# 整數int
1
0
55688
print(type(1)) # output: <class 'int'>
# 浮點數float
3.0
3.1415926
print(type(1.0)) # output: <class 'float'>
# 布林值bool
True
False
print(type(True)) # ouptut: <class 'bool'>
# 字串 str
'c' # 一個字母在其他語言可能有另一個字元型態,在python則為str
'hello'
'hi, how are u'
"double quote" # 單引號跟雙引號都可以表示str,但不能一單一雙
"you're good" # 在雙引號字串裡的單引號會被視為字串內容的一部分
'' # 空字串
'I am a "bad" guy' # 反之亦然
'you\'re are good' # 如果在單引號裡還想使用單引號當成字串內容,需要跳脫(\)
'\n' # 特殊字串: \n = 換行
'\t' # 特殊字串: \t = tab
# 如果想在字串印出跳脫字元\,需要使用多一個\來阻止跳脫發生
'hello \\n\\n' # => 'hello \n\n'
print(type('1')) # output: <class 'str'>
'''
以下list, tuple, dict, set屬於collection,可以裝載多筆資料,這邊只有一些例子
之後介紹個細節的用法
'''
# 列表 list
[1, 2, 3]
[1, '2', True] # 可以同時擁有不同類型的資料
[1]
[] # 空列表
list() # 空列表
print(type([1, 2])) # output: <class 'list'>
# tuple
(1, 2)
(1,) # 如果想要使用只有一筆資料的tuple,需要這樣寫
print(type((1, 2))) # output: <class 'tuple'>
# 字典 dict
{1: 'hi'}
{'key': 'value'}
{} # 空字典
dict() # 空字典
print(type({})) # output: <class 'dict'>
# 集合 set
set() # 空的set,值得注意的是{}是空的dict不是set
{1}
{1, 2, 3}
set([1, 2, 3]) # 宣告set的時候,是從list轉換過來
print(type({1, 2, 3})) # output: <class 'set'>
運算符號
運算符號在不同的型態有不同的功用,當不同型態的資料做運算時,Python 會試著做型態轉換,如果不能轉的會報錯。
數字類嘗試轉換規則為:bool -> int -> float 。其中 bool 裡,True 會被轉成 1,False 則為 0。
print(1 + 1) # output: 2
print(1 + 1.0) # output: 2.0, int -> float
print(True + True) # output: 2, bool -> int
print(True + False) # output: 0
print(1 + 2.0 + True) # output 4.0, 1 => 1.0 and True => 1.0
print(1 + 'hi') # error
數字與字串則不能互轉,在字串上也只能用 '+' 這個符號,代表著字串相接 concatenation。如果真的要把兩個互轉的話,我們需要外部使用一些方法來轉換。
print('a' + 'b') # ouptut: ab
print('how' + ' ' + 'are you') # output: how are you
print('hi' + '' + '!') # output: hi!(空字串沒作用)
print('a' - 'b') # error
# 變數可以跟資料一起運算
a = 'how' # 注意: 這裡的a是變數,與字串a('a')不同
print(a + ' ' + 'are you') # output: how are you
# 外部轉換方法
print(1 + int('2')) # output: 3, 字串2被轉成整數2
print(str(1) + '2') # output: 12, 數字1被轉成字串1,字串相加即相接
print(int(True)) # output: 1
print(float('2')) # output 2.0
print(bool('')) # output: False
print(bool('0')) # ouput: True(任何非空字串都為True)
print(int('no')) # error (字串no無法被轉為整數)
程式語言就是一堆規則制訂出來的,有些你可能覺得不合理,甚至每種語言對不同的運算式都有可能有不同的定義,結果也可能不同。我們不求記住所有規則,儘量使用明確且熟悉的運算式或語法,除了減少錯誤的發生,也增加了可讀性。
參考:https://www.w3schools.com/python/python_datatypes.asp
繼續閱讀: