Python 101 基礎教學 (2) - 變數與資料型態

變數與資料是所有程式語言共同的基礎。不同程式語言的資料型態稍有差異但大同小異,不外乎是整數、小數、布林值 (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

繼續閱讀:

Python 101 基礎教學 (3) - 條件判斷 if else
條件判斷是所有程式語言最重要的觀念之一。程式的目的就是有邏輯地自動化幫我們處理資料,沒有判斷選擇就不算邏輯了吧!所以 if else 語法幫助我們在程式裡面可以做出選擇。