- Python數(shù)據(jù)科學(xué)零基礎(chǔ)一本通
- 洪錦魁
- 4096字
- 2020-07-03 10:52:20
第5章 流程控制及if語句的使用
本章摘要
5-1 關(guān)系運(yùn)算符
5-2 邏輯運(yùn)算符
5-3 if語句
5-4 if … else語句
5-5 if … elif … else語句
5-6 嵌套的if語句
5-7 尚未設(shè)置的變量值None
5-8 專題——BMI程序/猜出生日期/十二生肖系統(tǒng)/線性方程式
一個程序如果是按部就班從頭到尾,中間沒有轉(zhuǎn)折,其實(shí)是無法完成太多工作的。程序設(shè)計(jì)過程中難免會需要轉(zhuǎn)折,這個轉(zhuǎn)折在程序設(shè)計(jì)中的術(shù)語是流程控制。本章將完整講解有關(guān)if語句的流程控制。另外,與程序流程設(shè)計(jì)有關(guān)的關(guān)系運(yùn)算符與邏輯運(yùn)算符也將在本章做說明,因?yàn)檫@些是if語句流程控制的基礎(chǔ)。
5-1 關(guān)系運(yùn)算符
Python語言所使用的關(guān)系運(yùn)算如下。

上述運(yùn)算如果是真會返回True,如果是偽會返回False。
實(shí)例1:下列會返回True。

實(shí)例2:下列會返回False。

5-2 邏輯運(yùn)算符
Python所使用的邏輯運(yùn)算符有以下三個。
and:相當(dāng)于邏輯符號AND。
or:相當(dāng)于邏輯符號OR。
not:相當(dāng)于邏輯符號NOT。
下列是邏輯運(yùn)算符and的圖例說明。

實(shí)例1:下列會返回True。

實(shí)例2:下列會返回False。

下列是邏輯運(yùn)算符or的圖例說明。

實(shí)例3:下列會返回True。

實(shí)例4:下列會返回False。

下列是邏輯運(yùn)算符not的圖例說明。

如果是True經(jīng)過not運(yùn)算會返回False,如果是False經(jīng)過not運(yùn)算會返回True。
實(shí)例5:下列會返回True。

實(shí)例6:下列會返回False。

5-3 if語句
if語句的基本語法如下:
if (條件判斷): # 條件判斷外的小括號可有可無 程序代碼區(qū)塊
如果條件判斷是True,則執(zhí)行程序代碼區(qū)塊,如果條件判斷是False,則不執(zhí)行程序代碼區(qū)塊。如果程序代碼區(qū)塊只有一條指令,可將上述語法寫成下列格式。
if (條件判斷): 程序代碼區(qū)塊
可以用下列流程圖說明這個if語句。

如果讀者學(xué)習(xí)過其他程序語言,例如Visual Basic、C、JavaScript等,在條件表達(dá)式中是使用大括號“{ }”,將if語句的程序代碼區(qū)塊括起來,如下所示(以C語言為實(shí)例)。

在Python內(nèi)是使用內(nèi)縮方式區(qū)隔if語句的程序代碼區(qū)塊,編輯程序時可以用Tab鍵內(nèi)縮或是直接內(nèi)縮4個字符空間,表示這是if語句的程序代碼區(qū)塊。相同內(nèi)容,可以用下列方式處理。

在Python中內(nèi)縮程序代碼是有意義的,相同的程序代碼區(qū)塊,必須有相同的內(nèi)縮,否則會產(chǎn)生錯誤。
實(shí)例1:正確的if語句程序代碼。

實(shí)例2:不正確的if語句程序代碼,下列代碼因?yàn)槿我鈨?nèi)縮造成錯誤。

上述筆者講解if語句是True時需內(nèi)縮4個字符空間,這是Python預(yù)設(shè)的,讀者可能會問可不可以內(nèi)縮5個字符空間,答案是可以的,但是記得相同程序區(qū)塊必須有相同的內(nèi)縮空間。不過如果是使用Python的IDLE編輯環(huán)境,當(dāng)輸入if語句后,只要按Enter鍵,程序就會自動內(nèi)縮4個字符空間。
程序?qū)嵗齝h5_1.py:if語句的基本應(yīng)用。

執(zhí)行結(jié)果

程序?qū)嵗齝h5_2.py:輸出絕對值的應(yīng)用。

執(zhí)行結(jié)果

對于上述ch5_2.py而言,由于if語句只有一條指令,所以可以將第5行和第6行改寫成下列語句。

