Python資料型別、變數與運算子

(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行:顯示圓周長與圓面積到螢幕上。