2 程式控制結構
1基礎知識
“布林”資料型別只有兩個值:True和False。在直譯器中輸入以下程式碼並得到如下結果:
我們可以觀察到,這裡的True不是字串,兩邊沒有引號,它是變數Var的值。請使用Type()函式,檢視變數Var的資料型別
關係運算符的作用是用來比較兩個值,其比較結果是一個布林值。下表列出來常見的關係運算符:
關係運算符 |
含義 |
== |
等於 |
!= |
不等於 |
< |
小於 |
> |
大於 |
<= |
小於等於 |
>= |
大於等於 |
現在,我們有一個問題:如何比較兩個布林值?為了比較兩個布林值,需要用到邏輯運算子。Python中有三個邏輯運算子:and,or和not。這些運算子的含義和它們在英語中的意思相似。其中,and和or操作符總是接受兩個布林值(或表示式)。邏輯運算子的所有可能結果用“真值表”表示,如下表所示:
and操作符的真值表:
表示式 |
求值結果 |
True and True |
True |
True and False |
False |
False and True |
False |
False and False |
False |
or操作符的真值表:
表示式 |
求值結果 |
True or True |
True |
True or False |
True |
False or True |
True |
False or False |
False |
not操作符的真值表:
表示式 |
求值結果 |
not True |
False |
not False |
True |
程式流程圖是用一系列圖形、柳城縣和文字說明描述程式的基本操作和流程控制,流程圖的常用元素有5種,如圖4.1所示:
圖4.1 程式流程圖的常用元素
程式有三種基本結構組成:順序結構、分支結構和迴圈結構
順序結構:按照程式碼出現的先後順序依次執行;
分支結構:根據條件判斷是否執行相關語句,又包括單分支結構,二分支結構和多分支結構。
迴圈結構:當條件成立時,重複執行某些語句。
程式的分支結構:
Python中的if語句語法格式如下:
if <條件>:
<語句塊>
它是程式流程控制裡面最常見的語句,語句塊將在語句的條件為True時執行。如果條件為False,語句塊將被跳過。在Python中,if語句包含以下部分:
- if關鍵字;
- 條件(即求值為True或False的表示式);
- 冒號;
- 在下一行開始縮排的程式碼塊(即if子句)。
針對於二選一執行的情況,我們稱之為二分之一結構,用到了else語句。只有當if語句的條件為False時,else子句才會執行。else語句不包含條件,但是包含以下部分:
- else關鍵字;
- 冒號;
- 在下一行開始,縮排的程式碼塊(稱為else子句)。
對於對分支結構,我們希望許多種可能的情況中的一個被執行,需要用到elif語句。該語句總是跟在if或者另一條elif語句後面。它提供了另一個條件,僅在前面的條件為False時才檢查該條件。一個elif語句總是包含以下部分:
- elif關鍵字;
- 條件;
- 冒號;
- 在下一行開始,縮排的程式碼塊(稱為elif子句)。
程式的迴圈結構:
根據迴圈次數的確定性,迴圈可以分為確定次數迴圈和非確定次數迴圈。確定次數迴圈指迴圈體對於迴圈次數有明確的定義,通常採用for迴圈來實現,稱為遍歷迴圈。非確定次數迴圈是指程式不確定迴圈體可能的執行的次數,而通過條件判斷是否繼續迴圈體,採用while語句實現,稱為無限迴圈。
遍歷迴圈中,for語句的語法如下:
for <迴圈變數> in <遍歷結構>:
<語句塊>
遍歷迴圈可以理解為從遍歷結構中注意提取元素,放在迴圈變數中,對於所提取的元素執行一次語句塊。遍歷結構可以使字串、檔案、組合資料型別或者range()函式等。
無限迴圈中,while語句的語法如下:
while <條件>:
<語句塊>
跳出迴圈的方法:
迴圈結構中有break和continue語句,用來輔助控制迴圈執行。區別在於break語句用來跳出最內層for或者while迴圈,脫離該迴圈後程序從迴圈程式碼後繼續執行。continue語句用來結束當前當次迴圈,即跳過當次迴圈尚未執行的語句,繼續下次迴圈。
2實驗步驟
直譯器中輸入Var=Ture,並記錄結果: 請使用Type()函式,檢視變數Var的值,所得結果為: 在Python直譯器中輸入以下程式碼並記錄所得結果:
42<100
42>100
42==42
注意:這裡有一個常見錯誤是在判斷兩個值相等的時候需要使用雙等號(==)而不是單獨一個等號(=),單獨一個等號叫:運算子。在直譯器中輸入(4<5) and (5<6),(4<5) and (9<6)和(1==2) or (2==2)三個程式碼,顯示結果分別為:
思考一下計算機的求值過程,以(4<5) and (5<6)為例,求值過程為?
與算數運算子一樣,邏輯預算符也有先後順序:在所有算術運算子和關係運算符求值之後,Python先求值not,然後是and,最後是or。
假設一個班裡面有7名同學,再一次考試中,他們的得分如下表所示:
學生編號 |
得分 |
0 |
58 |
1 |
67 |
2 |
82 |
3 |
93 |
4 |
89 |
5 |
97 |
6 |
74 |
現在,試著編寫一個程式,為七個學生轉換一下輸出成績,轉換規則為:得分為60分以下,輸出不及格,得分在60-80分之間,輸出為良好,得分在80分以上的,輸出為優秀。假設我們現在輸入第一個學生的分數(58分),首先來判斷他的得分是否在60分以下,要完成這個判斷,我們可以使用if語句。
新建一個名為Test1.py的檔案,輸入以下程式碼
Step 2:輸入以下程式碼,來判斷學生2的成績是否及格。
輸出結果為:
Step3: 回到上面的例子中,我們將判定條件分為三種情況:得分為60分以下,輸出不及格,得分在60-80分之間,輸出為良好,得分在80分以上的,輸出為優秀。輸入以下程式碼,判斷學生3的成績檔次:
輸出結果為:
3.3我們用選擇結構解決了按照不同的條件為學生成績分檔的問題。然而,要設計一個完整的成績分檔系統,還需要我們重複執行選擇結構。這裡有7個學生,就需要執行7次上面的選擇結構來為學生成績分檔,這裡的重複執行一種操作,在程式設計中就叫迴圈結構。
Step 1:輸入以下程式碼:
輸出結果為:
Step 2:首先,使用註釋操作符(#)將第十行註釋掉。執行該程式,我們得到的結果為:
Step 3:按Ctrl+C結束該程式,我們現在思考一下,為什麼會出現這個現象?回到程式碼中,我們發現在每次while迴圈中,變數Stu_No的值為:
因此,while迴圈中的條件語句Stu_No <= 6的結果總為真,while迴圈無法結束,這種現象被稱為死迴圈。
在Python的迴圈結構中,除了while語句,for語句配合range()函式也是一種常用的迴圈方式。
Step 4:將上面的程式碼改為如下程式碼:
執行以上程式碼,結果為:
4實驗練習
4.1 身體質量指數是國際上常用的衡量人體肥胖程度與是否健康的重要標準。其分類如下表所示:
分類 |
國際BMI值(kg/m2 ) |
國內BMI值 |
偏瘦 |
<18.5 |
|
正常 |
18.5-25 |
18.5-24 |
偏胖 |
25-30 |
24-28 |
肥胖 |
30以上 |
28以上 |
編寫一個根據身高體重計算BMI值的程式,要求輸入身高和體重,列印輸出BMI分類資訊。
4.2 將百分制成績轉換為等級制輸出(90~100為A等,80~89為B等,70~79為C等,60~69為D等,不及格為E等)。
4.3 編寫一個程式,求累加和,當資料項小於0.1時停止,數列如下:
1+1/2+1/3+1/4+1/5…