上述可以得到相同的結(jié)果,詳請可參考本書代碼文件中的ch5_2_1.py。
5-4 if … else語句
程序設(shè)計(jì)時更常用的功能是條件判斷為True時執(zhí)行某一個程序代碼區(qū)塊,當(dāng)條件判斷為False時執(zhí)行另一段程序代碼區(qū)塊,此時可以使用if … else語句,它的語法格式如下:
if (條件判斷): 程序代碼區(qū)塊一 else: 程序代碼區(qū)塊二
如果條件判斷是True,則執(zhí)行程序代碼區(qū)塊一,如果條件判斷是False,則執(zhí)行程序代碼區(qū)塊二。可以用下列流程圖說明這個if … else語句。

程序?qū)嵗齝h5_3.py:重新設(shè)計(jì)ch5_1.py,增加年齡滿20歲時的輸出。

執(zhí)行結(jié)果

程序?qū)嵗齝h5_4.py:奇數(shù)偶數(shù)的判斷。

執(zhí)行結(jié)果

Python語言在執(zhí)行網(wǎng)絡(luò)爬蟲存取數(shù)據(jù)時,常會不知道可以獲得多少筆數(shù)據(jù),例如可能是0~100筆,如果我們想要最多只取10筆數(shù)據(jù)(小于10筆也可以當(dāng)作我們的數(shù)據(jù)),使用傳統(tǒng)程序語言的語法,設(shè)計(jì)觀念應(yīng)該如下:

在Python中,我們可以用下列語法表達(dá):
items = 10 if items >= 10 else items
程序?qū)嵗齝h5_4_1.py:測試if … else語法。

執(zhí)行結(jié)果

5-5 if … elif … else語句
這是一個多重判斷,程序設(shè)計(jì)時需要多個條件做比較時就比較有用。例如,在美國成績計(jì)分是采取A、B、C、D、F等,通常90~100分是A,80~89分是B,70~79分是C,60~69分是D,低于60分是F。使用Python可以用這個語句,很容易就可以完成這個工作。這個語句的基本語法如下。
if (條件判斷一): 程序代碼區(qū)塊一 elif (條件判斷二): 程序代碼區(qū)塊二 … else: 程序代碼區(qū)塊 n
如果條件判斷一是True則執(zhí)行程序代碼區(qū)塊一,然后離開條件判斷。否則檢查條件判斷二,如果是True則執(zhí)行程序代碼區(qū)塊二,然后離開條件判斷。如果條件判斷是False則持續(xù)進(jìn)行檢查,上述elif的條件判斷可以不斷擴(kuò)充,如果所有條件判斷是False則執(zhí)行程序代碼n區(qū)塊。下列流程圖是假設(shè)只有兩個條件判斷說明這個if … elif … else語句。

程序?qū)嵗齝h5_5.py:請輸入數(shù)字分?jǐn)?shù),程序?qū)㈨憫?yīng)A、B、C、D或F等級。

執(zhí)行結(jié)果

程序?qū)嵗齝h5_6.py:有一地區(qū)的票價收費(fèi)標(biāo)準(zhǔn)是100元。
(1)如果小于等于6歲或大于等于80歲,收費(fèi)是打2折。
(2)如果是7~12歲或60~79歲,收費(fèi)是打5折。
請輸入年齡,程序會計(jì)算票價。

執(zhí)行結(jié)果

上述程序的第6行和第9行,如果讀者對于運(yùn)算符執(zhí)行的優(yōu)先級沒有太大的把握,建議直接用小括號將條件判斷括起來,可參考ch5_6_1.py。

程序?qū)嵗齝h5_7.py:這個程序要求輸入字符,然后告知所輸入的字符是大寫字母、小寫字母、阿拉伯?dāng)?shù)字或特殊字符。

執(zhí)行結(jié)果

5-6 嵌套的if語句
嵌套的if語句是指在if語句內(nèi)又有其他的if語句,下列是一種情況的實(shí)例。

其實(shí)Python允許加上許多層,不過層次太多時,未來程序維護(hù)會變得比較困難。
程序?qū)嵗齝h5_8.py:測試某一年是否閏年,閏年的條件是首先可以被4整除(相當(dāng)于沒有余數(shù)),這個條件成立時,還必須符合除以100時余數(shù)不為0或是除以400時余數(shù)為0,當(dāng)兩個條件都符合才算閏年。

執(zhí)行結(jié)果

