Python資料型別、變數與運算子
以下為此單元簡報
https://drive.google.com/file/d/1xhCqs6vwBkAHaTvr7uUhTAccAYyxHs6R/view?usp=sharing
以下為本單元的教學影片(放置於YouTube上),以下兩種方式擇一。
(A)以YouTube播放清單方式觀看影片,如下。
https://www.youtube.com/playlist?list=PLOk9WKoJdjHapF5dhGQKcxPGi2eoEcp78
(B)以超連結方式觀看個別影片,如下。
(A)Python資料型別
Python的資料型別可以分成布林值、整數、浮點數與字串,分別敘述如下。
(A-1)布林值
布林值是只能表示對(True)或錯(False)的資料型別,例如:「a=True」,將布林值物件「True」指定給變數a,變數概念將於下一節說明。
Python會將下列物件視為False。
可以使用函式bool產生布林值物件,說明如下。
函式
bool()
功能
根據輸入的資料決定結果是True或False,例如:bool(1)會輸出True,bool(0)會輸出False。
程式
print(bool(1))
print(bool(0))
print(bool(()))
執行結果
True
False
False
(A-2)整數
Python整數的數值範圍沒有限制,可以表示任意大的數字,只要能夠計算出來,例如:「googol=10**100」,「10**100」表示10的100次方。
函式
int()
功能
經由函式int可以將任何整數、浮點數與整數字串當作輸入,轉換成整數。
程式
print(int(100))
print(int(3.14))
print(int('100',2))
執行結果
100
3
4
說明:int('100',2)表示100是二進位表示,轉換成十進位變成4。
(A-3)浮點數
浮點數表示任何帶有小數點的數值。
函式
float()
功能
可以將任何整數、浮點數與浮點數字串轉換成浮點數。
程式
print(float(1))
print(float(3.14))
print(float('3.1415'))
執行結果
1.0
3.14
3.1415
(A-4)字串
Python字串是不可變的物件,需使用字串物件所提供的函式,將字串進行修改,不能直接修改字串物件。
函式
str()
功能
將輸入的物件轉成字串。
程式
s= str('Python')
s[0]='Q'
執行結果
s是字串,所以不能使用s[0]來修改字串s的第一個元素,會發生TypeError錯誤,錯誤訊息如下。
Traceback (most recent call last):
File "H:/teach/python/ch2-vars-operator/str.py", line 3, in <module>
s[0]='Q'
TypeError: 'str' object does not support item assignment
(B)變數
(B-1)何謂變數?
在Python中任何整數、浮點數、字串、變數與函式都是物件,Python的變數可以想像為標籤,可以使用「=」將標籤貼到物件上,例如:「x=2」,相當於有一個數字2的物件,將數字2物件上貼上一個x的標籤,讀取x就可取出數字2。
變數是將標籤貼在物件上,就指向那個物件,程式在運算過程中,對資料進行處理與運算,就是對變數進行處理與運算,就是對變數所對應的物件進行處理與運算。
程式語言分成靜態語言與動態語言,C、C++與Java屬於靜態語言,變數在執行前需要宣告資料型別,變數宣告了資料型別後就不能更改成其他型別;Python屬於動態語言,執行時才決定資料型別,不需要事先宣告變數的資料型別,也可以執行中改變變數的資料型別,使用「=」可以隨時改變變數所參考的物件。
程式範例
程式範例
(B-2)變數的命名
變數的命名有一定的規則,好的變數命名可以讓程式更容易閱讀,其參考規則如下。
一、變數的第一個字母一定只能是英文大小寫字母、Unicode字元或底線(_),其後可以接英文大小寫字母、Unicode字元、底線(_)或數字,也就是不能以數字開頭,Unicode字元表示可以使用中文命名變數。
二、大小寫英文字母視為不同變數,A與a視為不同的變數。
三、Python關鍵字無法命名為變數名稱,例如:if、else、elif、for等,不能使用這些名稱命名變數。
四、變數名稱可以利用多個有意義的小寫單字組合而成,單字之間使用底線( _ )串接,程式設計者較容易閱讀與瞭解,如表示數學成績的變數可以使用math_score來表示,這個規定並沒有強制性。
(C)運算子
將數值或變數進行運算,需要使用運算子,運算子分成指定運算子、算數運算子、字串運算子、比較運算子與邏輯運算子等,以下就分別介紹並舉例說明。
(C-1)指定運算子
用等號(=)表示,意思是等號右邊先運算,再將運算結果指定給左邊的變數,如A=1+2,右邊的1+2先運算獲得3,將數字物件「3」指定給左邊的變數A,相當於將標籤A貼到數字物件「3」上。
(C-2)算術運算子
算術運算子為數學的運算子,例如:A-B表示A減B,減(-)為算術運算子,。可以結合指定運算子(=)將結果指定到變數C,C=A-B。以下介紹算術運算子。
乘號在數學中可以不用加上,但在程式中乘號不可以忽略,先乘除後加減,使用小括號刮起來的部分優先計算。
程式中數學運算子範例,如下。
運算式
a = (2+3*2)*(4-1)
結果
變數a的值為24,因為左邊括弧內3*2先運算,結果為6,再加上2得到8,右邊括弧內4-1,運算結果為3,最後8乘以3得24,獲得最後結果。
變數遞增或遞減,這部分與數學差異很大,主要是「=」等號的意義,在程式與數學定義是不同的。
當等號的左右兩邊使用到相同變數,可以將運算子與等號結合縮短程式碼,達成相同效果,例如:「a = a+1」也可以寫成「a += 1」,不只加法(+)可以如此縮寫,其他算術運算子也可以縮寫。
(C-3)比較運算子
(C-4)邏輯運算子
邏輯運算子有三種運算子,且(and)、或(or)、非(not)。
(X andY):當X是True,Y也是True,結果為True;X與Y只要其中一個為False,結果為False。
(X or Y):當X與Y其中一個為True,則結果為True;當X是False且Y也是False,則結果為False。
(not X):若X為True,not X結果為False;若X為False,not X結果為True。
可以使用邏輯運算子(且(and)、或(or)、非(not))連結多個條件,若要多個條件須同時為True運算結果才為True,就使用「and」運算子結合這些條件;若只要其中之一條件為True運算結果就為True,就使用「or」運算子結合這些條件;若要取相反的結果就使用「not」運算子置於該條件前面,邏輯運算子結合多個條件運算舉例如下。
(C-5)in與is運算子
「x in y」用於判斷x是否為y其中一個元素,若是則回傳True,否則回傳False。「x is y」用於判斷兩物件的id是否相同,若變數x與變數y指向相同物件,則回傳True,否則回傳False。
運算子「is」與是否相等運算子「==」兩者不相同,「x == y」只要x與y數值相同就回傳True,而「x is y」要x與y需要參考到相同物件才回傳True。
(C-6) 位元運算子
Python先將數值轉換成二進位表示,從右到左將數字的每個位元進行位元運算,獲得最後的結果。
(D)字串
使用單引號「'」與雙引號「"」所包夾的文字,在Python會被視為字串,字串內文字可以儲存Unicode編碼的文字,支援中文。單引號內使用雙引號,可以正確顯示雙引號,雙引號內也可以使用單引號,也可以正確顯示單引號。
程式範例
程式碼
s1 = '作者"孟浩然" 詩名"春曉"'
print(s1)
s2 = "作者'孟浩然' 詩名'春曉'"
print(s2)
執行結果
作者"孟浩然" 詩名"春曉"
作者'孟浩然' 詩名'春曉'
使用三個單引號「'''」或三個雙引號(""")可以用於顯示多行文字,且每行前面的空白也會正常顯示,連換行字元也會被保留。
程式碼
s3 = ''' 春眠不覺曉,處處聞啼鳥。
夜來風雨聲,花落知多少。
作者"孟浩然" 詩名"春曉"
'''
print(s3)
執行結果
春眠不覺曉,處處聞啼鳥。
夜來風雨聲,花落知多少。
作者"孟浩然" 詩名"春曉"
(D-1)字串運算子
字串運算子用於處理字串,可以串接字串、存取字串、複製字串與切割字串。
(1) 串接字串
使用「+」串接字串,可以將兩個字串合併成一個字串。
程式碼
s1 = '01234'
s2 = '56789'
s3 = s1 + s2
print(s3)
執行結果
0123456789
(2)複製字串
使用「*」複製字串,執行「字串 * 2」會複製字串一份串接原來字串的後面,執行「字串 * 3」會複製字串兩份串接原來字串的後面,依此類推。
程式碼
s1 = '01234'
s2 = s1 * 2
print(s2)
執行結果
0123401234
(3)取出字串元素
使用「[]」取出字串元素,s[0]取出字串s的第1個元素,s[1]取出字串s的第2個元素,s[-1]取出字串s的最後1個元素,s[-2]取出字串s的右邊數過來第2個元素。
程式碼
s1 = '0123456789'
print(s1[0])
print(s1[1])
print(s1[-1])
print(s1[-2])
執行結果
0
1
9
8
(4)切割字串
使用「[開始:結束:間隔]」切割字串,從「開始」到「結束」(不包含結束的字元)每隔「間隔」個字元取一個字元出來。
s[:]表示取字串s的每一個元素。
s[開始:]表示取字串s[開始]元素開始到字串s結束的所有元素。
s[:結束]表示取字串s[0]元素到s[結束]所指定元素的前1個元素為止的所有元素。
s[開始:結束] 表示取字串s[開始]元素到s[結束]所指定元素的前1個元素為止的所有元素。
s[開始:結束:間隔] 表示取字串s[開始]元素到s[結束]所指定元素的前1個元素為止的所有元素中,每隔「間隔」個元素取一個元素。
s[::-1]表示反轉字串,反轉字串為字串的第1個字元與最後1個字元互換,第2個字元與倒數第2個字元互換,第3個字元與倒數第3個字元互換,一直到只剩下一個字元或沒有字元可以互換為止。
若「開始」沒有指定數值,以字串最開始的元素開始,也就是預設使用0;若「結束」沒有指定數值,以字串最右邊的元素結束(包含該字元)。若「間隔」大於0,表示由左到右取出元素;若「間隔」小於0,表示由右到左取出元素
程式碼
s = '0123456789'
print('s=', s, 's[:]=', s[:])
print('s=', s, 's[5:]=', s[5:])
print('s=', s, 's[-2:]=', s[-2:])
print('s=', s, 's[:5]=', s[:5])
print('s=', s, 's[:-2]=', s[:-2])
print('s=', s, 's[7:9]=', s[7:9])
print('s=', s, 's[-4:-1]=', s[-4:-1])
print('s=', s, 's[5:-2]=', s[5:-2])
print('s=', s, 's[2:10:2]=', s[2:10:2])
print('s=', s, 's[::-1]=', s[::-1])
print('s=', s, 's[-1::-1]=', s[-1::-1])
執行結果
s= 0123456789 s[:]= 0123456789
s= 0123456789 s[5:]= 56789
s= 0123456789 s[-2:]= 89
s= 0123456789 s[:5]= 01234
s= 0123456789 s[:-2]= 01234567
s= 0123456789 s[7:9]= 78
s= 0123456789 s[-4:-1]= 678
s= 0123456789 s[5:-2]= 567
s= 0123456789 s[2:10:2]= 2468
s= 0123456789 s[::-1]= 9876543210
s= 0123456789 s[-1::-1]= 9876543210
(5)串接多行
使用「\」串接多行,若在python中同一行的程式碼過長,在該行最後使用「\」當最後一個字元,就可以寫到下一行,這兩行會被視為同一行。以下範例中,單引號「'」表示的字串只能在一行內,可以經由「\」串接多行成為一行,範例中變數s的字串橫跨三行,經由「\」會被視為一行,而「\n」表示換行,「\t」表示按下tab鍵,會空出8個半形字元自動對齊。
程式碼
s = '春眠不覺曉,處處聞啼鳥。\n\
夜來風雨聲,花落知多少。\n\
\t作者"孟浩然" 詩名"春曉"'
print(s)
執行結果
春眠不覺曉,處處聞啼鳥。
夜來風雨聲,花落知多少。
作者"孟浩然" 詩名"春曉"
(D-2)字串的內建函式
字串類別內建許多函式,只要是Python字串就自動擁有這些函式,以下介紹常用的內建函式。
程式範例
(E)範例練習
(E-1)服裝訂購系統
假設上衣300元、褲子350元與背心400元,使用者可以自行輸入三種服裝的數量,請設計一個程式計算訂購服裝的總金額。
解題想法
將上衣、褲子與背心訂購數量依序指定到三個整數變數中,乘以對應的價格,再加總起來。本題會使用到運算子的乘法(*)、加法(+)與指定運算子(=)。
程式碼與執行結果
行號
1
2
3
4
5
程式碼
上衣 = int(input('請輸入上衣數量?'))
褲子 = int(input('請輸入褲子數量?'))
背心 = int(input('請輸入背心數量?'))
總金額 = 上衣*300 + 褲子*350 + 背心*400
print('訂購服裝的總金額為', 總金額)
執行結果
依序輸入上衣2件、褲子3件與背心1件,結果顯示在螢幕。
請輸入上衣數量?2
請輸入褲子數量?3
請輸入背心數量?1
訂購服裝的總金額為 2050
解說
第1行:於螢幕顯示「請輸入上衣數量?」,允許使用者輸入上衣數量,並經由函式int轉換成整數,指定給變數「上衣」。
第2行:於螢幕顯示「請輸入褲子數量?」,允許使用者輸入褲子數量,並經由函式int轉換成整數,指定給變數「褲子」。
第3行:於螢幕顯示「請輸入背心數量?」,允許使用者輸入背心數量,並經由函式int轉換成整數,指定給變數「背心」。
第4行:計算訂購總金額,使用物品金額乘以對應的物品數量再加總,獲得訂購總金額,指定給變數「總金額」。
第5行:顯示「訂購服裝的總金額為」與變數「總金額」到螢幕上。
(E-2)計算圓面積與圓周長
請設計一個程式計算圓面積與圓周長,依輸入的半徑計算圓面積與圓周長。
解題想法
將圓的半徑儲存到變數,再依照圓面積與圓周長公式進行運算,將計算結果儲存到變數「圓周長」與「圓面積」。本題會使用到運算子的乘法(*)與指定運算子(=)。
程式碼與執行結果
行號
1
2
3
4
5
程式碼
半徑 = float(input('請輸入半徑?'))
PI = 3.14159
圓周長 = 2 * PI * 半徑
圓面積 = 半徑 * 半徑 * PI
print('圓周長為', 圓周長, '圓面積為', 圓面積)
執行結果
執行後,輸入半徑「10」,按下「Enter」鍵,圓周與面積計算結果顯示在螢幕。
請輸入半徑?10
圓周長為 62.8318 圓面積為 314.159
解說
第1行:於螢幕顯示「請輸入半徑?」,允許使用者輸入半徑,並經由float函式轉換成浮點數,指定給變數「半徑」。
第2行:定義PI為3.14159。
第3行:計算圓周長,使用半徑乘以2轉換成直徑,再乘以3.14獲得圓周長,指定給變數「圓周長」。
第4行:計算圓面積,使用半徑乘以半徑,再乘以3.14獲得圓面積,指定給變數「圓面積」。
第5行:顯示圓周長與圓面積到螢幕上。