




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
4.1程序流程圖
4.2順序結(jié)構(gòu)
4.3條件表達(dá)式
4.4選擇結(jié)構(gòu)
4.5循環(huán)結(jié)構(gòu)
4.6程序的異常處理
4.7random庫
4.8精選案例第4章程序的控制結(jié)構(gòu)考綱考點
程序的三種控制結(jié)構(gòu)
程序的分支結(jié)構(gòu):
單分支結(jié)構(gòu)、二分支結(jié)構(gòu)、多分支結(jié)構(gòu)
程序的循環(huán)結(jié)構(gòu):
遍歷循環(huán)、無限循環(huán)、break和continue循環(huán)控制
程序的異常處理:try-except
random庫知識導(dǎo)圖4.1程序流程圖
程序由三種基本結(jié)構(gòu)構(gòu)成:順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。結(jié)構(gòu)化的程序設(shè)計往往會使用流程圖進(jìn)行描述。程序流程圖是用一系列圖形、流程線和文字說明描述程序的基本操作和控制流程。流程圖的基本元素下圖所示:??起止框是一個圓角矩形,表示程序的開始或結(jié)束,每個程序只能有一個開始和一個結(jié)束;判斷框是一個菱形框,用于判斷框內(nèi)條件是否成立,允許有一個入口,2個或2個以上出口,根據(jù)判斷的結(jié)果選擇不同的執(zhí)行路徑;處理框是一個矩形框,表示確定的處理和步驟,一個流程圖中可有多個處理框;輸入輸出框是一個平行四邊形,表示數(shù)據(jù)的輸入或經(jīng)過處理后結(jié)果的輸出,輸入可有0個或多個,輸出至少有1個;注釋框是用來增加對程序的說明解釋或標(biāo)注的;流向線是帶箭頭的直線或者曲線,用于指示程序的執(zhí)行路徑;連接點是一個圓形,可以將多個流程圖連接起來,常用于多個流程圖的拼接。4.2順序結(jié)構(gòu)??順序結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計中最基本最直接的一種結(jié)構(gòu),程序會依照其書寫順序從前到后依次執(zhí)行語句。順序結(jié)構(gòu)的流程圖如下圖所示,先按順序執(zhí)行完語句塊1,然后再按順序執(zhí)行語句塊2。其中,語句塊1和語句塊2可以表示一個或一組順序執(zhí)行的語句。??常見的順序結(jié)構(gòu)中通常會包含有賦值語句和輸入、輸出語句等。如第二章所提到的賦值號構(gòu)成賦值語句;input()和eval()函數(shù)構(gòu)成的輸入語句;還有用print()函數(shù)構(gòu)成的輸出語句。順序結(jié)構(gòu)是其他更復(fù)雜結(jié)構(gòu)(如選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu))的基礎(chǔ)。4.3條件表達(dá)式??python中的關(guān)系運算符如下表所示:4.3.1關(guān)系運算符操作符<
<=>
>===!=說明小于小于等于大于大于等于等于不等于??在python中使用關(guān)系運算符的一個重要前提是,操作數(shù)之間必須可比較大小。Python中字符串大小的比較是基于字符的Unicode編碼值,示例代碼如下:>>>7>8#比較數(shù)值大小False>>>"china"<"China"#比較字符串大小False>>>[5,6,7]<[5,6,8]#比較列表的大小True>>>{5,6,7}<{5,6,7,8}#集合的比較主要是測試包含關(guān)系True>>>"567">45#字符串和數(shù)字無可比性Traceback(mostrecentcalllast):File"<pyshell#10>",line1,in<module>"567">45TypeError:unorderabletypes:str()>int()??
python中的關(guān)系運算符可以連用,且其含義與日常含義一致。示例代碼如下:>>>2<3<4#等價于2<3且3<4True>>>3<5>2#等價于5>2且3<5True??關(guān)系表達(dá)式有惰性求值的特點,惰性求值是一種在需要時才計算值的策略,這種策略在處理大量數(shù)據(jù)時可以大大提高效率。示例代碼如下:>>>abc#abc沒有賦值Traceback(mostrecentcalllast):File"<pyshell#13>",line1,in<module>abcNameError:name'abc'isnotdefined>>>1>2>abc#惰性求值,只計算1>2就可得出結(jié)果,所以沒必要計算2>abcFalse??邏輯運算符not、and和or可以對條件進(jìn)行邏輯組合或運算,構(gòu)成更加復(fù)雜的條件表達(dá)式。其功能說明下表4.3.2邏輯運算符運算符說明舉例not邏輯非,對操作數(shù)的邏輯狀態(tài)取反。如果操作數(shù)為True,則結(jié)果為False;如果操作數(shù)為False,則結(jié)果為True。notTrue結(jié)果為Falseand邏輯與,當(dāng)兩側(cè)的操作數(shù)都為True時,結(jié)果為True;否則為False。TrueandFalse結(jié)果為Falseor邏輯或,當(dāng)兩側(cè)的操作數(shù)中至少有一個為True時,結(jié)果為True;否則為False。TrueorFalse結(jié)果為True??邏輯運算的一般的例子,示例代碼如下:>>>x=80>>>x<100andx>10True>>>x>100orx<10False>>>notx>100True??and和or的惰性求值,示例代碼如下:>>>12<3anda>10#此時a沒被定義,但關(guān)系表達(dá)式卻可以得到結(jié)果False>>>12<3ora>10#12<3為False,需要計算a>10,但a沒被定義,出錯Traceback(mostrecentcalllast):File"<pyshell#21>",line1,in<module>12<3ora>10NameError:name'a'isnotdefined??在python中邏輯運算符兩側(cè)操作數(shù)還可以是數(shù)值表達(dá)式。對and和or而言,其最終運算后的結(jié)果是最后一個被計算的表達(dá)式的值。對not而言,其結(jié)果依然是True或False,True對應(yīng)非零值,F(xiàn)alse對應(yīng)零。示例代碼如右:>>>x=5>>>7andx+1#7非0為True,需要計算x+1才能確定值,結(jié)果為66>>>7orx+1#7非0為True,不需要計算x+1,結(jié)果為77>>>0and7#0為False,不需要計算后面的7,結(jié)果為00>>>0or7#0為False,需要計算后面的7,結(jié)果為77>>>not5#5非0為True,notTrue,結(jié)果為FalseFalse>>>not0#0為False,notFalse,結(jié)果為TrueTrue??用于測試一個對象是否為另一個對象的元素。示例代碼如下:4.3.3成員測試運算符in>>>3in[4,3,7]#測試3是否在列表[4,3,7]中True>>>5inrange(1,10,1)#range()函數(shù)用來生成指定范圍數(shù)字True>>>'abc'in'abcdefg'#子字符串測試True>>>foriin(3,5,7):#循環(huán),成員遍歷
print(i,end='\t')3 5 7 ??Python中位運算符只能用于整數(shù),直接操作整數(shù)的二進(jìn)制位。在執(zhí)行位運算時應(yīng)當(dāng)首先將整數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),然后再使用位運算操作。4.3.3位運算符1.&(按位與):對兩個整數(shù)的每一位執(zhí)行與操作,如果兩個相應(yīng)的二進(jìn)制位都為1,則結(jié)果為1,否則為0。這通常用于屏蔽掉某些位或檢查特定位的狀態(tài)。2.|(按位或):對兩個整數(shù)的每一位執(zhí)行或操作,如果兩個相應(yīng)的二進(jìn)制位至少有一個為1,則結(jié)果為1,否則為0。這常用于設(shè)置特定位的狀態(tài),而不改變其他位。3.^(按位異或):對兩個整數(shù)的每一位執(zhí)行異或操作,如果兩個相應(yīng)的二進(jìn)制位有一個為1且另一個為0,則結(jié)果為1,否則為0。異或運算常用于加密、錯誤檢測和數(shù)據(jù)交換等場景。??4.~(按位取反):對一個整數(shù)的每一位執(zhí)行非操作,將1變?yōu)?,0變?yōu)?。這是一個單目運算符,通常用于生成補(bǔ)碼或翻轉(zhuǎn)所有位的狀態(tài)5.<<(左移):左移將整數(shù)的所有位向左移動指定的位數(shù),符號位保持不變,低位用0填充,相當(dāng)于乘以2的指定次方6.>>(右移):右移將整數(shù)的所有位向右移動指定的位數(shù),對于Python中的有符號整數(shù),高位通常保持符號位不變(算術(shù)右移),低位丟棄,相當(dāng)于除以2的指定次方(向下取整)。??示例代碼如下:>>>5<<2#把二進(jìn)制數(shù)101左移2位,則為二進(jìn)制數(shù)1010020>>>5>>2#把二進(jìn)制數(shù)101右移2位取整,則為二進(jìn)制數(shù)11>>>3&7#位與運算3>>>3|8#位或運算11>>>3^5#位異或運算6>>>~5#把二進(jìn)制數(shù)00000101按位取反,則為二進(jìn)制數(shù)11111010-6??用來測試兩個對象是否同一個,如果是則返回True,否則返回False;如果是同一個,兩者具有相同的內(nèi)存地址。示例代碼如下:4.3.5同一性測試運算符is>>>x=[300,300,300]>>>x[0]isx[1]#同一個值在內(nèi)存中只有一份True>>>x=[1,2,3]>>>y=[1,2,3]>>>xisy#x和y不是同一個列表對象False>>>x[0]isy[0]True>>>x=y>>>xisy#x和y指向同一個列表對象True??運算符優(yōu)先級順序由高到低總結(jié),如表所示4.3.6運算優(yōu)先級運算符說明(優(yōu)先級由高到低)**指數(shù)(最高優(yōu)先級)~按位翻轉(zhuǎn)*/%//乘、除、取模、整除+-加、減>><<右移、左移&位與^|位異或、位或<=<>>=比較運算==!=等于
不等于=%=/=//=-=+=*=**=賦值類操作符isisnot同一性運算符innotin成員運算符notorand邏輯運算符??實際使用中可記住以下簡單規(guī)則:1.乘除優(yōu)先加減2.位運算和算術(shù)運算>比較運算>賦值運算條件表達(dá)式有一些特殊用法,Python語言中條件表達(dá)式的值只要不是False、0(或0.0,0j等)、空值None、空列表、空元組、空集合、空字典、空字符串、空range()對象或其他空迭代對象,均被認(rèn)為True.也就是所有合法的Python表達(dá)式都可以作為條件表達(dá)式,包括含有函數(shù)調(diào)用的表達(dá)式。4.4選擇結(jié)構(gòu)??在實際的編程過程中,常常需要解決這樣一類問題,要求根據(jù)某些條件的邏輯結(jié)果來決定要執(zhí)行的程序語句。這種根據(jù)條件判斷選擇不同執(zhí)行語句的運行方式就是選擇結(jié)構(gòu),也稱為分支結(jié)構(gòu)。在PYTHON中實現(xiàn)分支結(jié)構(gòu)的語句是if語句,而根據(jù)分支結(jié)構(gòu)所實現(xiàn)的分支數(shù)的不同,可分為單分支結(jié)構(gòu)、雙分支結(jié)構(gòu)和多分支結(jié)構(gòu)。??單分支選擇結(jié)構(gòu)其語法格式如下所示。其中表達(dá)式后面的冒號“:”是不可或缺的,它表示一個語句塊的開始,縮進(jìn)表達(dá)<語句塊>與if的包含關(guān)系,一般是四個空格為縮進(jìn)單位。4.4.1單分支選擇結(jié)構(gòu)if<條件表達(dá)式>:<語句塊>執(zhí)行過程:當(dāng)if后面表達(dá)式值為True或者為與True等價的值時,則執(zhí)行語句塊中的語句序列,然后程序接著執(zhí)行if語句結(jié)束后的下一條語句。當(dāng)結(jié)果為False或者為與False等價的值時,則語句塊中的語句會被跳過去,直接執(zhí)行if語句結(jié)束后的下一條語句.其流程圖如右所示:??例4-1判斷輸入的字符串是否為回文字符串?;匚淖址侵刚蜃x和反向讀都一樣的字符串,例如,12321、madam、level等。以下用單分支結(jié)構(gòu)實現(xiàn),代碼如下:#判斷輸入的字符串是否為回文字符串str=input("請輸入一個字符串或數(shù)值:")ifstr==str[::-1]:print("這是一個回文字符串.")問題:在實際執(zhí)行中,以上程序當(dāng)條件為假時,沒有給用戶任何信息?如何解決???Python中的雙分支結(jié)構(gòu)if-else語句是Python中最基本的控制流語句之一,二分支結(jié)構(gòu)的特點是它根據(jù)條件的結(jié)果來執(zhí)行不同的代碼塊。語法格式如下:4.4.2雙分支選擇結(jié)構(gòu)if<條件表達(dá)式>:<語句塊1>else:<語句塊2>執(zhí)行過程:當(dāng)if后面表達(dá)式值為True或者為與True等價的值時,則執(zhí)行語句塊1中的語句序列;當(dāng)結(jié)果為False或者為與False等價的值時,則執(zhí)行語句塊2中的語句序列。簡單說,二分支結(jié)構(gòu)根據(jù)條件的True或False結(jié)果產(chǎn)生兩條路徑。其流程圖如右所示。??例4-2用雙分支結(jié)構(gòu)完成判斷輸入的字符串是否為回文字符串,會使程序更完整。代碼如下:#判斷輸入的字符串是否為回文字符串str=input("請輸入一個字符串或數(shù)值:")ifstr==str[::-1]:print("這是一個回文字符串.")else:print("這不是一個回文字符串.")其運行結(jié)果如下:請輸入一個字符串或數(shù)值:12321這是一個回文字符串.請輸入一個字符串或數(shù)值:12345這不是一個回文字符串.??雙分支結(jié)構(gòu)還有一種更簡潔的表達(dá)方式,是用一個三元運算符構(gòu)成,其表達(dá)式中還可能嵌套三元運算符,實現(xiàn)與分支結(jié)構(gòu)相似的效果。其語法格式如下:<表達(dá)式1>if<條件>else<表達(dá)式2>當(dāng)條件中的值為True或者為與True等價的值時,則整個三元表達(dá)式的值為表達(dá)式1的值,否則為表達(dá)式2的值。示例代碼如下:>>>x=5>>>print("yes")ifx>2elseprint("no")yes>>>print("yes"ifx>2else"no")#與上一條代碼含義是不同的yes>>>y=7ifx>10else8#觀察一下賦值的優(yōu)先級>>>y8說明:此結(jié)構(gòu)是一種表達(dá)式,不是語句??if-elif-else描述python的多分支選擇結(jié)構(gòu),語句格式如下:4.4.3多分支選擇結(jié)構(gòu)if<條件表達(dá)式1>:<語句塊1>elif<條件表達(dá)式2>:<語句塊2>…elif<條件表達(dá)式n>:<語句塊n>else:<語句塊n+1>??執(zhí)行過程:當(dāng)if后面條件表達(dá)式1值為True或者為與True等價的值時,則執(zhí)行語句塊1中的語句序列;否則計算條件表達(dá)式2的值,若其值為True,則執(zhí)行語句塊2中的語句序列;依次類推,若所有條件表達(dá)式的值都為False,則執(zhí)行else后面的語句塊n+1。其流程圖如下圖所示:??例4-3根據(jù)月份判斷所在季節(jié)。程序分析:首先需要明確季節(jié)的劃分標(biāo)準(zhǔn)。一般來說,北半球的季節(jié)劃分如下:春季:3月、4月、5月夏季:6月、7月、8月秋季:9月、10月、11月冬季:12月、1月、2月另外,我們還需要做一個用戶輸入的月份是否合法的驗證,即如果輸入了1-12之外的數(shù)據(jù),則數(shù)據(jù)輸入是不合法的。由以上分析可知,我們需要一個5分支結(jié)構(gòu)語句。??代碼如下:month=int(input("請輸入月份(1-12):"))ifmonth<1ormonth>12:print("月份輸入不合法")elif3<=month<=5:print("春季")elif6<=month<=8:print("夏季")elif9<=month<=11:print("秋季")else:print("冬季")??例4-4設(shè)計一個問答式計算器。程序分析:程序功能是接收用戶輸入的兩個數(shù)字(num1和num2)和一個運算符(+、-、*、/之一,并將其存儲到字符串變量operator中),然后根據(jù)運算符執(zhí)行相應(yīng)的數(shù)學(xué)運算,并輸出結(jié)果。程序的核心在于其分支結(jié)構(gòu),根據(jù)運算符的不同,設(shè)計不同的分支。在處理除法運算時,需要關(guān)注除數(shù)是否為0,當(dāng)除數(shù)為0時會導(dǎo)致運算錯誤或程序崩潰。因此在除的分支中使用了一個嵌套的if-else結(jié)構(gòu),使用exit()函數(shù)來在出現(xiàn)錯誤時立即終止程序,以免程序非正常中止。另外,程序設(shè)計還需要考慮如果輸入的運算符不是+、-、*、/中的任何一個,則打印一條錯誤消息并退出程序,表示不支持該運算符。??代碼如下:num1=float(input("請輸入第一個數(shù)字:"))num2=float(input("請輸入第二個數(shù)字:"))operator=input("請輸入運算符(+、-、*、/):")ifoperator=="+":result=num1+num2elifoperator=="-":result=num1-num2elifoperator=="*":result=num1*num2elifoperator=="/":ifnum2!=0:result=num1/num2else:print("除數(shù)不能為0")exit()else:print("不支持的運算符")exit()說明:exit()是Python中的一個內(nèi)置函數(shù),用于立即終止當(dāng)前進(jìn)程的執(zhí)行。當(dāng)exit()被調(diào)用時,Python解釋器會停止執(zhí)行當(dāng)前的程序,并退出4.5循環(huán)結(jié)構(gòu)??循環(huán)結(jié)構(gòu)是用來重復(fù)執(zhí)行一段代碼的機(jī)制,Python提供了兩種主要的循環(huán)結(jié)構(gòu):遍歷循環(huán)和無限循環(huán)。遍歷循環(huán)使用保留字for依次提取遍歷結(jié)構(gòu)各元素進(jìn)行處理,一般用于循環(huán)次數(shù)可以提前確定的情況,特別適用于枚舉、遍歷序列或迭代對象中元素的場合。無限循環(huán)使用保留字while根據(jù)判斷條件執(zhí)行程序,一般用于循環(huán)次數(shù)難以提前確定的情況下,當(dāng)然循環(huán)次數(shù)可以確定的情況下也可以用。??循環(huán)結(jié)構(gòu)的流程圖如下圖所示:??循環(huán)是先從遍歷結(jié)構(gòu)中提取元素,放在循環(huán)變量中,然后執(zhí)行語句塊內(nèi)容,反復(fù)執(zhí)行以上操作,直到遍歷結(jié)構(gòu)中元素全部取完了為止,for語句的循環(huán)執(zhí)行次數(shù)是根據(jù)遍歷結(jié)構(gòu)中元素個數(shù)確定的。4.5.1for循環(huán)??語句格式如下:for循環(huán)的通常結(jié)構(gòu)for<循環(huán)變量>in<遍歷結(jié)構(gòu)>:<語句塊>說明:
遍歷結(jié)構(gòu)可以是字符串、文件、range()函數(shù)或組合數(shù)據(jù)類型等。??(1)遍歷結(jié)構(gòu)為字符串。示例代碼如下:>>>foriin"China": print(i)其運行結(jié)果為 China??(2)遍歷結(jié)構(gòu)為range()函數(shù),range()函數(shù)格式如下:
range(start,stop[,step])說明:start:序列的起始值,默認(rèn)為0(可選參數(shù))。stop:序列的結(jié)束值,但不包括該值(必選參數(shù))。step:序列中每個數(shù)字之間的差,即步長,默認(rèn)為1(可選參數(shù))。當(dāng)只有一個參數(shù)時,range(stop)將生成從0到stop-1的整數(shù)序列。如果有兩個參數(shù),range(start,stop)將生成從start到stop-1的整數(shù)序列。如果有三個參數(shù),range(start,stop,step)將生成從start開始,以step為步長,直到但不包括stop的整數(shù)序列。??例4-5計算1-100的累加和。程序分析:要計算從1到100的累加和。加法是從1加到100,加法操作是一個反復(fù)執(zhí)行的過程,而反復(fù)執(zhí)行就是循環(huán)。為了實現(xiàn)這個目標(biāo),使用for循環(huán)和range()函數(shù)。首先,初始化一個變量s為0,用于存儲累加和。然后,使用for循環(huán)來遍歷從1到100的整數(shù)序列??梢允褂胷ange()函數(shù)來生成這個整數(shù)序列。range(1,101)表示生成一個從1開始(包括1),到101結(jié)束(不包括101)的整數(shù)序列。因此,這個序列包含了從1到100的整數(shù)。在每次循環(huán)中,將循環(huán)變量i的值加到s上,實現(xiàn)累加的效果。循環(huán)結(jié)束后,s的值就是從1到100的累加和。最后,使用print()函數(shù)來輸出計算結(jié)果。??代碼如下:s=0foriinrange(1,101):s=s+iprint("從1加到100的和為{}".format(s))??(3)遍歷結(jié)構(gòu)為列表例4-6連接列表words=['我','喜歡','Python']中的字符串。程序分析:輸入題目已經(jīng)給出,即為words=['我','喜歡','Python'],要求輸出列表中所有字符串連接成的單一字符串。字符串連接可使用“+”進(jìn)行,因為是反復(fù)操作,所以使用for循環(huán)來遍歷列表中的每個元素,在循環(huán)體內(nèi),使用字符串連接操作“+”將當(dāng)前字符串添加到結(jié)果字符串中。??代碼如下:
words=['我','喜歡','Python']sentence=''forwordinwords:sentence+=wordprint("連接后的字符串:",sentence)??語句格式如下:for循環(huán)的擴(kuò)展結(jié)構(gòu)for<循環(huán)變量>in<遍歷結(jié)構(gòu)>:<語句塊1>else:<語句塊2>執(zhí)行過程:當(dāng)for循環(huán)正常執(zhí)行之后,程序才會繼續(xù)執(zhí)行else語句中內(nèi)容,即else語句只在循環(huán)正常執(zhí)行之后才執(zhí)行。由于循環(huán)的非正常結(jié)束,往往是因為執(zhí)行了break語句而造成的,在遍歷循環(huán)的擴(kuò)展模式中,這種情況是不會執(zhí)行else中的語句的,所以,我們常常使用這種結(jié)構(gòu)跟蹤循環(huán)是否已經(jīng)通過break跳出了循環(huán)。??例4-7找水果。代碼如下:fruits=["apple","banana","cherry"]x=input("Pleaseenterafruitword:")forfruitinfruits:iffruit==x:print("Found"+x+"!")breakelse:print("Didnotfind"+x+".")第一次運行結(jié)果如下:Pleaseenterafruitword:peachDidnotfindpeach.在這次運行中,我們要找水果peach,但是peach不在水果列表中,因此if語句條件不滿足,break不會執(zhí)行,循環(huán)正常結(jié)束,則執(zhí)行else后面的print()語句第二次運行結(jié)果如下:Pleaseenterafruitword:cherryFoundcherry!在本次運行中,我們要找的水果cherry在列表中,因此if語句條件滿足,則執(zhí)行了break,循環(huán)中斷,則else不被執(zhí)行。??while是python中保留的可以用來實現(xiàn)條件循環(huán)的語句.首先對條件進(jìn)行判斷,如果滿足條件則執(zhí)行語句塊,反復(fù)執(zhí)行以上操作,直到條件不滿足,從循環(huán)中退出,執(zhí)行與while同級別縮進(jìn)的后續(xù)語句。4.5.2while循環(huán)??語句格式如下:while循環(huán)的通常結(jié)構(gòu)while<條件>:<語句塊>說明:while語句是先判斷條件再確定是否循環(huán),所以其最少執(zhí)行次數(shù)可以是0次;在語句塊中,應(yīng)當(dāng)有使循環(huán)能夠中止的語句或者令循環(huán)條件能夠不滿足的語句,否則會造成死循環(huán),也就是無限循環(huán)。??例4-8計算n!。代碼如下:n=int(input("請輸入一個正整數(shù)n:"))factorial=1i=1whilei<=n:factorial*=ii+=1print(n,"的階乘為:",factorial)??語句格式如下:while循環(huán)的擴(kuò)展結(jié)構(gòu)while<條件>:<語句塊1>else:<語句塊2>執(zhí)行過程:當(dāng)while循環(huán)正常執(zhí)行之后,程序會繼續(xù)執(zhí)行else語句中內(nèi)容??理解循環(huán)需求:在開始編寫循環(huán)代碼之前,首先要清楚地理解問題的需求,確定循環(huán)的次數(shù)、循環(huán)的條件以及每次循環(huán)中需要執(zhí)行的操作。選擇合適的循環(huán)結(jié)構(gòu):根據(jù)問題的特點,選擇合適的循環(huán)結(jié)構(gòu),如for循環(huán)(適用于已知循環(huán)次數(shù)的情況)或while循環(huán)(適用于循環(huán)次數(shù)不確定,但循環(huán)條件明確的情況)。初始化循環(huán)變量:循環(huán)開始前,需要初始化循環(huán)變量,這些變量通常用于控制循環(huán)的次數(shù)或作為循環(huán)條件的判斷依據(jù)。循環(huán)結(jié)構(gòu)編程思路總結(jié)??設(shè)置循環(huán)條件:循環(huán)條件是決定循環(huán)是否繼續(xù)執(zhí)行的關(guān)鍵因素。條件設(shè)置不當(dāng)可能導(dǎo)致循環(huán)無法終止(無限循環(huán))或提前終止(未達(dá)到預(yù)期效果)。更新循環(huán)變量:在每次循環(huán)迭代結(jié)束后,需要更新循環(huán)變量的值,以確保循環(huán)能夠正確進(jìn)行下一次迭代或最終終止。??注意循環(huán)體內(nèi)的操作:循環(huán)體內(nèi)的操作應(yīng)該清晰、簡潔且高效。避免在循環(huán)體內(nèi)進(jìn)行不必要的計算或執(zhí)行與循環(huán)目的無關(guān)的操作。考慮循環(huán)的退出條件:在設(shè)計循環(huán)時,應(yīng)始終考慮循環(huán)的退出條件,確保循環(huán)能夠在滿足條件時正確退出,避免程序陷入死循環(huán)。??break和continue是循環(huán)結(jié)構(gòu)中兩個輔助循環(huán)控制的保留字。它們允許在循環(huán)過程中根據(jù)特定條件來中斷或跳過循環(huán),從而更靈活地控制循環(huán)的執(zhí)行流程。4.5.3break和continue??用于提前終止當(dāng)前循環(huán),并立即退出該循環(huán)結(jié)構(gòu)。當(dāng)遇到break時,程序?qū)⑻霭淖顑?nèi)層循環(huán),并繼續(xù)執(zhí)行緊跟在該循環(huán)之后的語句。如果有二層或多層循環(huán),則break退出最內(nèi)層循環(huán)。break語句foriinrange(1,11):ifi==5:print("遇到5,使用break中斷循環(huán)")breakprint(i)其運行結(jié)果為:1234遇到5,使用break中斷循環(huán)??用來結(jié)束當(dāng)前當(dāng)次循環(huán),即提前結(jié)束本輪循環(huán),接著執(zhí)行下一輪循環(huán)。將上面的代碼中的break語句用continue語句代替,示例代碼如下:continue語句foriinrange(1,11):ifi==5:print("遇到5,使用continue中斷循環(huán)")continueprint(i)其運行結(jié)果為:1234遇到5,使用continue中斷循環(huán)6789104.6程序的異常處理??異常是在程序執(zhí)行過程中發(fā)生的運行錯誤,例如,訪問不存在的變量或索引超出范圍等。異常會導(dǎo)致序的突然中止和崩潰,譬如我們常遇到的死機(jī),也是程序異常的一種。如果我們能夠預(yù)測并處理這些異常,能夠做到即使出現(xiàn)異常,程序也能穩(wěn)定順利的繼續(xù)執(zhí)行下去,就大大提高了程序的健壯性和可靠性??Python提供了一個強(qiáng)大的異常處理機(jī)制,允許我們捕獲和處理異常,以確保程序的穩(wěn)定性和可靠性。異常處理的基本結(jié)構(gòu)是使用try和except語句塊,基本的語法格式如下:try:<語句塊1>except:<語句塊2>執(zhí)行過程:語句塊1是正常執(zhí)行的程序內(nèi)容,當(dāng)執(zhí)行這個語句塊發(fā)生異常時,則執(zhí)行except保留字后面的語句塊2,以保證程序像洪水一樣,一條分支堵塞了,但還是可以從另一條分支正常退出。??例4-9:編寫一個程序,用戶連續(xù)輸入數(shù)字進(jìn)行除法運算,直到用戶決定停止。如果用戶輸入0作為除數(shù),程序應(yīng)該捕獲這個異常,并打印出"除數(shù)不能為零!"的提示信息。如果用戶輸入的不是數(shù)字,程序也應(yīng)該捕獲這個異常,并打印出"請輸入有效的數(shù)字!"的提示信息。當(dāng)用戶輸入"q"或者"quit"時,程序應(yīng)該退出循環(huán)并結(jié)束。??程序分析:
這個題目有非常明確的需求描述,因此就不再做進(jìn)一步的需求分析,我們可以從數(shù)據(jù)處理入手。輸入:用戶的輸入,可能是一個數(shù)字、也可能是非數(shù)字字符,或者"q"或"quit"。處理:進(jìn)行除法運算、異常處理、輸入驗證和循環(huán)控制。輸出:除法結(jié)果或錯誤提示信息。算法選擇方面,由于循環(huán)次數(shù)是由用戶輸入決定的,使用whileTrue循環(huán)來允許用戶連續(xù)進(jìn)行除法運算。在循環(huán)內(nèi)使用try-except結(jié)構(gòu)來捕獲可能出現(xiàn)的異常,如零除錯誤或輸入不是數(shù)字的情況。當(dāng)用戶輸入"q"或"quit"時,使用break語句來退出循環(huán)。??whileTrue:try:num1=input("請輸入第一個數(shù)字(或輸入'q'或'quit'退出):")ifnum1.lower()in['q','quit']:print("程序已退出。")breaknum2=float(input("請輸入第二個數(shù)字:"))result=float(num1)/num2print("結(jié)果為:",result)exceptZeroDivisionError:print("除數(shù)不能為零!")exceptValueError:print("請輸入有效的數(shù)字!")4.7random庫在日常生活中,隨機(jī)數(shù)生成的需求是非常常見的。Python的random庫為我們提供了多種生成隨機(jī)數(shù)的方法。對于初學(xué)者來說,掌握這個庫是非常有必要的。random庫是Python的標(biāo)準(zhǔn)庫之一,用于生成偽隨機(jī)數(shù)。為什么說是偽隨機(jī)數(shù)呢?因為計算機(jī)生成的數(shù)實際上是可預(yù)測的,只不過看起來像是隨機(jī)的。??函數(shù)函數(shù)格式描述randomrandom.random()生成一個[0.0,1.0)之間的隨機(jī)浮點數(shù)。randintrandom.randint(a,b)生成一個[a,b]之間的隨機(jī)整數(shù)。choicerandom.choice(sequence)從給定的序列中隨機(jī)選擇一個元素。shufflerandom.shuffle(sequence)將序列的元素隨機(jī)排列,原地修改序列。randrangerandom.randrange(start,stop[,step])返回一個在range(start,stop,step)內(nèi)的隨機(jī)整數(shù)。samplerandom.sample(population,k)返回從序列或集合中選擇的k個不重復(fù)的元素組成的列表。用于隨機(jī)抽樣。uniformrandom.uniform(a,b)返回一個在[a,b]范圍內(nèi)的隨機(jī)浮點數(shù)。seedrandom.seed([x])改變隨機(jī)數(shù)生成器的種子??捎糜趯嶒灥目芍貜?fù)性。getrandbitsrandom.getrandbits(k)生成一個k比特長的隨機(jī)整數(shù)。random庫的常用函數(shù)??random()函數(shù)生成的隨機(jī)數(shù)具有均勻分布的特性,也就是說,在[0.0,1.0)這個區(qū)間內(nèi)的任何一個子區(qū)間內(nèi),隨機(jī)數(shù)出現(xiàn)的概率都是相等的。示例代碼如下:>>>importrandom>>>random.random()0.0477604166455704>>>random.random()0.5385641354279169>>>random.random()0.7650205055372885??
randint()函數(shù)在需要隨機(jī)選擇一定范圍內(nèi)的整數(shù)時非常有用,示例代碼如下:>>>random.randint(1,3)2>>>random.randint(1,3)3>>>random.randint(1,3)3>>>random.randint(1,3)1說明:產(chǎn)生1,2,3中包括1和3的隨機(jī)數(shù),隨機(jī)數(shù)的意思是當(dāng)輸入“random.randint(1,3)”按下回車鍵后,是無法預(yù)測會出現(xiàn)什么結(jié)果,只能預(yù)估結(jié)果是1,2,3中的任意一個數(shù)。??choice(sequence)函數(shù)中,sequence參數(shù)是一個序列類型的數(shù)據(jù)。示例代碼如下:>>>fruits=['蘋果','香蕉','橙子','葡萄','西瓜']>>>random.choice(fruits)'西瓜'>>>random.choice(fruits)'香蕉'>>>random.choice(fruits)'西瓜'說明:choice(fruits)從列表fruits中隨機(jī)選擇一個元素輸出。這個函數(shù)非常適合用于需要隨機(jī)選擇元素的場景,比如抽獎、隨機(jī)推薦等??shuffle(sequence)函數(shù),也就是洗牌。示例代碼如下:>>>fruits=['蘋果','香蕉','橙子','葡萄','西瓜']>>>random.shuffle(fruits)>>>fruits['蘋果','橙子','葡萄','香蕉','西瓜']>>>random.shuffle(fruits)>>>fruits['橙子','蘋果','葡萄','西瓜','香蕉']說明:這種隨機(jī)排序非常像我們平時玩牌時的洗牌操作。shuffle()函數(shù)會直接修改傳入的序列,而不是返回一個新的序列,所以在該函數(shù)調(diào)用之后,傳入的序列本身的元素順序會被改變。??
randrange(start,stop[,step])函數(shù)的參數(shù)與Python內(nèi)置的range()函數(shù)非常相似,包括一個起始值(start)、一個結(jié)束值(stop)以及一個可選的步長(step)。函數(shù)會返回在[start,stop)范圍內(nèi)的一個隨機(jī)整數(shù),也就是說,start是包括在內(nèi)的,但是stop是不包括的。如果指定了步長參數(shù),那么返回的隨機(jī)數(shù)減去起始值后,將是步長的整數(shù)倍,并且在指定的范圍內(nèi)。??示例代碼如下:>>>random.randrange(1,8,3)4>>>random.randrange(1,8,3)1>>>random.randrange(1,8,3)7>>>random.randrange(1,8,3)4說明:從1到8步長為3的整數(shù)有1,4,7,所以random.randrange(1,8,3)其實就是產(chǎn)生1,4,7中的任意一個數(shù)。與random.randint()函數(shù)相比,random.randrange()函數(shù)更加靈活,因為它允許指定步長。這使得我們可以更加方便地生成一些具有特定規(guī)律的隨機(jī)數(shù)序列。例如,我們可以使用random.randrange(0,10,2)來生成0到9之間的隨機(jī)偶數(shù)。??sample(population,k)的參數(shù)有兩個:總體(population)和樣本大小(k)??傮w可以是一個序列(如列表、元組、字符串等),也可以是一個集合或字典。樣本大小k是一個正整數(shù),表示要從總體中選擇的元素個數(shù)。函數(shù)會返回一個包含k個元素的列表,這些元素是從總體中隨機(jī)選擇的,而且不會重復(fù)。如果總體的元素個數(shù)小于k,那么函數(shù)會拋出一個ValueError異常。??示例代碼如下:>>>fruits=['蘋果','香蕉','橙子','葡萄','西瓜']>>>random.sample(fruits,4)['橙子','西瓜','蘋果','香蕉']>>>random.sample(fruits,4)['葡萄','蘋果','香蕉','西瓜']>>>random.sample(fruits,4)['葡萄','香蕉','蘋果','橙子']說明:sample()函數(shù)在需要從總體中隨機(jī)選擇一部分不重復(fù)元素時非常有用。比如,在機(jī)器學(xué)習(xí)中,我們經(jīng)常需要從數(shù)據(jù)集中隨機(jī)選擇一部分樣本進(jìn)行訓(xùn)練或測試,這時就可以使用random.sample()函數(shù)來實現(xiàn)。??uniform(a,b)函數(shù)的參數(shù)a和b分別表示隨機(jī)浮點數(shù)的下限和上限,函數(shù)會返回[a,b)范圍內(nèi)的一個隨機(jī)浮點數(shù),也就是說,下限a是包括在內(nèi)的,但是上限b是不包括的。>>>random.uniform(2,8)2.9651717456012774>>>random.uniform(2,8)7.305198549349988>>>random.uniform(2,8)3.5016755851835706說明:uniform()函數(shù)在需要生成指定范圍內(nèi)的隨機(jī)浮點數(shù)時非常有用。比如,在模擬程序、游戲、數(shù)值計算等領(lǐng)域中,我們經(jīng)常需要生成一些具有特定分布的隨機(jī)數(shù),這時就可以使用uniform()函數(shù)來實現(xiàn)。??seed([x])函數(shù),參數(shù)x被稱為隨機(jī)數(shù)的種子,如果每次生成隨機(jī)數(shù)之前都設(shè)定相同的種子,那么每次生成的隨機(jī)數(shù)序列也將是相同的,這樣就可以保證在相同條件下,隨機(jī)數(shù)生成的結(jié)果是可復(fù)現(xiàn)的。如果不設(shè)置種子值(即直接調(diào)用random.seed()),那么系統(tǒng)會默認(rèn)使用當(dāng)前的系統(tǒng)時間作為種子。seed()函數(shù)只是設(shè)置了隨機(jī)數(shù)生成器的種子,并不會直接生成隨機(jī)數(shù)。如果需要生成隨機(jī)數(shù),還需要調(diào)用其他隨機(jī)數(shù)生成函數(shù),比如random()、randint()、choice()等。??示例代碼如下:>>>from?random?import?*>>>seed(10)>>>random()0.5714025946899135>>>random()0.4288890546751146>>>seed(10)???#再次設(shè)置相同的種子,則后續(xù)產(chǎn)生的隨機(jī)數(shù)相同>>>random()0.5714025946899135>>>random()0.4288890546751146說明:seed()函數(shù)是一個非常有用的函數(shù),可以幫助我們控制Python程序中生成的隨機(jī)數(shù)序列,從而提高程序的重復(fù)性和可預(yù)測性。??
getrandbits(k)函數(shù)返回一個介于0和2k(包含0,但不包含2k)之間的隨機(jī)整數(shù),每個值都以相等的概率產(chǎn)生。>>>random.getrandbits(3)3>>>random.getrandbits(3)2>>>random.getrandbits(3)1>>>random.getrandbits(3)6>>>random.getrandbits(3)7說明:getrandbits(3)可能返回0、1、2、3、4、5、6或7,每個數(shù)字的概率都是1/8。這個函數(shù)在需要生成指定長度的隨機(jī)二進(jìn)制數(shù)字(或者說比特串)時非常有用。4.8精選案例??例4-10猜拳游戲設(shè)計。在這個經(jīng)典
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《營銷策略揭秘》課件
- 先鋒組織六項紀(jì)律剖析報告
- 《世博盛宴:上海世博會主題深度解讀》課件
- 5《我的家在這里》第一課時教學(xué)設(shè)計-2023-2024學(xué)年道德與法治三年級下冊統(tǒng)編版
- 2025年黔西南道路貨運輸從業(yè)資格證模擬考試題庫
- 荊門職業(yè)學(xué)院《海洋數(shù)學(xué)物理方程》2023-2024學(xué)年第一學(xué)期期末試卷
- 武漢城市學(xué)院《中國古典文學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年呼和浩特貨運從業(yè)資格證模擬考試題庫及答案大全
- 昆明冶金高等??茖W(xué)?!段幕溲凶x(Ⅱ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川省德陽市綿竹市2024-2025學(xué)年數(shù)學(xué)五下期末學(xué)業(yè)水平測試模擬試題含答案
- 統(tǒng)信服務(wù)器UOS操作系統(tǒng)-產(chǎn)品白皮書
- 糧庫火災(zāi)的防控措施與技術(shù)
- 5G-Advanced通感融合仿真評估方法研究報告
- DB33 860-2012 危險化學(xué)品重大危險源安全監(jiān)控管理規(guī)范
- 隱蔽工程影像資料采集要求和拍攝方法(網(wǎng)絡(luò)版)
- DB37T 1913-2011 金屬非金屬地下礦山特種作業(yè)人員配置
- 2025年日歷(日程安排-可直接打印)
- 大單元教學(xué)學(xué)歷案4 《現(xiàn)代詩二首》(略讀實踐課) 統(tǒng)編版語文四年級上冊
- 3.1 農(nóng)業(yè)區(qū)位因素及其變化-看《種地吧》思考 課件 高一下學(xué)期 地理 人教版(2019)必修二
- 《保護(hù)板培訓(xùn)教材》課件
- 綠色醫(yī)療器械設(shè)計
評論
0/150
提交評論