版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第二次上機(jī)總結(jié)11、以file的形式寫(xiě)代碼,交互式的界面只適合于單語(yǔ)句代碼的測(cè)試2、file文件中以函數(shù)為單位寫(xiě)代碼,方便調(diào)用以實(shí)現(xiàn)代碼重用3、inport語(yǔ)句放在程序的開(kāi)頭,即程序總注釋后面,第一個(gè)函數(shù)前面1第二次上機(jī)總結(jié)2提高課堂效率了解每次課的主要內(nèi)容2第3章數(shù)據(jù)處理的流程控制計(jì)算機(jī)程序根據(jù)語(yǔ)句的順序依次向下執(zhí)行。#convert.py#AprogramtoconvertCelsiustempstoFahrenheitdefmain():celsius=input("Whatisthe...”)fahrenheit=9.0/5.0*celsius+32print"Thetemperatureis",fahren...main()流程圖:用標(biāo)準(zhǔn)化的圖形符號(hào)來(lái)表示程序步驟但這種順序執(zhí)行顯然是不夠的,我們會(huì)要求某個(gè)功能重復(fù)執(zhí)行,也會(huì)要求根據(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è)計(jì)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()單分支語(yǔ)句(二)用于執(zhí)行決策的if語(yǔ)句語(yǔ)法:if<condition>:(iffahrenheit>90:) <body>next語(yǔ)義:先判斷條件表達(dá)式(condition)true,執(zhí)行語(yǔ)句體(body),再轉(zhuǎn)向下一個(gè)語(yǔ)句false,忽略語(yǔ)句體(body),直接轉(zhuǎn)向下一個(gè)語(yǔ)句語(yǔ)句體(body):一個(gè)或多個(gè)語(yǔ)句在:后面縮進(jìn)顯示,body中的各語(yǔ)句縮進(jìn)對(duì)齊(三)條件表達(dá)式的格式簡(jiǎn)單條件表達(dá)式(condition):比較兩個(gè)表達(dá)式
<expr1><relop><expr2>(a+2<=a*2)關(guān)系運(yùn)算:<,<=,==,>=,>,!=數(shù)值比較:整型數(shù)的比較,實(shí)型數(shù)的比較字符串比較:按字典序。字母序由編碼(ASCII等)決定.如:大寫(xiě)字母在小寫(xiě)字母前.<condition>稱(chēng)為布爾表達(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è)計(jì)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時(shí)才有解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時(shí),沒(méi)有任何執(zhí)行語(yǔ)句就結(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+)該程序兩個(gè)if語(yǔ)句的流程圖?做了基于同一個(gè)值的兩次條件表達(dá)式的判斷,不夠高效二分支結(jié)構(gòu)二分支結(jié)構(gòu)語(yǔ)法:
if<condition>:
<statements1>
else:
<statements2>nextstatements#quadratic3.py考慮到負(fù)值并會(huì)給出提示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
該程序還可以改善:同時(shí)<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è)計(jì)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后面的語(yǔ)句塊可以是if…else語(yǔ)句多分支結(jié)構(gòu)的實(shí)現(xiàn)1:if...else的嵌套教材p121:第13題程序設(shè)計(jì):輸入百分制的考試分?jǐn)?shù),輸出相應(yīng)的等級(jí)制名稱(chēng)。設(shè)A:90-100,B:80-89,C:70-79,D:60-69,F:60分以下多層嵌套會(huì)導(dǎo)致縮進(jìn)很多多分支結(jié)構(gòu)的實(shí)現(xiàn)2:elif語(yǔ)法:if<condition1>:
<case1statements>
elif<condition2>:
<case2statements>
elif<condition3>:
<case3statements>
…
else:
<defaultstatements><nextstatements>語(yǔ)義:
找到第一個(gè)為真的條件表達(dá)式并執(zhí)行對(duì)應(yīng)語(yǔ)句序列,控制轉(zhuǎn)向下一條語(yǔ)句;若無(wú),則執(zhí)行else下的語(yǔ)句序列,控制轉(zhuǎn)向下一條語(yǔ)句。#quadratic4.py同時(shí)考慮三種情況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ì):輸入百分制的考試分?jǐn)?shù),輸出相應(yīng)的等級(jí)制名稱(chēng)。設(shè)A:90-100,B:80-89,C:70-79,D:60-69,F:60分以下Boolean操作符有時(shí)候簡(jiǎn)單的bool表達(dá)式還不夠用and、or、not等去組合多個(gè)布爾表達(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(mén))?操作符的優(yōu)先級(jí):not>and>or上述表達(dá)式等價(jià)于
(aor((notb)andc))在記不住優(yōu)先級(jí)的時(shí)候,加小括號(hào)確定優(yōu)先級(jí)寫(xiě)B(tài)ool表達(dá)式的例子:
模擬racquetball的結(jié)束兩個(gè)人比賽,得分記為scoreA,scoreB,沒(méi)分出勝負(fù)之前循環(huán)比賽,直到有一人勝出。循環(huán)的退出表達(dá)式怎么寫(xiě)?先得15分者勝(1)有一位得15分的表示scoreA==15orscoreB==15(2)滿(mǎn)足上述條件的時(shí)候停止,否則繼續(xù)比賽whilenot(scoreA==15orscoreB==15):#continueplaying只要滿(mǎn)足一個(gè)條件就要退出取not的時(shí)候就是沒(méi)退出,繼續(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ù)對(duì)布爾表達(dá)式的要求:
能寫(xiě):將實(shí)際問(wèn)題所涉及的條件表達(dá)成布爾表達(dá)式
能計(jì)算:能對(duì)布爾表達(dá)式進(jìn)行演算和推導(dǎo)布爾表達(dá)式也能進(jìn)行代數(shù)計(jì)算(布爾邏輯)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對(duì)布爾值和布爾運(yùn)算的處理很靈活可擴(kuò)展閱讀
中文教材2.4.4Python中真假的表示與計(jì)算
§3.2分支結(jié)構(gòu)§3.3異常處理§3.4循環(huán)結(jié)構(gòu)§3.5結(jié)構(gòu)化程序設(shè)計(jì)quadratic.py程序會(huì)產(chǎn)生很多問(wèn)題quadratic2-4.py利用決策分支避免了其中的開(kāi)方為負(fù)數(shù)時(shí)的運(yùn)行錯(cuò)誤在其他很多程序里,也經(jīng)常用決策分支結(jié)構(gòu)保護(hù)程序,避免出現(xiàn)雖然幾率很小但還是不可避免會(huì)發(fā)生的錯(cuò)誤。#quadratic.pyimportmathdefmain():print"Thisprogramfindsthereal..."a,b,c=input("Pleaseenter..(a,b,c):")
ifa==0:#非二次方程
handler1…
iftype(a)!=‘int’ortype(b)!=‘int’ortype(c)!=‘int’:#輸入類(lèi)型錯(cuò)誤
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)程序中充斥著這樣的錯(cuò)誤檢測(cè)代碼時(shí),解決問(wèn)題的算法反而不明顯了。
是不是可以把程序的主干留著,錯(cuò)誤處理代碼提出來(lái)放到專(zhuān)門(mén)的地方異常處理機(jī)制異常處理機(jī)制把錯(cuò)誤集中在一起處理,以免影響算法的主線(xiàn)條。Python提供try...except...可使程序不因運(yùn)行錯(cuò)誤而崩潰,盡量讓用戶(hù)不受意外結(jié)果的困擾。異常處理語(yǔ)句語(yǔ)法:try:<mainbody>except<ErrorType1>:<handler1>except<ErrorType2>:<handler2>...except:<handlern>nextstatement語(yǔ)義:執(zhí)行<body>。
若無(wú)錯(cuò),控制轉(zhuǎn)下一語(yǔ)句;
若有錯(cuò),查找匹配該錯(cuò)誤的except子句,找到則執(zhí)行相應(yīng)的處理程序,找不到則程序崩潰,系統(tǒng)報(bào)錯(cuò)。編程實(shí)例:完善quadratic.py用異常處理語(yǔ)句來(lái)捕獲math.sqrt的溢出錯(cuò)誤(quadratic5.py)try:...exceptValueError:...錯(cuò)誤類(lèi)型:從系統(tǒng)報(bào)錯(cuò)信息中可得。如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的判斷也作為異常,使程序更加簡(jiǎn)潔運(yùn)行程序ver5.0:
Thisprogramfindstherealsolutionstoaquadratic
Pleaseenterthecoefficients(a,b,c):1,1,1
Norealrootstry…except可以捕捉任何類(lèi)型的錯(cuò)誤,包括內(nèi)置類(lèi)型,自定義類(lèi)型等。對(duì)于quadraticprogram,還會(huì)有其他的運(yùn)行錯(cuò)誤,如:輸入非數(shù)值類(lèi)型,輸入非常量而是變量(NameError),輸入無(wú)效的數(shù)值類(lèi)型(TypeError)等。此時(shí)可以用一個(gè)try語(yǔ)句加多重except來(lái)實(shí)現(xiàn)?!?.2分支結(jié)構(gòu)§3.3異常處理§3.4循環(huán)結(jié)構(gòu)§3.5結(jié)構(gòu)化程序設(shè)計(jì)(1)for循環(huán):回顧
(2)while循環(huán)(3)常見(jiàn)循環(huán)模式
(4)循環(huán)的非正常中斷for循環(huán)語(yǔ)法:for<var>in<sequence>:
<body>例子:foriinrange(100):printi語(yǔ)義:循環(huán)索引值var依次取sequence中的值,每循環(huán)一次執(zhí)行一次<body>用for處理序列數(shù)據(jù)的兩種遍歷方式>>>data=['Bornon:','July',2,2005]直接遍歷序列>>>fordindata:printd,通過(guò)索引遍歷序列>>>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ù)的均值為了實(shí)現(xiàn)程序的通用性,必須使得該程序能夠求任意個(gè)數(shù)的平均值程序特點(diǎn):不要求記錄每個(gè)值,只要求平均值,所以我們可以只記錄加和值。for循環(huán)例子#average1.py#Aprogramtoaverageasetofnumbersdefmain():n=input("Howmanynumbersdoyouhave?")
sum=0.0foriinrange(n):x=input("Enteranumber>>")
sum=sum+xprint"\nTheaverageis",sum/nfor循環(huán)累積計(jì)算:(1)初始值的設(shè)定(2)循環(huán)計(jì)算,更新Howmanynumbersdoyouhave?5Enteranumber>>32Enteranumber>>45Enteranumber>>34Enteranumber>>76Enteranumber>>45Theaverageofthenumbersis46.4average1.py的缺點(diǎn):需要用戶(hù)輸入n,不適合事先不知道n的場(chǎng)合不知道n則不能用確定的計(jì)數(shù)循環(huán)for不確定的條件循環(huán):while上機(jī)課上交的作業(yè)問(wèn)題:1、沒(méi)交作業(yè):915691689172919291949196920592162、存成了txt文件(9169,9175)3、沒(méi)寫(xiě)成函數(shù)的形式(9197,9211)4、輸出格式:%
上機(jī)課上交的作業(yè)問(wèn)題: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è)計(jì)(1)for循環(huán):回顧
(2)while循環(huán)(3)常見(jiàn)循環(huán)模式
(4)循環(huán)的非正常中斷語(yǔ)法:while<condition>:<body>nextstatement語(yǔ)義:只要條件成立就反復(fù)執(zhí)行循環(huán)體;當(dāng)條件不成立則執(zhí)行下一條語(yǔ)句。不確定循環(huán):whilewhile<condition>:
<body>條件表達(dá)式(condition)是一個(gè)bool型的表達(dá)式。語(yǔ)句體(body)是一句或多句語(yǔ)句,多句語(yǔ)句時(shí)縮進(jìn)對(duì)齊。每次循環(huán)時(shí),先檢查條件表達(dá)式,為真時(shí)執(zhí)行body,為假時(shí)略過(guò)body執(zhí)行while后的語(yǔ)句,循環(huán)終止。不確定循環(huán):whilewhile循環(huán)的特點(diǎn)循環(huán)前測(cè)試條件若不滿(mǎn)足,則循環(huán)體一次都不執(zhí)行循環(huán)體影響下一次條件測(cè)試否則導(dǎo)致無(wú)窮循環(huán)條件循環(huán)體yesno例如:要依次打印1-10這10個(gè)數(shù):forloop:
foriinrange(1,11):
printiwhileloop:
i=1
whilei<=10:
printi
i=i+1while循環(huán)的特點(diǎn)兩者有什么區(qū)別???(1)while需要對(duì)循環(huán)變量i進(jìn)行初始化,而for循環(huán)的循環(huán)變量是自動(dòng)處理的(2)while語(yǔ)句相對(duì)簡(jiǎn)單,但循環(huán)體一定要影響下一次條件測(cè)試試想,如果沒(méi)有i=i+1這條語(yǔ)句,會(huì)發(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è)計(jì)(1)for循環(huán):回顧
(2)while循環(huán)(3)常見(jiàn)循環(huán)模式
(4)循環(huán)的非正常中斷(一)交互式循環(huán)
(二)哨兵循環(huán)(三)后測(cè)試循環(huán)(四)嵌套循環(huán)根據(jù)用戶(hù)交互來(lái)決定是否循環(huán)下去求和例子(eg3_10.py):用戶(hù)不斷輸入數(shù)據(jù),程序得到數(shù)據(jù)后不斷累加,最后算出輸入數(shù)據(jù)的總和偽代碼:
設(shè)置一個(gè)循環(huán)控制變量(moredata=yes/no)while(moredata為yes):
獲得用戶(hù)輸入的數(shù)據(jù)
處理該數(shù)據(jù)
詢(xún)問(wèn)用戶(hù)是否還要輸入數(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)點(diǎn):用戶(hù)不用事先輸入n缺點(diǎn):用戶(hù)會(huì)被沒(méi)完沒(méi)了的“y”的輸入煩死改進(jìn):設(shè)置一個(gè)特殊數(shù)據(jù)值作為終止循環(huán)的信號(hào)。(二)哨兵循環(huán)(SentinelLoops)Asentinelloop
就是一直循環(huán)干事直到碰到一個(gè)特殊值。這個(gè)特殊值被稱(chēng)為哨兵(sentinel)。這個(gè)哨兵必須能很明確地和其它輸入值分開(kāi)。算法模式:前導(dǎo)輸入while該數(shù)據(jù)不是哨兵:
處理該數(shù)據(jù)
循環(huán)尾輸入(下一個(gè)數(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í)數(shù),則可以空串作為哨兵:eg3_12.pysum=0x=raw_input("Inputanumber(<Enter>toquit):")whilex!="":sum=sum+eval(x)x=raw_input("Inputanumber(<Enter>toquit):")print"Thesumis",sum
(三)后測(cè)試循環(huán)輸入驗(yàn)證問(wèn)題:檢查用戶(hù)輸入是否符合要求,不符合就要求用戶(hù)重新輸入,直至符合為止。這是一種后測(cè)試循環(huán):執(zhí)行循環(huán)體后才測(cè)試條件循環(huán)體至少執(zhí)行一次直至條件成立才退出循環(huán)有些語(yǔ)言提供repeat…until語(yǔ)句Python可用while實(shí)現(xiàn)只需確保首次進(jìn)入while時(shí)條件成立x=1whilex<0:...例如,假設(shè)程序要求用戶(hù)輸入一個(gè)正數(shù),則用下面代碼片段可檢查輸入合法性:x=-1whilex<0:x=input(“pleaseinputapositivenumber:”)(四)嵌套循環(huán)(NestedLoops)分支結(jié)構(gòu)能夠嵌套,循環(huán)結(jié)構(gòu)也能嵌套——一個(gè)循環(huán)語(yǔ)句體內(nèi)可以是循環(huán)語(yǔ)句。如果序列的成員本身又是序列,就需要嵌套循環(huán)來(lái)處理。數(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è)計(jì)(1)for循環(huán):回顧
(2)while循環(huán)(3)常見(jiàn)循環(huán)模式
(4)循環(huán)的非正常中斷正常的循環(huán)總是按“從頭到尾再回到頭”的方式進(jìn)行,但是很多編程語(yǔ)言都提供了特定條件下打破正常循環(huán)方式的語(yǔ)句,便于解決問(wèn)題。Python:break和continue循環(huán)的非正常中斷循環(huán)非正常中斷:break語(yǔ)義:中止本輪循環(huán),結(jié)束break所處的循環(huán)語(yǔ)句。常與whileTrue形式的無(wú)窮循環(huán)配合使用例1:輸入合法性檢查whileTrue:x=input("請(qǐng)輸入非負(fù)數(shù):")ifx>=0:break例2:break也可以跳出for循環(huán)foriinrange(10):print"煩"ifi>4:break循環(huán)非正常中斷:continue語(yǔ)義:中止本輪循環(huán),控制轉(zhuǎn)移到所處循環(huán)語(yǔ)句的開(kāi)頭“繼續(xù)”下一輪循環(huán)。例:對(duì)列表中的奇數(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è)計(jì)程序設(shè)計(jì)的發(fā)展早期:手工作坊式程序規(guī)模小,功能簡(jiǎn)單要在有限內(nèi)存中盡快完成計(jì)算憑借程序員的個(gè)人編程技巧后來(lái):作為工程來(lái)開(kāi)發(fā)程序規(guī)模大,功能復(fù)雜內(nèi)存和速度不是問(wèn)題,軟件可靠性和開(kāi)發(fā)效率變得突出依靠系統(tǒng)化的開(kāi)發(fā)方法和工具程序開(kāi)發(fā)的周期Step1、需求分析:我們要解決什么問(wèn)題?分析的越仔細(xì)越好。Step2、制定程序規(guī)格:
程序要做什么?主要關(guān)注能完成什么,而非程序怎么運(yùn)行。例如,對(duì)于簡(jiǎn)單程序,我們只要描述輸入輸出,然后看他們是怎么關(guān)聯(lián)的即可。Step3、算法設(shè)計(jì):描述怎么做。闡明程序的整個(gè)框架結(jié)構(gòu)。考慮程序如何運(yùn)行,設(shè)計(jì)適合于上述規(guī)格的算法。一般用偽代碼給出總體結(jié)構(gòu),不糾纏細(xì)節(jié)。Step4、算法實(shí)現(xiàn):用某種程序設(shè)計(jì)語(yǔ)言編寫(xiě)代碼。Step5、測(cè)試與排錯(cuò):測(cè)試程序是否如預(yù)期,排除bug(debug)。Step6、維護(hù)程序:運(yùn)行中還會(huì)不斷有問(wèn)題,如持續(xù)開(kāi)發(fā)、程序的改進(jìn)等。什么是好的程序解決同一個(gè)問(wèn)題,可以設(shè)計(jì)出多種處理過(guò)程,即編制多種程序。即使各種程序都正確。仍然有好壞之分。除了正確性,好的程序應(yīng)該是:效率高易理解易維護(hù)可擴(kuò)展如何得到好的程序手工作坊階段靠的是個(gè)人編程技巧如今則要善于依靠程序設(shè)計(jì)方法和工具方法:結(jié)構(gòu)化方法,模塊化方法,面向?qū)ο蠓椒ǖ裙ぞ撸航9ぞ?,集成開(kāi)發(fā)環(huán)境等編程案例:求最大值(1)考慮求三個(gè)數(shù)x1,x2,x3的最大值的問(wèn)題策略1:每個(gè)數(shù)都與其他數(shù)比較大小ifx1>=x2andx1>=x3:max=x1elifx2>=x1andx2>=x3:max=x2else:max=x3此算法中各分支彼此獨(dú)立。但實(shí)際上一個(gè)分支的信息對(duì)其他分支是有用的!此算法不適合較大n的情況編程案例:求最大值(2)策略2:判定樹(shù)ifx1>=x2:
ifx1>=x3:max=x1else:max=x3else:ifx2>=x3:max=x2else:max=x3好處:只需兩次比較,效率高.壞處:結(jié)構(gòu)復(fù)雜,復(fù)雜度隨n爆炸式增長(zhǎng).編程案例:求最大值(3)策略3:順序處理,記錄當(dāng)前最大值。max=x1ifx2>=max:max=x
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度高新技術(shù)產(chǎn)業(yè)園區(qū)場(chǎng)地使用權(quán)轉(zhuǎn)讓合同3篇
- 2025年度頁(yè)巖磚綠色建筑材料采購(gòu)與供應(yīng)鏈管理合同4篇
- 二零二五年度成立體育產(chǎn)業(yè)公司出資合同標(biāo)準(zhǔn)4篇
- 2025合同模板建筑安裝工程拆遷房屋合同范本
- 2025合法的建筑工地工程合同樣書(shū)
- 二零二五年度成品油公路運(yùn)輸保險(xiǎn)理賠服務(wù)合同4篇
- 2025與模特?cái)z影合作合同
- 二零二五年度河道采砂工程承包施工合同3篇
- 2025買(mǎi)賣(mài)合同債務(wù)糾紛委托書(shū)
- 2025年度充電樁充電站用戶(hù)界面設(shè)計(jì)與優(yōu)化合同2篇
- 2024-2025學(xué)年北京石景山區(qū)九年級(jí)初三(上)期末語(yǔ)文試卷(含答案)
- 第一章 整式的乘除 單元測(cè)試(含答案) 2024-2025學(xué)年北師大版數(shù)學(xué)七年級(jí)下冊(cè)
- 春節(jié)聯(lián)歡晚會(huì)節(jié)目單課件模板
- 中國(guó)高血壓防治指南(2024年修訂版)
- 糖尿病眼病患者血糖管理
- 抖音音樂(lè)推廣代運(yùn)營(yíng)合同樣本
- 《春酒》琦君完整版
- 教育促進(jìn)會(huì)會(huì)長(zhǎng)總結(jié)發(fā)言稿
- 北師大版(2024新版)七年級(jí)上冊(cè)數(shù)學(xué)第四章《基本平面圖形》測(cè)試卷(含答案解析)
- 心理調(diào)適教案調(diào)整心態(tài)積極應(yīng)對(duì)挑戰(zhàn)
- 小學(xué)數(shù)學(xué)6年級(jí)應(yīng)用題100道附答案(完整版)
評(píng)論
0/150
提交評(píng)論