官术网_书友最值得收藏!

第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é))

主站蜘蛛池模板: 平罗县| 清涧县| 无棣县| 河源市| 阳原县| 武城县| 普格县| 临沭县| 灵璧县| 铅山县| 甘孜| 清新县| 涿鹿县| 阜阳市| 环江| 茌平县| 定安县| 涿鹿县| 竹山县| 通河县| 鄢陵县| 伊川县| 双城市| 阿荣旗| 锡林郭勒盟| 古丈县| 资溪县| 新密市| 蒙山县| 海盐县| 邵东县| 平乡县| 神木县| 克东县| 河津市| 佛坪县| 鄂伦春自治旗| 保德县| 岗巴县| 鹤庆县| 涟水县|