一、簡(jiǎn)單分支
計(jì)算機(jī)程序可以被理解為一條順序執(zhí)行的代碼,順序結(jié)構(gòu)是程序設(shè)計(jì)的基礎(chǔ)越锈,但單一的順序結(jié)構(gòu)不可能解決所有的問(wèn)題仗嗦。因此,需要引入控制結(jié)構(gòu)來(lái)改變程序的執(zhí)行順序甘凭,以滿足復(fù)雜的功能需求稀拐。
如何允許程序在不同情況下,以不同的順序執(zhí)行指令丹弱。以及如何有效的選擇程序的執(zhí)行路徑德撬。
二、PM2.5空氣質(zhì)量程序
1躲胳、PM2.5指數(shù)分級(jí)程序功能IPO模式描述
①蜓洪、輸入:接受外部輸入PM2.5值
②、處理:空氣質(zhì)量分級(jí)算法
③坯苹、輸出:打印空氣質(zhì)量提醒
2隆檀、PM2.5指數(shù)分級(jí)偽代碼
if PM2.5值>75
? ? ? ? ? ? 打印空氣污染警告
if PM2.5值<35
? ? ? ? ? ? 打印空氣質(zhì)量?jī)?yōu),建議戶外運(yùn)動(dòng)
菱形框給出決策條件粹湃,如果條件不成立恐仑,控制傳遞給隊(duì)列中下一個(gè)語(yǔ)句。條件成立为鳄,控制傳遞給右邊的方框中裳仆。完成這些指令后,控制傳遞到下一個(gè)語(yǔ)句济赎。
三鉴逞、空氣質(zhì)量提醒py程序
#pm25.py
#空氣質(zhì)量提醒
def main():
? ? ? ?PM = eval ( input?("What is today's PM2.5" ) )
? ? ? ?#打印相應(yīng)提醒
? ? ? ?if PM > 75 :
? ? ? ? ????print ( "Unhealthy. Be careful ! " )
? ? ? ?if PM < 35 :
????????????print?( "Good. Go running ! " )
main()
1、if語(yǔ)句格式
if <condition>:
? ? ????<body>
①<condition>是條件表達(dá)式
②<body>是一個(gè)或多個(gè)語(yǔ)句序列
2司训、先判斷<condition>條件
①true构捡,則執(zhí)行<body>,再轉(zhuǎn)向下一條語(yǔ)句
②false壳猜,則直接跳過(guò)<body>勾徽,轉(zhuǎn)向下一條語(yǔ)句
if語(yǔ)句體的執(zhí)行與否,依賴于條件判斷统扳。但無(wú)論什么情況喘帚,控制都會(huì)轉(zhuǎn)向if后面的下一條語(yǔ)句。這就是簡(jiǎn)單分支結(jié)構(gòu)咒钟。
3吹由、簡(jiǎn)單條件構(gòu)造
①簡(jiǎn)單條件基本形式<expr> <relop> <expr>
②<relop>是關(guān)系操作符<,<=朱嘴,==倾鲫,>=粗合,>,!=
③使用“=”表示賦值語(yǔ)句乌昔,使用“==”表示等于
④除數(shù)字外隙疚,字符或字符串也可以按照字典順序用于條件比較
⑤<condition>是布爾表達(dá)式,為bool類型磕道,布爾值的真和假以字符True和False表示
四供屉、求解二次方程的實(shí)數(shù)根程序
#quadratic.py
#計(jì)算二次方程的實(shí)數(shù)根程序
#此方程在方程沒(méi)有實(shí)根的情況下報(bào)錯(cuò)
import math
def main () :
????????print("This program finds the real solutions to a quadratic\n")
? ? ? ? a , b , c = eval( input ("Please enter the coefficients(a , b , c ):") )
? ? ? ? discRoot = math.sqrt( b * b - 4 * a * c)
? ? ? ? root1 =?(-b + discRoot ) /?(2 * a )
? ? ? ? root2 =?(-b - discRoot ) /?(2 * a )
????????print( " \nThe solutions are:" , root1, root2)
main()
1、二次方程求解的IPO模式
①輸入二次方程參數(shù)
②處理為二次方程求解算法
③輸出為打印二次方程的根
2溺蕉、執(zhí)行程序伶丐,輸入1,2,3時(shí)報(bào)錯(cuò)
3、改進(jìn)程序
#quadratic2.py
import math
def main() :
print("This program finds the real solutions to a quadratic\n")
a , b , c = eval( input("Please enter the coefficients(a , b , c ):"))
delta = ?b * b - 4 * a * c
if delta >= 0:
? ? ? ? discRoot = math.sqrt(delta)
????????root1 =?(-b + discRoot ) /?(2 * a )
????????root2 =?(-b - discRoot ) /?(2 * a )
????????print( " \nThe solutions are:" , root1, root2)
main()
當(dāng)delta為負(fù)時(shí)焙贷,這個(gè)程序則不會(huì)調(diào)用math庫(kù)中的sqrt函數(shù)
delta小于0時(shí)會(huì)簡(jiǎn)單跳過(guò)if語(yǔ)句撵割,直接退出程序,沒(méi)有給出用戶任何的出錯(cuò)反饋辙芍。好的程序應(yīng)該打印一條消息啡彬,告訴用戶這個(gè)方程沒(méi)有實(shí)根。
所以在程序尾部添加另一個(gè)決策判斷來(lái)實(shí)現(xiàn)消息打印故硅。
if delta < 0 :
? ? ? ? print("The equation has no real roots !")
以上改進(jìn)解決了出錯(cuò)的問(wèn)題庶灿,但仍然不夠完美。根據(jù)delta的值吃衅,程序應(yīng)該打印無(wú)實(shí)根往踢,或計(jì)算并顯示實(shí)根。
四徘层、二分支決策
這正是一個(gè)上面編寫(xiě)的雙決策序列峻呕,兩個(gè)結(jié)果互相排斥。如果delta>=0是真的趣效,那么delta<0就一定是假的瘦癌,反之亦然。這看起來(lái)是兩個(gè)條件跷敬,但實(shí)際上他們只是一種決策讯私。我們可以通過(guò)使用python中的if……else語(yǔ)句來(lái)實(shí)現(xiàn)這個(gè)二分支決策。
二分支語(yǔ)法結(jié)構(gòu)
if <condition> :
? ? ? ? <statements>
else :
? ? ? ? <statements>
當(dāng)python解釋器遇到這個(gè)結(jié)構(gòu)時(shí)西傀,首先評(píng)估condition斤寇,如果condition是真的,if下面的語(yǔ)句被執(zhí)行拥褂。如果condition是假的娘锁,轉(zhuǎn)而執(zhí)行else下面的語(yǔ)句。無(wú)論哪種情況饺鹃,之后的控制都會(huì)傳給if……else后面的語(yǔ)句莫秆。
下面給出了二次方程求解中碎税,使用一個(gè)二次分支決策的求解二次方程的程序代碼。
#quadratic3.py
import math
def main() :
????????print("This program finds the real solutions to a quadratic\n")
????????a , b , c = eval( input("Please enter the coefficients(a , b , c ):"))
????????delta = ?b * b - 4 * a * c
????????if?delta < 0:
? ? ? ? ? ? ????print("\nThe equation has no real roots ! ")
? ? ? ? else :
????????????????discRoot = math.sqrt(delta)
????????????????root1 =?(-b + discRoot ) /?(2 * a )
????????????????root2 =?(-b - discRoot ) /?(2 * a )
????????????????print( " \nThe solutions are:" , root1, root2)
main()