Python計算專題 === ## (1)哈囉 概念:輸入、輸出 Scratch: ![](https://i.imgur.com/BfDEtQL.png) Python: ```python= name = input('請問您的名字是:') print('哈囉!',name,'您好!') ``` #### input 指令是讓使用者由鍵盤輸入資料,語法為: :::info ```bash 變數 = input([提示字串]) ``` - 使用者輸入的資料是儲存於指定的變數中。 ::: #### print 指令為列印項目,語法為: :::info ```bash print(項目1 [,項目2, ..., sep=分隔字元, end=結束字元]) ``` - print指令:可以一次列印多個項目,項目之間以逗號 `,` 隔開 - sep分隔字元:如果有多個項目,項目之間使用分隔字元區隔,預設為一個空白字元。 - end結束字元:列印完成時自動加入的字元,預設為一個換行字元。 ::: ## (2)求三數之和 概念:字串轉數字、數字運算 Scratch: ![](https://i.imgur.com/cC9nfPS.png) Python: ```python= a = int(input('請輸入數字a:')) b = int(input('請輸入數字b:')) c = int(input('請輸入數字c:')) print(a+b+c) ``` #### 變數與資料型態 :::info 在程式中使用變數來儲存資料,對於不同性質的資料,須決定使用哪種資料型態來儲存,這也會影響到電腦要配置多大的記憶體空間給這個變數使用。 Python變數使用的語法為: ```bash 變數名稱 = 變數值 ``` Python會根據變數值設定適合的資料型態。例如: ```python score = 80 # 整數(int) average = 80.8 # 浮點數(float) flag = True # 布林值(b0olean) name = "John" # 字串(string) ``` ::: #### 資料型態轉換 :::info 資料型態相同的變數才能進行運算,對於某些資料型態,Python能夠進行簡單的自動轉換。 如果是整數與浮點數運算,系統會先將整數轉換浮點數再運算,運算結果為浮點數。例如: ```python number = 8 + 6.3 # 結果為14.3,浮點數 ``` 如果系統無法自動進行資料型態轉換,就需使用下列的強制資料轉換指令: - int() 強制轉換為整數。 - float() 強制轉換為浮點數。 - str() 強制轉換為字串。 例如對整數與字串做加法運算會產生錯誤: ```python number1 = 56 + "23" # 錯誤,無法進行運算 number2 = 56 + int("23") # 正確,結果為79 ``` 如果使用input()指令從鍵盤轉入數字,其數字是以字串的資料型態來儲存,必須先將其用int()指令來強制轉換為整數,否則使用加號`+`進行運算,就會變成是字串相加,而不是數值相加。 ::: #### 算術運算符號 :::info 運算符號|意義|範例|運算結果| ----|-------|----|----| +|加法|8+5|13 -|減法|8-5|3 *|乘法|8*5|40 /|除法|8/5|1.6 %|除法取餘數|8%5|3 //|除法取商數|8//5|1 ::: ## (3)求平均數 概念:數字轉文字、文字運算 Scratch: ![](https://i.imgur.com/urQfjU5.png) Python: ```python= a = int(input('請輸入數字a:')) b = int(input('請輸入數字b:')) average = (a + b) / 2 print('平均是'+str(average)) ``` ### + 運算符號 :::info 加號 `+`可用於數值運算,也可用於字串組合,使用時需注意其所應用的資料型態。 ```python 23 + 64 # 正確,結果為87 23 + '64' # 錯誤,無法進行運算 'hello' + 34 # 錯誤,無法進行運算 'hello' + '34' # 正確,結果為 hello34 'hello' + str(34) # 正確,結果為 hello34 ``` ::: ## (4)成績計算 概念:條件式、選擇結構 Scratch: ![](https://i.imgur.com/uI6TyHz.png) Python: ```python= score1 = int(input('請輸入作業成績:')) score2 = int(input('請輸入測驗成績:')) score3 = int(input('請輸入平時成積:')) grade = score1*0.4+score2*0.4+score3*0.2 print('學期成績:'+str(grade)) if grade >= 60: print('及格') else: print('不及格') ``` #### 關係運算符號 :::info 運算符號|意義|範例|運算結果| ----|-------|----|----| ==|相等|8\==5<BR>2+6\==3+5|False<BR>True| !=|不相等|8!=5<BR>2+6!=3+5|True<BR>False| >|大於|8>5<BR>2>6|True<BR>False| <|小於|8<5<BR>2<6|False<BR>True| >=|大於或等於|8>=5<BR>2+3>=5<BR>2>=6|True<BR>True<BR>False| |<=|小於或等於|8<=5<BR>2+3<=5<BR>2<=5|False<BR>True<BR>True| ::: #### 單向選擇結構 :::info 在日常生活,我們經常會遇到要作決策的情況,例如:如果下雨了,就帶把傘出門。程式的執行也是類似的情況,根據條件式運算結果,執行不同的程式區塊。最簡單流程控制是單向選擇結構,語法是: ```python if 條件式: 程式區塊 ``` if敘述後面接著條件式,條件式的運算結果是布林值,當條件式為True時,就會執行程式區塊的敘述。當條件式為False時,不會執行程式區塊。在條件式之後必須有冒號`:`,底下的程式區塊必須縮排,在Python中縮排程式碼,可以使用1個Tab鍵或4個空白字元,須注意兩種方式不能混用。 ::: #### 雙向選擇結構 :::info 如果我們希望遇到情況為True和False時,分別做不同的事,就需要使用雙向選擇結構,語法是: ```python if 條件式: 程式區塊1 else: 程式區塊2 ``` 當條件式為True時,執行程式區塊1,當條件式為False時,執行程式區塊2。 ::: #### 多向選擇結構 :::info 如果發生的情況不只有兩種,就可以使用elif敘述,來做更進一步的選擇,語法: ```python if 條件式1: 程式區塊1 elif 條件式2: 程式區塊2 elif 條件式3: ...... else: 程式區塊n ``` 當條件式為True時,就執行相對應的程式區塊,當所有條件式皆為False時,執行else裡面的程式區塊。 ::: ## (5)累加計算 概念:計次式迴圈 Scratch: ![](https://i.imgur.com/wyq4uOK.png) Python: ```python= n = int(input('請輸入數字n:')) sum = 0 for i in range(1, n+1): sum = sum + i print('1+2+..+'+str(n)+'='+str(sum)) ``` #### 串列 :::info 程式中的資料通常使用變數來儲存,對於大量的資料可以用串列簡化變數的需求量。每一個串列擁有一個識別名稱,串列中的每一個資料稱為元素,每一個元素相當於一個變數,要存取串列中特定元素,是以元素在串列中的位置做為索引值,串列的使用方式如下: ```python 串列名稱 = [元素1, 元素2, ......] ``` 串列中的元素資料型態可以相同,也可以不相同。串列的索引值從0開始,第一個元素的索引值是0,第二個元素的索引值是1,第三個元素的索引值是2,以此類推,索引值也可以是負數,代表從串列最後算起第幾個元素,例如最後一個元素的索引值是-1。 ```python list1 = [1, 2, 3, 4, 5] # 元素皆為整數 list2 = ['John', 'Marry', 'Tom'] # 元素皆為字串 list3 = ['Hellen', 18, True] # 包含不同資料型態元素 print(list1[0]) # 1 print(list2[1]) # Marry print(list3[-1]) # True ::: #### range 函式 :::info 計次式迴圈中經常使用range函式來建立整數循序串列,range函式的語法為: ```python range([起始值,] 終止值 [,累加值] ) ``` 產生的串列是由`起始值`,每次會遞增`累加值`,到`終止值-1`的串列。 ```python list1 = range(5) # list1 = [0, 1, 2, 3, 4] list2 = range(1, 5) # list2 = [1, 2, 3, 4] list3 = range(1, 5, 2) # list3 = [1, 3] list4 = range(5, 1, -1) # list4 = [5, 4, 3, 2] ``` ::: #### for 迴圈 :::info for迴圈是一種處理重覆步驟的語法,它會從一個串列中逐一取出元素,然後指定給迴圈變數,因為串列中的元素個數,即是重複迴圈中程式碼執行的次數,所以稱為計次式迴圈。 ```python for 迴圈變數 in 串列: 程式區塊 ``` 例如有一個數字串列[1,2,3,4,5],我們把它放在for迴圈的in這個關鍵字後方,在結束的冒號前方,另外,使用i來做為迴圈變數。在程式區塊的部份,為了讓Python了解這個區塊是屬於迴圈的內容,所以要向內縮排。譬如說我們在程式區塊的部份,想讓Python印出每一個迴圈中的迴圈變數值,就可以寫成print(i)。因此,全部的程式碼寫法如下: ```python for i in [1,2,3,4,5]: print(i) ``` 另外,因為這個串列是有規則的數列,所以我們可以用range函式來簡化。 ```python for i in range(1,6): print(i) ``` ::: ## (6)密碼檢查 概念:條件式迴圈,邏輯運算 Scratch: ![](https://i.imgur.com/hxXb0or.png) Python: ```python= password = '137' times = 1 password2 = input('請輸入密碼:') while password != password2 and times < 3: print('密碼錯誤!') times = times + 1 password2 = input('請輸入密碼:') if password == password2: print('歡迎使用本系統') else: print('輸入密碼超過3次,帳號已被鎖定。') ``` #### while迴圈 :::info 當我們不知道要重複執行幾次,而是知道繼續重複執行的狀況,這時侯就要使用條件式迴圈。Python的條件式迴圈使用while關鍵字,後面接著條件式,若條件式成立,則執行迴圈中的程式區塊,若條件式不成立,則跳出迴圈。它的語法如下: ```python while 條件式: 程式區塊 ``` 這個例子中的Scratch條件式迴圈積木是重複執行直到條件成立為止,所以這時侯的條件式是終止狀況,不同的是Scratch積木的是,Python的while迴圈,其條件式並不是終止狀況,而是符合條件式的情況下執行迴圈內的程式區塊。 ::: #### 邏輯運算符號 :::info 運算符號|意義|範例|運算結果| ----|-------|----|----| not|反相。傳回與運算結果相反的值。|not (2<3)<BR>not (3>5)|False<BR>True| and|且。左右兩邊同時成立,<BR>運算結果才會成立。|(2<3) and (5<9)<BR>(2<3) and (5>9)<BR>(2>3) and (5<9)<BR>(2>3) and (5>9)|True<BR>False<BR>False<BR>False| or|或。左右兩邊任一個成立,<BR>運算結果就會成立。|(2<3) or (5<9)<BR>(2<3) or (5>9)<BR>(2>3) or (5<9)<BR>(2>3) or (5>9)|True<BR>True<BR>True<BR>False| ::: ## (7)任意數的所有因數 概念:串列 Scratch: ![](https://i.imgur.com/nIVyUKj.png) Python: ```python= n = int(input('請輸入數字n:')) factors = [] for i in range(1, n+1): if n % i == 0: factors.append(i) print(factors) ``` #### 串列 :::info 在第五題時我們已經認識了串列的基本概念,現在我們要來認識串列的進階用法。對於一個串列,可以使用索引值去取用串列中的元素,索引值可以是一個數字,一次取用串列中的一個元素。此外,串列的中括號裡面也可以是一個數字範圍,一次取用串列中多個元素,形成另外一個子串列。 ```python list1 = ['a', 'b', 'c', 'd', 'e'] # 從索引值1的位置開始取用,直到不包含索引值3的位置,將之間的元素取用出來。 list2 = list1[1:3] # list2=['b', 'c'] # 從索引值1的位置開始取用,直到最後一個元素位置,將之間的元素取用出來。 list3 = list1[2:] # list3=['c', 'd','e'] # 從第一個元素(索引值0)的位置開始取用,直到不包含索引值3的位置,將之間元素取用出來 list4 = list[:3] # list4=['a','b','c'] ``` 串列的內容可以新增元素(append)或刪除元素(remove),或是將元素新增在指定的位置上(insert)。 ```python list1 = ['a','b'] list1.append('c') # list1 = ['a','b','c'] list1.remove('b') # list1 = ['a','c'] list1.insert(0,'b') # list1 = ['b','a','c'] list1.insert(2,'d') #list1 = ['b','a', 'd','c'] ::: ## (8)抽獎 概念:亂數 Scratch: ![](https://i.imgur.com/AHXPMpm.png) Python: ```python= from random import randint n = 30 box = [] for i in range(1, n+1): position = randint(0, i-1) box.insert(position,i) print(box) print('第一特獎:'+str(box[0])) print('第二特獎:'+str(box[1])) print('第三特獎:'+str(box[2])) ``` #### 亂數 :::info Python有各式各樣的函式庫可以使用,亂數是Python內建的函式庫,只要加上import random就可以了。此外,如果我們只是要用函式庫裡面的取整數亂數這一個功能而已,這時侯我們可以用 from random import randint 這種寫法,就不會把整個函式庫都匯進來。 randint(a, b)會隨機挑選一個大於等於a、小於等於b的整數。 ```python from random import randint number = randint(1, 100) print(number) ``` ::: ## (9)溫度換算(習作) ## (10)書店打折(習作)