5-7 尚未設(shè)置的變量值None
有人在設(shè)計(jì)程序時,喜歡將所有變量一次先予以定義,在尚未用到此變量時先設(shè)置這個變量的值是None,如果此時用type( )函數(shù)了解它的類型時將顯示NoneType,如下所示。

通常在設(shè)計(jì)程序時,可使用下列方式測試。
程序設(shè)計(jì)ch5_8_1.py:if語句與None的應(yīng)用。不過要注意的是,None在布爾值運(yùn)算時會被當(dāng)作
False。

執(zhí)行結(jié)果

5-8 專題——BMI程序/猜出生日期/十二生肖系統(tǒng)/ 線性方程式
5-8-1 設(shè)計(jì)人體體重健康判斷程序
BMI(Body Mass Index)又稱身高體重指數(shù)(也稱身體質(zhì)量指數(shù)),是由比利時的科學(xué)家凱特勒(Lambert Quetelet)最先提出,也是世界衛(wèi)生組織認(rèn)可的健康指數(shù),它的計(jì)算方式如下:
BMI = 體重(kg) / 身高(m)2
如果BMI為18.5~23.9,表示這是健康的BMI值。請輸入自己的身高和體重,然后列出是否在健康的范圍。中國官方針對BMI指數(shù)公布的更進(jìn)一步資料如下。

程序?qū)嵗齝h5_9.py:人體健康體重指數(shù)判斷程序,這個程序會要求輸入身高與體重,然后計(jì)算BMI指數(shù),由這個BMI指數(shù)判斷體重是否正常。

執(zhí)行結(jié)果

上述程序第4行"float (height)/100",主要是將身高單位由厘米改為米,上述專題程序可以擴(kuò)充為輸入身高體重后,程序可以列出相應(yīng)BMI值及其所在區(qū)間,作為讀者的習(xí)題。
5-8-2 猜出生日期
本節(jié)將先說明程序,隨后再說明程序的工作原理。在講解猜出生日期之前,先用更簡單的猜0~7數(shù)字做說明。
程序?qū)嵗齝h5_10.py:讀者心中先預(yù)想一個0~7的數(shù)字,程序中會問讀者3個問題,請讀者真心回答,然后這個程序會猜出讀者心中的數(shù)字。

執(zhí)行結(jié)果

0~7的數(shù)字基本上可用3個二進(jìn)制表示,為000~111。其實(shí)所問的3個問題,基本上只是了解特定位是否為1。

了解了以上概念,我們可以再進(jìn)一步擴(kuò)充上述實(shí)例猜測一個人生日的日期,一個人生日的日期是1~31的數(shù)字。
程序?qū)嵗齝h5_11.py:猜測一個人生日的日期,對于1~31的數(shù)字可以用5個二進(jìn)制的位表示,所以可以詢問5個問題,每個問題獲得一個位是否為1,經(jīng)過5個問題即可獲得一個人的生日日期,下列是5組數(shù)據(jù)信息。


執(zhí)行結(jié)果

5-8-3 十二生肖系統(tǒng)
在中國除了使用公元年份代號,也使用鼠、牛、虎、兔、龍、蛇、馬、羊、猴、雞、狗、豬當(dāng)作十二生肖,每12年是一個周期,1900年是鼠年。
程序?qū)嵗齝h5_12.py:請輸入你出生的公元年19××或20××,本程序會輸出相對應(yīng)的生肖年。

執(zhí)行結(jié)果

注 以上是用公元日歷,十二生肖年是用農(nóng)歷年,所以年初或年尾會有一些差異。
5-8-4 求一元二次方程式的根
在中學(xué)數(shù)學(xué)中,可以看到下列一元二次方程式:
ax2 + bx + c = 0
可以用下列方式獲得根。

上述方程式有3種狀況,如果b2 – 4ac是正值,那么這個一元二次方程式有兩個實(shí)數(shù)根。如果b2 – 4ac是0,那么這個一元二次方程式有一個實(shí)數(shù)根。如果b2 – 4ac是負(fù)值,那么這個一元二次方程式?jīng)]有實(shí)數(shù)根。
實(shí)數(shù)根的幾何意義是與x軸交叉點(diǎn)的坐標(biāo)。
程序?qū)嵗齝h5_13.py:有一個一元二次方程式如下:
3x2 + 5x + 1 = 0
求這個方程式的根。

執(zhí)行結(jié)果

