一、簡單分支
計(jì)算機(jī)程序可以被理解為一條順序執(zhí)行的代碼,順序結(jié)構(gòu)是程序設(shè)計(jì)的基礎(chǔ),但單一的順序結(jié)構(gòu)不可能解決所有的問題。因此,需要引入控制結(jié)構(gòu)來改變程序的執(zhí)行順序,以滿足復(fù)雜的功能需求。
如何允許程序在不同情況下,以不同的順序執(zhí)行指令。以及如何有效的選擇程序的執(zhí)行路徑。
二、PM2.5空氣質(zhì)量程序
1、PM2.5指數(shù)分級程序功能IPO模式描述
①、輸入:接受外部輸入PM2.5值
②、處理:空氣質(zhì)量分級算法
③、輸出:打印空氣質(zhì)量提醒
2、PM2.5指數(shù)分級偽代碼
if PM2.5值>75
? ? ? ? ? ? 打印空氣污染警告
if PM2.5值<35
? ? ? ? ? ? 打印空氣質(zhì)量優(yōu),建議戶外運(yùn)動(dòng)
菱形框給出決策條件,如果條件不成立,控制傳遞給隊(duì)列中下一個(gè)語句。條件成立,控制傳遞給右邊的方框中。完成這些指令后,控制傳遞到下一個(gè)語句。
三、空氣質(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語句格式
if <condition>:
? ? ????<body>
①<condition>是條件表達(dá)式
②<body>是一個(gè)或多個(gè)語句序列
2、先判斷<condition>條件
①true,則執(zhí)行<body>,再轉(zhuǎn)向下一條語句
②false,則直接跳過<body>,轉(zhuǎn)向下一條語句
if語句體的執(zhí)行與否,依賴于條件判斷。但無論什么情況,控制都會(huì)轉(zhuǎn)向if后面的下一條語句。這就是簡單分支結(jié)構(gòu)。
3、簡單條件構(gòu)造
①簡單條件基本形式<expr> <relop> <expr>
②<relop>是關(guān)系操作符<,<=,==,>=,>,!=
③使用“=”表示賦值語句,使用“==”表示等于
④除數(shù)字外,字符或字符串也可以按照字典順序用于條件比較
⑤<condition>是布爾表達(dá)式,為bool類型,布爾值的真和假以字符True和False表示
四、求解二次方程的實(shí)數(shù)根程序
#quadratic.py
#計(jì)算二次方程的實(shí)數(shù)根程序
#此方程在方程沒有實(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庫中的sqrt函數(shù)
delta小于0時(shí)會(huì)簡單跳過if語句,直接退出程序,沒有給出用戶任何的出錯(cuò)反饋。好的程序應(yīng)該打印一條消息,告訴用戶這個(gè)方程沒有實(shí)根。
所以在程序尾部添加另一個(gè)決策判斷來實(shí)現(xiàn)消息打印。
if delta < 0 :
? ? ? ? print("The equation has no real roots !")
以上改進(jìn)解決了出錯(cuò)的問題,但仍然不夠完美。根據(jù)delta的值,程序應(yīng)該打印無實(shí)根,或計(jì)算并顯示實(shí)根。
四、二分支決策
這正是一個(gè)上面編寫的雙決策序列,兩個(gè)結(jié)果互相排斥。如果delta>=0是真的,那么delta<0就一定是假的,反之亦然。這看起來是兩個(gè)條件,但實(shí)際上他們只是一種決策。我們可以通過使用python中的if……else語句來實(shí)現(xiàn)這個(gè)二分支決策。
二分支語法結(jié)構(gòu)
if <condition> :
? ? ? ? <statements>
else :
? ? ? ? <statements>
當(dāng)python解釋器遇到這個(gè)結(jié)構(gòu)時(shí),首先評估condition,如果condition是真的,if下面的語句被執(zhí)行。如果condition是假的,轉(zhuǎn)而執(zhí)行else下面的語句。無論哪種情況,之后的控制都會(huì)傳給if……else后面的語句。
下面給出了二次方程求解中,使用一個(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()