版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第二次上機(jī)總結(jié)11、以file的形式寫代碼,交互式的界面只適合于單語句代碼的測試2、file文件中以函數(shù)為單位寫代碼,方便調(diào)用以實現(xiàn)代碼重用3、inport語句放在程序的開頭,即程序總注釋后面,第一個函數(shù)前面1第二次上機(jī)總結(jié)2提高課堂效率了解每次課的主要內(nèi)容2第3章數(shù)據(jù)處理的流程控制計算機(jī)程序根據(jù)語句的順序依次向下執(zhí)行。#convert.py#AprogramtoconvertCelsiustempstoFahrenheitdefmain():celsius=input("Whatisthe...”)fahrenheit=9.0/5.0*celsius+32print"Thetemperatureis",fahren...main()流程圖:用標(biāo)準(zhǔn)化的圖形符號來表示程序步驟但這種順序執(zhí)行顯然是不夠的,我們會要求某個功能重復(fù)執(zhí)行,也會要求根據(jù)不同的前提條件執(zhí)行不同的功能,所以引入了另兩種控制結(jié)構(gòu)——分支和循環(huán)§3.2分支結(jié)構(gòu)§3.3異常處理§3.4循環(huán)結(jié)構(gòu)§3.5結(jié)構(gòu)化程序設(shè)計1單分支結(jié)構(gòu)2二分支結(jié)構(gòu)3多分支結(jié)構(gòu)(一)溫度轉(zhuǎn)換的例子(eg3_1.py)#convert.py#AprogramtoconvertCelsiustempstoFahrenheitdefmain():celsius=input("Whatisthe...”)fahrenheit=9.0/5.0*celsius+32print"Thetemperatureis",fahren...main()(一)溫度轉(zhuǎn)換的例子希望他可以根據(jù)不同的溫度給出不同的提示。Iffahrenheit>90
printahotwarningIffahrenheit<30
printacoldwarning(一)溫度轉(zhuǎn)換的例子:流程圖(一)溫度轉(zhuǎn)換的例子改進(jìn)版#convert2.pydefmain():celsius=input("Whatisthe...?")fahrenheit=9.0/5.0*celsius+32print"Thetemperatureis",fahrenheit,...
iffahrenheit>90:print"It'sreallyhotoutthere,..."
iffahrenheit<30:print"Brrrrr.Besuretodresswarmly"main()單分支語句(二)用于執(zhí)行決策的if語句語法:if<condition>:(iffahrenheit>90:) <body>next語義:先判斷條件表達(dá)式(condition)true,執(zhí)行語句體(body),再轉(zhuǎn)向下一個語句false,忽略語句體(body),直接轉(zhuǎn)向下一個語句語句體(body):一個或多個語句在:后面縮進(jìn)顯示,body中的各語句縮進(jìn)對齊(三)條件表達(dá)式的格式簡單條件表達(dá)式(condition):比較兩個表達(dá)式
<expr1><relop><expr2>(a+2<=a*2)關(guān)系運(yùn)算:<,<=,==,>=,>,!=數(shù)值比較:整型數(shù)的比較,實型數(shù)的比較字符串比較:按字典序。字母序由編碼(ASCII等)決定.如:大寫字母在小寫字母前.<condition>稱為布爾表達(dá)式結(jié)果為true/false,1/0Relationoperation(關(guān)系運(yùn)算符)§3.2分支結(jié)構(gòu)§3.3異常處理§3.4循環(huán)結(jié)構(gòu)§3.5結(jié)構(gòu)化程序設(shè)計1單分支結(jié)構(gòu)2二分支結(jié)構(gòu)3多分支結(jié)構(gòu)求一元二次方程的例子(ver1.0)#quadratic.pyimportmathdef
main():
print"Thisprogramfindsthereal..."a,b,c=input("Pleaseenter..(a,b,c):")discRoot=math.sqrt(b*b-4*a*c)root1=(-b+discRoot)/(2*a)root2=(-b-discRoot)/(2*a)print"Thesolutionsare:",root1,root2main()ThisprogramfindstherealsolutionstoaquadraticPleaseenterthecoefficients(a,b,c):1,1,2Traceback(mostrecentcalllast):File"C:\DocumentsandSettings\Terry\MyDocuments\Teaching\W04\CS120\Textbook\code\chapter3\quadratic.py",line21,in-toplevel-main()File"C:\DocumentsandSettings\Terry\MyDocuments\Teaching\W04\CS120\Textbook\code\chapter3\quadratic.py",line14,inmain
discRoot=math.sqrt(b*b-4*a*c)ValueError:mathdomainerror
ver1.0的運(yùn)行引入決策分支結(jié)構(gòu)#quadratic2.py,當(dāng)discrim>=0時才有解importmathdefmain():print"Thisprogramfindstherealsolutions...\n"a,b,c=input("Pleaseenterthe...(a,b,c):")discrim=b*b-4*a*c
ifdiscrim>=0:discRoot=math.sqrt(discrim)root1=(-b+discRoot)/(2*a)root2=(-b-discRoot)/(2*a)print"\nThesolutionsare:",root1,root2main()求一元二次方程的例子(ver2.0)ver2.0的運(yùn)行結(jié)果
Thisprogramfindstherealsolutionstoaquadratic
Pleaseenterthecoefficients(a,b,c):1,1,1
>>>
discRoot<0時,沒有任何執(zhí)行語句就結(jié)束了應(yīng)該給出提示#quadratic2.py的改良importmathdefmain():print"Thisprogramfindstherealsolutions...\n"a,b,c=input("Pleaseenterthe...(a,b,c):")discrim=b*b-4*a*cifdiscrim>=0:discRoot=math.sqrt(discrim)root1=(-b+discRoot)/(2*a)root2=(-b-discRoot)/(2*a)print"\nThesolutionsare:",root1,root2ifdiscRoot<0:print“Theequationhasnorealroots!”
main()求一元二次方程的例子(ver2.0+)該程序兩個if語句的流程圖?做了基于同一個值的兩次條件表達(dá)式的判斷,不夠高效二分支結(jié)構(gòu)二分支結(jié)構(gòu)語法:
if<condition>:
<statements1>
else:
<statements2>nextstatements#quadratic3.py考慮到負(fù)值并會給出提示importmathdefmain():print"Thisprogramfindstherealsolutions...\n"a,b,c=input("Pleaseenterthe...(a,b,c):")discrim=b*b-4*a*c
ifdiscrim<0:
print"\nTheequationhasnorealroots!"else:discRoot=math.sqrt(b*b-4*a*c)root1=(-b+discRoot)/(2*a)root2=(-b-discRoot)/(2*a)print"\nThesolutionsare:",root1,root2
main()求一元二次方程的例子(ver3.0)ThisprogramfindstherealsolutionstoaquadraticPleaseenterthecoefficients(a,b,c):1,2,1
Thesolutionsare:-1.0-1.0
該程序還可以改善:同時<0、==0、>0三種情況ver3.0的運(yùn)行結(jié)果§3.2分支結(jié)構(gòu)§3.3異常處理§3.4循環(huán)結(jié)構(gòu)§3.5結(jié)構(gòu)化程序設(shè)計1單分支結(jié)構(gòu)2二分支結(jié)構(gòu)3多分支結(jié)構(gòu)多分支結(jié)構(gòu)ifdiscrim<0:print"Equationhasnorealroots"else:#大于等于0的情況ifdiscrim==0:root=-b/(2*a)print"Thereisadoublerootat",rootelse:#大于0的情況discRoot=math.sqrt(b*b-4*a*c)root1=(-b+discRoot)/(2*a)root2=(-b-discRoot)/(2*a)print"\nThesolutionsare:",root1,root2if...else的嵌套:if或else后面的語句塊可以是if…else語句多分支結(jié)構(gòu)的實現(xiàn)1:if...else的嵌套教材p121:第13題程序設(shè)計:輸入百分制的考試分?jǐn)?shù),輸出相應(yīng)的等級制名稱。設(shè)A:90-100,B:80-89,C:70-79,D:60-69,F:60分以下多層嵌套會導(dǎo)致縮進(jìn)很多多分支結(jié)構(gòu)的實現(xiàn)2:elif語法:if<condition1>:
<case1statements>
elif<condition2>:
<case2statements>
elif<condition3>:
<case3statements>
…
else:
<defaultstatements><nextstatements>語義:
找到第一個為真的條件表達(dá)式并執(zhí)行對應(yīng)語句序列,控制轉(zhuǎn)向下一條語句;若無,則執(zhí)行else下的語句序列,控制轉(zhuǎn)向下一條語句。#quadratic4.py同時考慮三種情況importmathdefmain():print"Thisprogramfindstherealsolutions...\n"a,b,c=input("Pleaseenterthe...(a,b,c):")discrim=b*b-4*a*c
ifdiscrim<0:print"\nTheequationhasnorealroots!"
elifdiscrim==0:root=-b/(2*a)print"\nThereisadoublerootat",root
else:discRoot=math.sqrt(b*b-4*a*c)root1=(-b+discRoot)/(2*a)root2=(-b-discRoot)/(2*a)print"\nThesolutionsare:",root1,root2
求一元二次方程的例子(ver4.0)教材p121:第13題程序設(shè)計:輸入百分制的考試分?jǐn)?shù),輸出相應(yīng)的等級制名稱。設(shè)A:90-100,B:80-89,C:70-79,D:60-69,F:60分以下Boolean操作符有時候簡單的bool表達(dá)式還不夠用and、or、not等去組合多個布爾表達(dá)式
<條件表達(dá)式1>and<條件表達(dá)式2><條件表達(dá)式1>or<條件表達(dá)式2>not<條件表達(dá)式>布爾操作結(jié)果PQPandQPorQnotPTTTTFTFFTFFTFTTFFFFT我們可以用布爾操作符任意地組合各種布爾表達(dá)式。最終的結(jié)果還是T或F。Boolean操作符aornotbandc是T還是F(a,b,c皆為T)?操作符的優(yōu)先級:not>and>or上述表達(dá)式等價于
(aor((notb)andc))在記不住優(yōu)先級的時候,加小括號確定優(yōu)先級寫B(tài)ool表達(dá)式的例子:
模擬racquetball的結(jié)束兩個人比賽,得分記為scoreA,scoreB,沒分出勝負(fù)之前循環(huán)比賽,直到有一人勝出。循環(huán)的退出表達(dá)式怎么寫?先得15分者勝(1)有一位得15分的表示scoreA==15orscoreB==15(2)滿足上述條件的時候停止,否則繼續(xù)比賽whilenot(scoreA==15orscoreB==15):#continueplaying只要滿足一個條件就要退出取not的時候就是沒退出,繼續(xù)游戲例:模擬racquetball的結(jié)束先得15分或7:0者勝whilenot(a==15orb==15or(a==7andb==0)or(b==7anda==0))必須有一方大于15并且至少要多2分才勝whilenot((a>=15anda-b>=2)or(b>=15andb-a>=2))Boolean代數(shù)對布爾表達(dá)式的要求:
能寫:將實際問題所涉及的條件表達(dá)成布爾表達(dá)式
能計算:能對布爾表達(dá)式進(jìn)行演算和推導(dǎo)布爾表達(dá)式也能進(jìn)行代數(shù)計算(布爾邏輯)Boolean代數(shù)andhaspropertiessimilarto*orhaspropertiessimilarto+0and1correspondtofalseandtrue,respectively.AlgebraBooleanalgebraa*0=0a
andfalse==falsea*1=aa
andtrue==aa+0=aa
orfalse==aBoolean代數(shù)任何數(shù)ortrue,其結(jié)果肯定為true:
aortrue==trueand和or服從分配律:
aor(bandc)==(aorb)and(aorc)
aand(borc)==(aandb)or(aandc)雙重否定就是肯定:
not(nota)==a摩根定律:
not(aorb)==(nota)and(notb)
not(aandb)==(nota)or(notb)Python對布爾值和布爾運(yùn)算的處理很靈活可擴(kuò)展閱讀
中文教材2.4.4Python中真假的表示與計算
§3.2分支結(jié)構(gòu)§3.3異常處理§3.4循環(huán)結(jié)構(gòu)§3.5結(jié)構(gòu)化程序設(shè)計quadratic.py程序會產(chǎn)生很多問題quadratic2-4.py利用決策分支避免了其中的開方為負(fù)數(shù)時的運(yùn)行錯誤在其他很多程序里,也經(jīng)常用決策分支結(jié)構(gòu)保護(hù)程序,避免出現(xiàn)雖然幾率很小但還是不可避免會發(fā)生的錯誤。#quadratic.pyimportmathdefmain():print"Thisprogramfindsthereal..."a,b,c=input("Pleaseenter..(a,b,c):")
ifa==0:#非二次方程
handler1…
iftype(a)!=‘int’ortype(b)!=‘int’ortype(c)!=‘int’:#輸入類型錯誤
handler2
…discRoot=math.sqrt(b*b-4*a*c)
ifdiscRoot<0:
handler3
…root1=(-b+discRoot)/(2*a)root2=(-b-discRoot)/(2*a)print"Thesolutionsare:",root1,root2main()raw_input()
當(dāng)程序中充斥著這樣的錯誤檢測代碼時,解決問題的算法反而不明顯了。
是不是可以把程序的主干留著,錯誤處理代碼提出來放到專門的地方異常處理機(jī)制異常處理機(jī)制把錯誤集中在一起處理,以免影響算法的主線條。Python提供try...except...可使程序不因運(yùn)行錯誤而崩潰,盡量讓用戶不受意外結(jié)果的困擾。異常處理語句語法:try:<mainbody>except<ErrorType1>:<handler1>except<ErrorType2>:<handler2>...except:<handlern>nextstatement語義:執(zhí)行<body>。
若無錯,控制轉(zhuǎn)下一語句;
若有錯,查找匹配該錯誤的except子句,找到則執(zhí)行相應(yīng)的處理程序,找不到則程序崩潰,系統(tǒng)報錯。編程實例:完善quadratic.py用異常處理語句來捕獲math.sqrt的溢出錯誤(quadratic5.py)try:...exceptValueError:...錯誤類型:從系統(tǒng)報錯信息中可得。如ValueError,TypeError,NameError等Traceback(mostrecentcalllast):
File"C:\DocumentsandSettings\Terry\MyDocuments\Teaching\W04\CS120\Textbook\code\chapter3\quadratic.py",line21,in-toplevel-
main()
File"C:\DocumentsandSettings\Terry\MyDocuments\Teaching\W04\CS120\Textbook\code\chapter3\quadratic.py",line14,inmain
discRoot=math.sqrt(b*b-4*a*c)
ValueError:mathdomainerror#quadratic5.pyimportmathdefmain():print"Thisprogramfindstherealsolutions...\n"a,b,c=input("Pleaseenterthe...(a,b,c):")try:discRoot=math.sqrt(b*b-4*a*c)root1=(-b+discRoot)/(2*a)root2=(-b-discRoot)/(2*a)print"\nThesolutionsare:",root1,root2
exceptValueError:print"\nNorealroots“
exceptZeroDivisionError:
print“inputerror,acannotbezero."main()求一元二次方程的例子(ver5.0)將a等于0的判斷也作為異常,使程序更加簡潔運(yùn)行程序ver5.0:
Thisprogramfindstherealsolutionstoaquadratic
Pleaseenterthecoefficients(a,b,c):1,1,1
Norealrootstry…except可以捕捉任何類型的錯誤,包括內(nèi)置類型,自定義類型等。對于quadraticprogram,還會有其他的運(yùn)行錯誤,如:輸入非數(shù)值類型,輸入非常量而是變量(NameError),輸入無效的數(shù)值類型(TypeError)等。此時可以用一個try語句加多重except來實現(xiàn)?!?.2分支結(jié)構(gòu)§3.3異常處理§3.4循環(huán)結(jié)構(gòu)§3.5結(jié)構(gòu)化程序設(shè)計(1)for循環(huán):回顧
(2)while循環(huán)(3)常見循環(huán)模式
(4)循環(huán)的非正常中斷for循環(huán)語法:for<var>in<sequence>:
<body>例子:foriinrange(100):printi語義:循環(huán)索引值var依次取sequence中的值,每循環(huán)一次執(zhí)行一次<body>用for處理序列數(shù)據(jù)的兩種遍歷方式>>>data=['Bornon:','July',2,2005]直接遍歷序列>>>fordindata:printd,通過索引遍歷序列>>>foriinrange(len(data)):printdata[i],
可以更靈活地處理序列數(shù)據(jù),如>>>foriinrange(0,len(data),3):...用for處理各種序列數(shù)據(jù)字符串>>>forcin"helloworld":printc,元組>>>foriin(1,2,3):printi
嵌套序列:如元組的列表>>>fortin[(1,2),(3,4),(5,6)]:printt,t[0],t[1]
(1,2)12(3,4)34(5,6)56123helloworld假設(shè)我們要求一組數(shù)的均值為了實現(xiàn)程序的通用性,必須使得該程序能夠求任意個數(shù)的平均值程序特點:不要求記錄每個值,只要求平均值,所以我們可以只記錄加和值。for循環(huán)例子#average1.py#Aprogramtoaverageasetofnumbersdefmain():n=input("Howmanynumbersdoyouhave?")
sum=0.0foriinrange(n):x=input("Enteranumber>>")
sum=sum+xprint"\nTheaverageis",sum/nfor循環(huán)累積計算:(1)初始值的設(shè)定(2)循環(huán)計算,更新Howmanynumbersdoyouhave?5Enteranumber>>32Enteranumber>>45Enteranumber>>34Enteranumber>>76Enteranumber>>45Theaverageofthenumbersis46.4average1.py的缺點:需要用戶輸入n,不適合事先不知道n的場合不知道n則不能用確定的計數(shù)循環(huán)for不確定的條件循環(huán):while上機(jī)課上交的作業(yè)問題:1、沒交作業(yè):915691689172919291949196920592162、存成了txt文件(9169,9175)3、沒寫成函數(shù)的形式(9197,9211)4、輸出格式:%
上機(jī)課上交的作業(yè)問題:59%的應(yīng)用printi,”$”+str("%0.2f“%principal)printi,“$%0.2f“%principal§3.2分支結(jié)構(gòu)§3.3異常處理§3.4循環(huán)結(jié)構(gòu)§3.5結(jié)構(gòu)化程序設(shè)計(1)for循環(huán):回顧
(2)while循環(huán)(3)常見循環(huán)模式
(4)循環(huán)的非正常中斷語法:while<condition>:<body>nextstatement語義:只要條件成立就反復(fù)執(zhí)行循環(huán)體;當(dāng)條件不成立則執(zhí)行下一條語句。不確定循環(huán):whilewhile<condition>:
<body>條件表達(dá)式(condition)是一個bool型的表達(dá)式。語句體(body)是一句或多句語句,多句語句時縮進(jìn)對齊。每次循環(huán)時,先檢查條件表達(dá)式,為真時執(zhí)行body,為假時略過body執(zhí)行while后的語句,循環(huán)終止。不確定循環(huán):whilewhile循環(huán)的特點循環(huán)前測試條件若不滿足,則循環(huán)體一次都不執(zhí)行循環(huán)體影響下一次條件測試否則導(dǎo)致無窮循環(huán)條件循環(huán)體yesno例如:要依次打印1-10這10個數(shù):forloop:
foriinrange(1,11):
printiwhileloop:
i=1
whilei<=10:
printi
i=i+1while循環(huán)的特點兩者有什么區(qū)別???(1)while需要對循環(huán)變量i進(jìn)行初始化,而for循環(huán)的循環(huán)變量是自動處理的(2)while語句相對簡單,但循環(huán)體一定要影響下一次條件測試試想,如果沒有i=i+1這條語句,會發(fā)生什么事情?i一直為0,陷入死循環(huán)§3.2分支結(jié)構(gòu)§3.3異常處理§3.4循環(huán)結(jié)構(gòu)§3.5結(jié)構(gòu)化程序設(shè)計(1)for循環(huán):回顧
(2)while循環(huán)(3)常見循環(huán)模式
(4)循環(huán)的非正常中斷(一)交互式循環(huán)
(二)哨兵循環(huán)(三)后測試循環(huán)(四)嵌套循環(huán)根據(jù)用戶交互來決定是否循環(huán)下去求和例子(eg3_10.py):用戶不斷輸入數(shù)據(jù),程序得到數(shù)據(jù)后不斷累加,最后算出輸入數(shù)據(jù)的總和偽代碼:
設(shè)置一個循環(huán)控制變量(moredata=yes/no)while(moredata為yes):
獲得用戶輸入的數(shù)據(jù)
處理該數(shù)據(jù)
詢問用戶是否還要輸入數(shù)據(jù),即更新moredata的值
(一)交互式循環(huán)
#交互式循環(huán)的codesum=0#累積值賦初值moredata=“yes“#循環(huán)控制變量賦初值while(moredata[0]==“y”ormoredata[0]==“Y“):x=input("Inputanumber:")sum=sum+x
moredata=raw_input("More?(yes/no)")print"Thesumis",sum
(一)交互式循環(huán)
運(yùn)行eg3_10.pyInputanumber:32More?(yes/no)yInputanumber:40More?(yes/no)yInputanumber:50More?(yes/no)yInputanumber:45More?(yes/no)nThesumis167優(yōu)點:用戶不用事先輸入n缺點:用戶會被沒完沒了的“y”的輸入煩死改進(jìn):設(shè)置一個特殊數(shù)據(jù)值作為終止循環(huán)的信號。(二)哨兵循環(huán)(SentinelLoops)Asentinelloop
就是一直循環(huán)干事直到碰到一個特殊值。這個特殊值被稱為哨兵(sentinel)。這個哨兵必須能很明確地和其它輸入值分開。算法模式:前導(dǎo)輸入while該數(shù)據(jù)不是哨兵:
處理該數(shù)據(jù)
循環(huán)尾輸入(下一個數(shù)據(jù))哨兵循環(huán)例(1)正常數(shù)據(jù)是非負(fù)數(shù),則可以-1作為哨兵:eg3_11.pysum=0x=input("Inputanumber(-1toquit):")whilex>=0:sum=sum+xx=input("Inputanumber(-1toquit):")print"Thesumis",sum
哨兵循環(huán)例(2)正常數(shù)據(jù)是任何實數(shù),則可以空串作為哨兵:eg3_12.pysum=0x=raw_input("Inputanumber(<Enter>toquit):")whilex!="":sum=sum+eval(x)x=raw_input("Inputanumber(<Enter>toquit):")print"Thesumis",sum
(三)后測試循環(huán)輸入驗證問題:檢查用戶輸入是否符合要求,不符合就要求用戶重新輸入,直至符合為止。這是一種后測試循環(huán):執(zhí)行循環(huán)體后才測試條件循環(huán)體至少執(zhí)行一次直至條件成立才退出循環(huán)有些語言提供repeat…until語句Python可用while實現(xiàn)只需確保首次進(jìn)入while時條件成立x=1whilex<0:...例如,假設(shè)程序要求用戶輸入一個正數(shù),則用下面代碼片段可檢查輸入合法性:x=-1whilex<0:x=input(“pleaseinputapositivenumber:”)(四)嵌套循環(huán)(NestedLoops)分支結(jié)構(gòu)能夠嵌套,循環(huán)結(jié)構(gòu)也能嵌套——一個循環(huán)語句體內(nèi)可以是循環(huán)語句。如果序列的成員本身又是序列,就需要嵌套循環(huán)來處理。數(shù)學(xué)中向量是一維序列,矩陣是二維序列(四)嵌套循環(huán)(NestedLoops)用嵌套循環(huán)遍歷矩陣元素:a=[[11,12],[21,22],[31,32]]sum=0foriina:
forjini:sum=sum+jprintsumsum=0foriina:
forjini:sum=sum+j
printsum,sum=0foriina:
forjini:sum=sum+j
printsum,嵌套循環(huán)例打印乘法口訣表關(guān)鍵是輸出的排列>>>foriinrange(1,10):forjinrange(1,i+1):print"%dx%d=%-2d"%(j,i,j*i),print1x1=11x2=22x2=41x3=32x3=63x3=91x4=42x4=83x4=124x4=161x5=52x5=103x5=154x5=205x5=251x6=62x6=123x6=184x6=245x6=306x6=361x7=72x7=143x7=214x7=285x7=356x7=427x7=491x8=82x8=163x8=244x8=325x8=406x8=487x8=568x8=641x9=92x9=183x9=274x9=365x9=456x9=547x9=638x9=729x9=81§3.2分支結(jié)構(gòu)§3.3異常處理§3.4循環(huán)結(jié)構(gòu)§3.5結(jié)構(gòu)化程序設(shè)計(1)for循環(huán):回顧
(2)while循環(huán)(3)常見循環(huán)模式
(4)循環(huán)的非正常中斷正常的循環(huán)總是按“從頭到尾再回到頭”的方式進(jìn)行,但是很多編程語言都提供了特定條件下打破正常循環(huán)方式的語句,便于解決問題。Python:break和continue循環(huán)的非正常中斷循環(huán)非正常中斷:break語義:中止本輪循環(huán),結(jié)束break所處的循環(huán)語句。常與whileTrue形式的無窮循環(huán)配合使用例1:輸入合法性檢查whileTrue:x=input("請輸入非負(fù)數(shù):")ifx>=0:break例2:break也可以跳出for循環(huán)foriinrange(10):print"煩"ifi>4:break循環(huán)非正常中斷:continue語義:中止本輪循環(huán),控制轉(zhuǎn)移到所處循環(huán)語句的開頭“繼續(xù)”下一輪循環(huán)。例:對列表中的奇數(shù)求和a=[23,28,39,44,50,67,99]sum=0foriina:ifa%2==0:continuesum=sum+iprintsumforiinrange(10):print"煩"ifi>4:continueforiinrange(10):ifi>4:continueprint"煩"foriinrange(10):ifi==4:breakprint"煩"foriinrange(10):ifi==4:continueprint"煩"煩煩煩煩煩煩煩煩煩煩煩煩煩§3.2分支結(jié)構(gòu)§3.3異常處理§3.4循環(huán)結(jié)構(gòu)§3.5結(jié)構(gòu)化程序設(shè)計程序設(shè)計的發(fā)展早期:手工作坊式程序規(guī)模小,功能簡單要在有限內(nèi)存中盡快完成計算憑借程序員的個人編程技巧后來:作為工程來開發(fā)程序規(guī)模大,功能復(fù)雜內(nèi)存和速度不是問題,軟件可靠性和開發(fā)效率變得突出依靠系統(tǒng)化的開發(fā)方法和工具程序開發(fā)的周期Step1、需求分析:我們要解決什么問題?分析的越仔細(xì)越好。Step2、制定程序規(guī)格:
程序要做什么?主要關(guān)注能完成什么,而非程序怎么運(yùn)行。例如,對于簡單程序,我們只要描述輸入輸出,然后看他們是怎么關(guān)聯(lián)的即可。Step3、算法設(shè)計:描述怎么做。闡明程序的整個框架結(jié)構(gòu)??紤]程序如何運(yùn)行,設(shè)計適合于上述規(guī)格的算法。一般用偽代碼給出總體結(jié)構(gòu),不糾纏細(xì)節(jié)。Step4、算法實現(xiàn):用某種程序設(shè)計語言編寫代碼。Step5、測試與排錯:測試程序是否如預(yù)期,排除bug(debug)。Step6、維護(hù)程序:運(yùn)行中還會不斷有問題,如持續(xù)開發(fā)、程序的改進(jìn)等。什么是好的程序解決同一個問題,可以設(shè)計出多種處理過程,即編制多種程序。即使各種程序都正確。仍然有好壞之分。除了正確性,好的程序應(yīng)該是:效率高易理解易維護(hù)可擴(kuò)展如何得到好的程序手工作坊階段靠的是個人編程技巧如今則要善于依靠程序設(shè)計方法和工具方法:結(jié)構(gòu)化方法,模塊化方法,面向?qū)ο蠓椒ǖ裙ぞ撸航9ぞ?,集成開發(fā)環(huán)境等編程案例:求最大值(1)考慮求三個數(shù)x1,x2,x3的最大值的問題策略1:每個數(shù)都與其他數(shù)比較大小ifx1>=x2andx1>=x3:max=x1elifx2>=x1andx2>=x3:max=x2else:max=x3此算法中各分支彼此獨(dú)立。但實際上一個分支的信息對其他分支是有用的!此算法不適合較大n的情況編程案例:求最大值(2)策略2:判定樹ifx1>=x2:
ifx1>=x3:max=x1else:max=x3else:ifx2>=x3:max=x2else:max=x3好處:只需兩次比較,效率高.壞處:結(jié)構(gòu)復(fù)雜,復(fù)雜度隨n爆炸式增長.編程案例:求最大值(3)策略3:順序處理,記錄當(dāng)前最大值。max=x1ifx2>=max:max=x
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球中低牌號無取向硅鋼行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國超精密非球面磨床行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國高超音速推進(jìn)系統(tǒng)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 中藥鑒定學(xué)全草類藥材麻黃講解
- 2025建設(shè)工程施工合同(條款)
- 國內(nèi)水路集裝箱貨物運(yùn)輸合同
- 2025合同模板國際貿(mào)易合同范本
- 貨物運(yùn)輸保險單合同
- 2025門面房購房的合同范本大全
- 建筑節(jié)能綠色建筑技術(shù)與設(shè)備更新方案
- 2025年廣州中醫(yī)藥大學(xué)順德醫(yī)院(佛山市順德區(qū)中醫(yī)院)招考聘用高頻重點提升(共500題)附帶答案詳解
- 2025年華僑港澳臺學(xué)生聯(lián)招考試英語試卷試題(含答案詳解)
- 2024-2025學(xué)年北京石景山區(qū)九年級初三(上)期末語文試卷(含答案)
- 第一章 整式的乘除 單元測試(含答案) 2024-2025學(xué)年北師大版數(shù)學(xué)七年級下冊
- 藥品流通監(jiān)管培訓(xùn)
- JD37-009-2024 山東省存量更新片區(qū)城市設(shè)計編制技術(shù)導(dǎo)則
- 中國高血壓防治指南(2024年修訂版)
- 北京市海淀區(qū)重點中學(xué)2025屆高考數(shù)學(xué)押題試卷含解析
- GB/Z 44765.3-2024用戶端能源管理系統(tǒng)和電網(wǎng)側(cè)管理系統(tǒng)間的接口第3部分:架構(gòu)
- 《春酒》琦君完整版
- 北師大版(2024新版)七年級上冊數(shù)學(xué)第四章《基本平面圖形》測試卷(含答案解析)
評論
0/150
提交評論