5-8-5 求解聯(lián)立線性方程式
假設(shè)有一個聯(lián)立線性方程式如下:
ax + by = e
cx + dy = f
可以用下列方式獲得x和y值。

在上述公式中,如果a×d – b×c等于0,則此聯(lián)立線性方程式無解。
程序?qū)嵗齝h5_14.py:計(jì)算下列聯(lián)立線性方程式的值。
2x + 3y = 13
x – 2y = -4

執(zhí)行結(jié)果

習(xí)題
1. 請改為不使用abs( )函 數(shù)重新設(shè)計(jì)ch5_2.py程序。(5-3節(jié))

2. 請輸入3個數(shù)字,本程序可以將數(shù)字由大到小輸出。(5-3節(jié))

3. 有一個圓半徑是20,圓中心在坐標(biāo)(0,0)位置,請輸入任意點(diǎn)坐標(biāo),這個程序可以判斷此點(diǎn)坐標(biāo)是不是在圓內(nèi)部。(5-4節(jié))
提示 可以計(jì)算點(diǎn)坐標(biāo)距離圓中心的長度是否小于半徑。

4. 請?jiān)O(shè)計(jì)一個程序,如果輸入是負(fù)值則將它改成正值輸出,如果輸入是正值則將它改成負(fù)值輸出。(5-4節(jié))

5. 用戶可以先選擇華氏溫度與攝氏溫度轉(zhuǎn)換方式,然后輸入一個溫度,可以轉(zhuǎn)換成另一種溫度。(5-5節(jié))

6. 假設(shè)在麥當(dāng)勞打工每周領(lǐng)一次薪資,工作基本時薪是150元,其他規(guī)則如下。
(1)小于40小時(周),每小時是基本時薪的0.8倍。
(2)等于40小時(周),每小時是基本時薪。
(3)大于40至50(含)小時(周),每小時是基本時薪的1.2倍。
(4)大于50小時(周),每小時是基本時薪的1.6倍。
請輸入工作時數(shù),然后可以計(jì)算周薪。(5-5節(jié))

7. 假設(shè)今天是星期日,請輸入天數(shù)days,本程序可以響應(yīng)days天后是星期幾。(5-5節(jié))

8. 三角形邊長的要求是兩邊長加起來大于第三邊,請輸入3個邊長,如果這3個邊長可以形成三角形則輸出三角形的周長。如果這3個邊長無法形成三角形,則輸出這不是三角形的邊長。(5-6節(jié))

9. 擴(kuò)充設(shè)計(jì)ch5_9.py,列出中國BMI指數(shù)區(qū)分的結(jié)果表。(5-7節(jié))

10. 請參考ch5_13.py,但是修改為在屏幕上輸入a, b, c三個數(shù)值,彼此用逗號隔開,然后計(jì)算此一元二次方程式的根,先列出有幾個根。如果有實(shí)數(shù)根則列出根值,如果沒有實(shí)數(shù)根則列出沒有實(shí)數(shù)根,然后程序結(jié)束。(5-7節(jié))

11. 請參考ch5_14.py,但是修改為在屏幕上輸入a, b, c, d, e, f六個數(shù)值,彼此用逗號隔開,這些數(shù)值分別是聯(lián)立線性方程式的系數(shù)與方程式的值,然后計(jì)算此線性方程式的x和y值,如果此題無解則列出此題目沒有解。(5-7節(jié))

- ADuC 7026原理與應(yīng)用
- RISC-V開放架構(gòu)設(shè)計(jì)之道
- 大學(xué)計(jì)算機(jī)基礎(chǔ)(Windows 7+Office 2010)
- 計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)與應(yīng)用(實(shí)驗(yàn)指南)
- 計(jì)算機(jī)應(yīng)用基礎(chǔ)實(shí)訓(xùn)指導(dǎo)
- 大學(xué)計(jì)算機(jī)基礎(chǔ)實(shí)踐教程(第2版)
- 群智能算法在人腦功能劃分中的應(yīng)用
- 計(jì)算機(jī)應(yīng)用基礎(chǔ)案例教程(第2版)
- 大話云計(jì)算
- 數(shù)字影像直線提取與匹配方法
- 計(jì)算機(jī)網(wǎng)絡(luò)簡明教程
- 計(jì)算機(jī)應(yīng)用基礎(chǔ)
- 無處不在的算法
- 思科網(wǎng)絡(luò)技術(shù)學(xué)院教程:IT基礎(chǔ)(第7版)
- 數(shù)字化人機(jī)工程設(shè)計(jì)