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