![《Python語言基礎(chǔ)及應(yīng)用》 課件 第4章 結(jié)構(gòu)體_第1頁](http://file4.renrendoc.com/view4/M01/3F/1B/wKhkGGYNCYGAdKSNAAFafTxh1pU106.jpg)
![《Python語言基礎(chǔ)及應(yīng)用》 課件 第4章 結(jié)構(gòu)體_第2頁](http://file4.renrendoc.com/view4/M01/3F/1B/wKhkGGYNCYGAdKSNAAFafTxh1pU1062.jpg)
![《Python語言基礎(chǔ)及應(yīng)用》 課件 第4章 結(jié)構(gòu)體_第3頁](http://file4.renrendoc.com/view4/M01/3F/1B/wKhkGGYNCYGAdKSNAAFafTxh1pU1063.jpg)
![《Python語言基礎(chǔ)及應(yīng)用》 課件 第4章 結(jié)構(gòu)體_第4頁](http://file4.renrendoc.com/view4/M01/3F/1B/wKhkGGYNCYGAdKSNAAFafTxh1pU1064.jpg)
![《Python語言基礎(chǔ)及應(yīng)用》 課件 第4章 結(jié)構(gòu)體_第5頁](http://file4.renrendoc.com/view4/M01/3F/1B/wKhkGGYNCYGAdKSNAAFafTxh1pU1065.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第4章結(jié)構(gòu)體CATALOGUE目錄選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)解析式實驗:溫度轉(zhuǎn)換器2.0實驗:批處理文件名選擇結(jié)構(gòu)01選擇結(jié)構(gòu)的分類a)單分支結(jié)構(gòu)b)
二分支結(jié)構(gòu)c)
多分支結(jié)構(gòu)選擇結(jié)構(gòu)選擇結(jié)構(gòu)可以分為單分支、二分支和多分支三種。二分支結(jié)構(gòu)包含一個`if`語句和一個`else`語句,根據(jù)條件的真假執(zhí)行不同的代碼。單分支結(jié)構(gòu)只包含一個`if`語句根據(jù)條件的真假執(zhí)行不同的代碼。多分支結(jié)構(gòu)可以使用多個`if-elif-else`語句來實現(xiàn),根據(jù)不同的條件執(zhí)行不同的代碼。單分支結(jié)構(gòu)只包含一個`if`語句,根據(jù)條件的真假執(zhí)行不同的代碼。if條件語句:
執(zhí)行語句單分支#只有if的例子amount=int(input('請輸入狀態(tài)自評分【1(十分沮喪)~10(滿面紅光)】:')) ifamount>=7: print('******************') print('{0:=^14}'.format('今天狀態(tài)不錯')) print('{0:-^14}'.format('適合學(xué)習(xí)')) print('******************')print('希望您度過愉快的一天!')
輸出1:請輸入狀態(tài)自評分【1(十分沮喪)~10(滿面紅光)】:8******************====今天狀態(tài)不錯====-----適合學(xué)習(xí)-----******************希望您度過愉快的一天!
輸出2:請輸入狀態(tài)自評分【1(十分沮喪)~10(滿面紅光)】:5希望您度過愉快的一天!
單分支結(jié)構(gòu)只包含一個`if`語句,根據(jù)條件的真假執(zhí)行不同的代碼。if條件語句:
執(zhí)行語句單分支'''in/notin關(guān)鍵字也能搭配if語句進行布爾值判斷,比如確定某個特定的值是否被包含在列表中。例如,有一份公司職員表,只有在表單上的人員才允許進入公司,就可控制門禁判斷是否允許該人員進入。
'''allowed_users=['andrew','carolina','david'] user='lily'ifusernotinallowed_users:print(user.title()+",youarenotallowedtocomein.SORRY")
輸出:Lily,youarenotallowedtocomein.SORRY
二分支結(jié)構(gòu)包含一個`if`語句和一個`else`語句,根據(jù)條件的真假執(zhí)行不同的代碼。if條件語句:
執(zhí)行語句1else:
執(zhí)行語句2二分支#if-else例子amount=int(input('請輸入狀態(tài)自評分【1(十分沮喪)~10(滿面紅光)】:')) print('******************')ifamount>=7: print('{0:=^14}'.format('今天狀態(tài)不錯')) print('{0:-^14}'.format('適合學(xué)習(xí)'))else: print('{0:=^14}'.format('今天狀態(tài)不佳')) print('{0:-^14}'.format('用學(xué)習(xí)提升自己吧'))print('******************')print('希望您度過愉快的一天!')
輸出1:請輸入狀態(tài)自評分【1(十分沮喪)~10(滿面紅光)】:8******************====今天狀態(tài)不錯====-----適合學(xué)習(xí)-----******************希望您度過愉快的一天!
輸出2:請輸入狀態(tài)自評分【1(十分沮喪)~10(滿面紅光)】:5******************====今天狀態(tài)不佳====---用學(xué)習(xí)提升自己吧---******************希望您度過愉快的一天!
多分支結(jié)構(gòu)可以使用多個`if-elif-else`語句來實現(xiàn),根據(jù)不同的條件執(zhí)行不同的代碼。if條件語句1:
執(zhí)行語句1elif條件語句2:
執(zhí)行語句2……else:
執(zhí)行語句n+1多分支#
采用并列式多分支評定成績等級
score=int(input('成績:')) level=''ifscore>100orscore<0: level='超出范圍'if90<=score<=100: level='優(yōu)秀'if80<=score<90: level='良好'if70<=score<80: level='中等'if60<=score<70: level='及格'if0<=score<60: level='不及格'print('您的評級是:{}'.format(level))多分支結(jié)構(gòu)可以使用多個`if-elif-else`語句來實現(xiàn),根據(jù)不同的條件執(zhí)行不同的代碼。if條件語句1:
執(zhí)行語句1elif條件語句2:
執(zhí)行語句2……else:
執(zhí)行語句n+1多分支#
采用嵌套式多分支評定成績等級
score=int(input('成績:’)) level=''ifscore>100orscore<0:
level='超出范圍'else:
ifscore>=90: level='優(yōu)秀‘
else:
ifscore>=80:
level='良好’
else:
ifscore>=70:
level='中等’
else:
ifscore>=60:
level='及格’
else:
level='不及格'print('您的評級是:{}'.format(level))多分支結(jié)構(gòu)可以使用多個`if-elif-else`語句來實現(xiàn),根據(jù)不同的條件執(zhí)行不同的代碼。if條件語句1:
執(zhí)行語句1elif條件語句2:
執(zhí)行語句2……else:
執(zhí)行語句n+1多分支#
采用延拓式多分支評定成績等級
score=int(input('成績:')) level=''ifscore>100orscore<0: level='超出范圍'elifscore>=90: level='優(yōu)秀'elifscore>=80: level='良好'elifscore>=70: level='中等'elifscore>=60: level='及格'else: level='不及格'print('您的評級是:{}'.format(level))以上三種結(jié)構(gòu)的輸出結(jié)果均一致。多分支成績:87 您的評級是:良好成績:96您的評級是:優(yōu)秀成績:60您的評級是:及格成績:27您的評級是:不及格成績:101您的評級是:超出范圍
條件表達式是一種將`if-else`語句轉(zhuǎn)換成單一表達式的方法,也稱為三元運算符。條件表達式有三個值,分別代表條件滿足時的值、條件、條件不滿足時的值。條件成立時執(zhí)行的語句if條件else條件不成立時執(zhí)行的語句條件表達式#
將4.1.1中的if-else示例轉(zhuǎn)變成條件表達式
amount=int(input('請輸入狀態(tài)自評分【1(十分沮喪)~10(滿面紅光)】:'))print('******************')print('{0:=^14}\n{1:-^14}'.format('今天狀態(tài)不錯','適合學(xué)習(xí)'))ifamount>=7elseprint('{0:=^14}\n{1:-^14}'.format('今天狀態(tài)不佳','用學(xué)習(xí)提升自己吧'))print('******************\n希望您度過愉快的一天!')條件表達式是一種將`if-else`語句轉(zhuǎn)換成單一表達式的方法,也稱為三元運算符。條件表達式有三個值,分別代表條件滿足時的值、條件、條件不滿足時的值。條件成立時執(zhí)行的語句if條件else條件不成立時執(zhí)行的語句條件表達式#將4.1.1中的多分支示例轉(zhuǎn)變成條件表達式score=int(input('成績:'))level=(‘超出范圍'ifscore>100orscore<0else
'優(yōu)秀'ifscore>=90else '良好'ifscore>=80else '中等'ifscore>=70else '及格'ifscore>=60else '不及格')print('您的評級是:{}'.format(level))異常處理異常處理的作用異常處理是一種用于捕獲和處理程序運行時出現(xiàn)錯誤的機制,通過`try-except`語句實現(xiàn)。異常處理的機制當(dāng)程序出現(xiàn)異常時,可以根據(jù)不同的異常類型執(zhí)行相應(yīng)的處理代碼,確保程序的正常運行。異常處理a=float(input("Entercoefficienta:")) b=float(input("Entercoefficientb:"))c=float(input("Entercoefficientc:"))discrim=b*b-4*a*cdiscRoot=math.sqrt(discrim)root1=(-b+discRoot)/(2*a)root2=(-b-discRoot)/(2*a)print("\nThesolutionsare:",root1,root2)異常處理a=float(input("Entercoefficienta:")) b=float(input("Entercoefficientb:"))c=float(input("Entercoefficientc:"))discrim=b*b-4*a*cifa==0:
print("\nTheequationisnotaquadratic!")else:
ifdiscrim<0:
print("\nTheequationhasnorealroots!") else:
discRoot=math.sqrt(discrim)
root1=(-b+discRoot)/(2*a)
root2=(-b-discRoot)/(2*a) ifroot1==root2:
print("\nonlyonesolution:",root1)
else:
print("\nThesolutionsare:",root1,root2)異常處理print("Thisprogramfindstherealsolutionstoaquadratic\n") try:
a=float(input("Entercoefficienta:"))
b=float(input("Entercoefficientb:"))
c=float(input("Entercoefficientc:"))
discrim=b*b-4*a*c discRoot=math.sqrt(discrim)
root1=(-b+discRoot)/(2*a)
root2=(-b-discRoot)/(2*a)
ifroot1==root2:
print("\nonlyonesolution:",root1) else:
print("\nThesolutionsare:",root1,root2)exceptValueErrorase:
print(e,":NoRealRoots")exceptZeroDivisionErrorase:
print(e,":Invalidcoefficientgiven")except:
print("\nSomethingwentwrong,sorry!")try: <主程序>except<錯誤類型>:<處理方式>循環(huán)結(jié)構(gòu)02循環(huán)結(jié)構(gòu)在生活中的應(yīng)用廣泛,例如,當(dāng)我們想要實現(xiàn)某個任務(wù)時,可以使用循環(huán)來重復(fù)執(zhí)行相同的操作,直到達到預(yù)期的結(jié)果。循環(huán)在生活中的應(yīng)用循環(huán)結(jié)構(gòu)在計算機編程中扮演著重要的角色,因為計算機程序通常需要執(zhí)行一系列操作,而循環(huán)是實現(xiàn)這一功能的有效方法。循環(huán)在計算機編程中的重要性引言一般形式for循環(huán)結(jié)構(gòu)的一般形式是,對于一個序列,使用循環(huán)來迭代其中的元素,并對每個元素執(zhí)行相同的操作。for<變量>in<序列>: 縮進代碼塊非縮進代碼塊在循環(huán)的每一輪,<變量>會依次取序列中的一個值。對序列中的最后一個值執(zhí)行完縮進代碼塊后,程序繼續(xù)執(zhí)行非縮進代碼塊。<序列>是容器型數(shù)據(jù)類型的數(shù)據(jù),例如:字符串、列表、字典、元組、集合、迭代器、生成器。for循環(huán)結(jié)構(gòu)#字符串循環(huán)foriin'hello': print(i,type(i))
輸出:h<class'str’>e<class'str’>l<class'str’>l<class'str’>o<class'str'>
一般形式for循環(huán)結(jié)構(gòu)的一般形式是,對于一個序列,使用循環(huán)來迭代其中的元素,并對每個元素執(zhí)行相同的操作。for<變量>in<序列>: 縮進代碼塊非縮進代碼塊在循環(huán)的每一輪,<變量>會依次取序列中的一個值。對序列中的最后一個值執(zhí)行完縮進代碼塊后,程序繼續(xù)執(zhí)行非縮進代碼塊。<序列>是容器型數(shù)據(jù)類型的數(shù)據(jù),例如:字符串、列表、字典、元組、集合、迭代器、生成器。for循環(huán)結(jié)構(gòu)#列表循環(huán)week=['MON','TUE','WED','THU','FRI','SAT','SUN’]
fornameinweek: print(name)輸出:MONTUEWEDTHUFRISATSUN一般形式for循環(huán)結(jié)構(gòu)的一般形式是,對于一個序列,使用循環(huán)來迭代其中的元素,并對每個元素執(zhí)行相同的操作。for<變量>in<序列>: 縮進代碼塊非縮進代碼塊在循環(huán)的每一輪,<變量>會依次取序列中的一個值。對序列中的最后一個值執(zhí)行完縮進代碼塊后,程序繼續(xù)執(zhí)行非縮進代碼塊。<序列>是容器型數(shù)據(jù)類型的數(shù)據(jù),例如:字符串、列表、字典、元組、集合、迭代器、生成器。for循環(huán)結(jié)構(gòu)#字典循環(huán)a={'name':'Lily','wx':'Lily_W'} forkey,valueina.items(): print(key,':',value)輸出:name:Lilywx:Lily_Wfor循環(huán)適合用于枚舉或遍歷序列,以及迭代對象中的元素。一般應(yīng)用在循環(huán)次數(shù)已知的情況下。
range函數(shù)(1)range(N)產(chǎn)生一個[0,N)的數(shù)字序列且N>0(2)range(M,N)產(chǎn)生一個[M,N)的數(shù)字序列且M<N(3)range(M,N,step)產(chǎn)生一個[M,N)的數(shù)字序列。其中,step為步長(每次數(shù)字增加的值),可為負(fù)值。注意:N是無法被循環(huán)到的數(shù)字,實際循環(huán)到N-1。使用range()函數(shù)進行循環(huán)的方式,稱為計數(shù)器模式for循環(huán)結(jié)構(gòu)#計數(shù)器模式forcurrent_indexinrange(1,6): print(current_index)輸出:12345range函數(shù)(1)range(N)產(chǎn)生一個[0,N)的數(shù)字序列且N>0(2)range(M,N)產(chǎn)生一個[M,N)的數(shù)字序列且M<N(3)range(M,N,step)產(chǎn)生一個[M,N)的數(shù)字序列。其中,step為步長(每次數(shù)字增加的值),可為負(fù)值。注意:N是無法被循環(huán)到的數(shù)字,實際循環(huán)到N-1。想要創(chuàng)建數(shù)字列表,可使用函數(shù)list()將range()的結(jié)果直接轉(zhuǎn)換為列表:將range()作為list()的參數(shù),輸出將是一個數(shù)字列表for循環(huán)結(jié)構(gòu)#創(chuàng)建數(shù)字列表 numbers=list(range(1,6))print(numbers)輸出:[1,2,3,4,5]range函數(shù)(1)range(N)產(chǎn)生一個[0,N)的數(shù)字序列且N>0(2)range(M,N)產(chǎn)生一個[M,N)的數(shù)字序列且M<N(3)range(M,N,step)產(chǎn)生一個[M,N)的數(shù)字序列。其中,step為步長(每次數(shù)字增加的值),可為負(fù)值。注意:N是無法被循環(huán)到的數(shù)字,實際循環(huán)到N-1。使用函數(shù)range()幾乎能夠創(chuàng)建任何需要的數(shù)字集。數(shù)字列表中的元素值作為另一個已知列表的下標(biāo)值存在時,可以實現(xiàn)選擇性的讀取列表元素。for循環(huán)結(jié)構(gòu)#計數(shù)器循環(huán),依次讀取下標(biāo)值對應(yīng)元素值 week=['MON','TUE','WED','THU','FRI','SAT','SUN’]foriinrange(len(week)):print(week[i])輸出:MONTUEWEDTHUFRISATSUNrange函數(shù)(1)range(N)產(chǎn)生一個[0,N)的數(shù)字序列且N>0(2)range(M,N)產(chǎn)生一個[M,N)的數(shù)字序列且M<N(3)range(M,N,step)產(chǎn)生一個[M,N)的數(shù)字序列。其中,step為步長(每次數(shù)字增加的值),可為負(fù)值。注意:N是無法被循環(huán)到的數(shù)字,實際循環(huán)到N-1。使用函數(shù)range()幾乎能夠創(chuàng)建任何需要的數(shù)字集。數(shù)字列表中的元素值作為另一個已知列表的下標(biāo)值存在時,可以實現(xiàn)選擇性的讀取列表元素。for循環(huán)結(jié)構(gòu)#計數(shù)器循環(huán),間隔讀取下標(biāo)值對應(yīng)元素值week=['MON','TUE','WED','THU','FRI','SAT','SUN'] foriinrange(0,len(week),2):print(week[i])輸出:MONWEDFRISUNrange函數(shù)(1)range(N)產(chǎn)生一個[0,N)的數(shù)字序列且N>0(2)range(M,N)產(chǎn)生一個[M,N)的數(shù)字序列且M<N(3)range(M,N,step)產(chǎn)生一個[M,N)的數(shù)字序列。其中,step為步長(每次數(shù)字增加的值),可為負(fù)值。注意:N是無法被循環(huán)到的數(shù)字,實際循環(huán)到N-1。實際應(yīng)用中,面對列表加元組表示的二維表,循環(huán)存取的方式示例如右for循環(huán)結(jié)構(gòu)#二維表循環(huán)存取 students=[(110121,"李麗麗"), (110122,"王凱"), (110123,"胡波濤"), (110124,"江南懷"), (110125,"徐靜")]forrowinstudents: #按行存取 print(row[0],row[1])forid,nameinstudents: #按行拆包存取 print(id,name)forindexinrange(len(students)): #按索引存取
print(students[index][0],students[index][1])輸出:
110121李麗麗110122王凱110123胡波濤110124江南懷110125徐靜一般形式while循環(huán)結(jié)構(gòu)的一般形式是,先測試循環(huán)條件,如果條件為真,則執(zhí)行循環(huán)體中的操作,否則跳出循環(huán)。while判斷條件: 縮進代碼塊非縮進代碼塊如果條件的值為True,那么一定要在執(zhí)行語句中添加改變條件的值的語句或者有觸發(fā)退出的操作,否則會進入死循環(huán)。在循環(huán)體執(zhí)行之前,該條件始終在循環(huán)頂部進行測試。這種結(jié)構(gòu)稱為“先測試”循環(huán)。while循環(huán)結(jié)構(gòu)#while循環(huán)計數(shù)current_index=1whilecurrent_index<=5: #判斷條件 print(current_index)
#改變判斷條件的值的語句 current_index+=1 輸出:12345一般形式while循環(huán)結(jié)構(gòu)的一般形式是,先測試循環(huán)條件,如果條件為真,則執(zhí)行循環(huán)體中的操作,否則跳出循環(huán)。while判斷條件: 縮進代碼塊非縮進代碼塊改編4-1-1代碼,一次性記錄多個成績對應(yīng)的評語。同時允許用戶在任何時間停止:當(dāng)用戶輸入-999時,表示輸入終止。while循環(huán)結(jié)構(gòu)#評級2.0print('若想要終止輸入,請輸入值:-999') #①
score=int(input('成績:'))level=''whilescore!=-999: #②ifscore>100orscore<0:level='超出范圍'elifscore>=90:level='優(yōu)秀'elifscore>=80:level='良好'elifscore>=70:level='中等'elifscore>=60:level='及格'else:level='不及格'print('您的評級是:{}'.format(level))score=int(input('成績:')) #③print('完成.') #④哨兵循環(huán)哨兵循環(huán)不斷處理數(shù)據(jù),直到達到一個特殊值,表明迭代結(jié)束。特殊值稱為“哨兵”??梢赃x擇任何值作為哨兵,唯一的限制是能與實際數(shù)據(jù)值區(qū)分開來。獲取第一個數(shù)據(jù)項而該數(shù)據(jù)項不是特殊值(哨兵):
處理項目
獲取下一個數(shù)據(jù)項while循環(huán)結(jié)構(gòu)#評級2.0print('若想要終止輸入,請輸入值:-999') #①
score=int(input('成績:'))level=''whilescore!=-999: #②ifscore>100orscore<0:level='超出范圍'elifscore>=90:level='優(yōu)秀'elifscore>=80:level='良好'elifscore>=70:level='中等'elifscore>=60:level='及格'else:level='不及格'print('您的評級是:{}'.format(level))score=int(input('成績:')) #③print('完成.') #④輸出:若想要終止輸入,請輸入值:-999成績:101您的評級是:超出范圍成績:68您的評級是:及格成績:57您的評級是:良好成績:-999完成.哨兵循環(huán)哨兵循環(huán)不斷處理數(shù)據(jù),直到達到一個特殊值,表明迭代結(jié)束。特殊值稱為“哨兵”??梢赃x擇任何值作為哨兵,唯一的限制是能與實際數(shù)據(jù)值區(qū)分開來。獲取第一個數(shù)據(jù)項而該數(shù)據(jù)項不是特殊值(哨兵):
處理項目
獲取下一個數(shù)據(jù)項while循環(huán)結(jié)構(gòu)想要擁有一個真正獨特的哨兵,需要擴大可能的輸入。假設(shè)將用戶的輸入作為字符串獲取??梢杂靡粋€獨特的非數(shù)字字符串,表示輸入結(jié)束。而所有其他輸入都將被轉(zhuǎn)換為數(shù)字類型數(shù)據(jù)。
#評級2.0.1print('若想要終止輸入,請輸入空格鍵') score=input('成績:')level=''whilescore!='':score=int(score)print('continue')score=input('成績:')print('完成.')輸出:若想要終止輸入,請輸入空格鍵
continue成績:34continue成績:987continue成績:
完成.哨兵循環(huán)哨兵循環(huán)不斷處理數(shù)據(jù),直到達到一個特殊值,表明迭代結(jié)束。特殊值稱為“哨兵”??梢赃x擇任何值作為哨兵,唯一的限制是能與實際數(shù)據(jù)值區(qū)分開來。獲取第一個數(shù)據(jù)項而該數(shù)據(jù)項不是特殊值(哨兵):
處理項目
獲取下一個數(shù)據(jù)項while循環(huán)結(jié)構(gòu)進一步優(yōu)化,可以使用累積器(count)來計數(shù)不同的評語出現(xiàn)的次數(shù)。它從0開始,每次通過循環(huán)增加1。#評級2.1print('若想要終止輸入,請輸入值:-999') score=int(input('成績:'))level=''A=B=C=D=F=0 #⑤whilescore!=-999:ifscore>100orscore<0:level='超出范圍'elifscore>=90:level='優(yōu)秀'A+=1 #⑥elifscore>=80:level='良好'B+=1 #⑥elifscore>=70:level='中等'C+=1 #⑥elifscore>=60:level='及格'D+=1 #⑥else:level='不及格'F+=1 #⑥print('您的評級是:{}'.format(level))score=int(input('成績:'))print('完成.')print('經(jīng)統(tǒng)計:【優(yōu)秀】共{}名,【良好】共{}名,【中等】共{}名,【及格】共{}名,【不及格】共{}名'.format(A,B,C,D,F)) #⑦哨兵循環(huán)哨兵循環(huán)不斷處理數(shù)據(jù),直到達到一個特殊值,表明迭代結(jié)束。特殊值稱為“哨兵”??梢赃x擇任何值作為哨兵,唯一的限制是能與實際數(shù)據(jù)值區(qū)分開來。獲取第一個數(shù)據(jù)項而該數(shù)據(jù)項不是特殊值(哨兵):
處理項目
獲取下一個數(shù)據(jù)項while循環(huán)結(jié)構(gòu)進一步優(yōu)化,可以使用累積器(count)來計數(shù)不同的評語出現(xiàn)的次數(shù)。它從0開始,每次通過循環(huán)增加1。break語句:break語句用于中斷循環(huán),當(dāng)條件滿足時,跳出循環(huán)體,執(zhí)行循環(huán)外的代碼。循環(huán)控制語句for循環(huán)While循環(huán)for迭代變量in對象:
執(zhí)行代碼 if條件表達式2: breakwhile條件表達式1:
執(zhí)行代碼 if條件表達式2: breakfor循環(huán)While循環(huán)for<變量>in<序列>:
語句塊1else:
語句塊2非縮進代碼塊while條件:
語句塊1else:
語句塊2非縮進代碼塊else子句在循環(huán)正常完成時才會被執(zhí)行,這意味著循環(huán)沒有遇到任何break語句作用功能需求輸入一個大于等于2的正整數(shù),判斷是否為素數(shù)使用while-else語句實現(xiàn)循環(huán)控制語句(1)循環(huán)控制變量a從num-1遞減到1,程序在每次循環(huán)判斷a(賦值從num-1到2)是否是num的因數(shù);(2)若a被判斷是num的因數(shù),打印“不是素數(shù)”。此時根據(jù)素數(shù)定義,剩余循環(huán)再無意義,使用break語句跳出while循環(huán),同時跳過else子句;(3)若循環(huán)過程中,num%a始終不為0,即num不能被從2到num-1中的任何一個數(shù)整除,說明num是素數(shù),在循環(huán)結(jié)束后執(zhí)行else子句,打印“是素數(shù)”。功能需求輸入一個大于等于2的正整數(shù),判斷是否為素數(shù)使用while-else語句實現(xiàn)循環(huán)控制語句#while-else判斷素數(shù)
num=int(input('請輸入一個大于等于2的正整數(shù):'))a=num-1 ①whilea>1: ①ifnum%a==0: ②print("不是素數(shù)") ②break#跳出當(dāng)前循環(huán),包括else子句。
②a=a-1 ①else: ③print("是素數(shù)") ③
輸出1:
請輸入一個大于等于2的正整數(shù):11是素數(shù)
輸出2:請輸入一個大于等于2的正整數(shù):4不是素數(shù)
功能需求輸入一個大于等于2的正整數(shù),判斷是否為素數(shù)使用if-else語句實現(xiàn)循環(huán)控制語句(1)程序中的循環(huán)控制變量a從2遞增到num-1,程序在每次循環(huán)判斷a是否是num的因數(shù);(2)若a被判斷是num的因數(shù),打印”不是素數(shù)”,然后break語句跳出for語句,同時跳過else子句;(3)若循環(huán)過程中,num%a始終不為0,說明num是素數(shù),在循環(huán)結(jié)束后執(zhí)行else子句,打印”是素數(shù)”。功能需求輸入一個大于等于2的正整數(shù),判斷是否為素數(shù)使用if-else語句實現(xiàn)循環(huán)控制語句#if-else判斷素數(shù)num=int(input('請輸入一個大于等于2的正整數(shù):')) foriinrange(2,num): #i從2到num-1 ①ifnum%i==0: ②print("不是素數(shù)") ②break ②else: ③print("是素數(shù)") ③循環(huán)控制語句continue語句:continue語句用于繼續(xù)循環(huán),當(dāng)條件不滿足時,跳過當(dāng)前循環(huán),執(zhí)行下一循環(huán)。其存在是為了刪除滿足循環(huán)條件下的某些不需要的成分作用html_list='/,/' foriinhtml_list:ifi==',':print('\n')continueprint(i,end="")
輸出:/
/例如,在一大段網(wǎng)頁地址文本中剔除掉不需要的逗號分隔符,使有用信息更直觀地展示循環(huán)控制語句continue語句:continue語句用于繼續(xù)循環(huán),當(dāng)條件不滿足時,跳過當(dāng)前循環(huán),執(zhí)行下一循環(huán)。其存在是為了刪除滿足循環(huán)條件下的某些不需要的成分作用html_list="/,/" print(html_list.split(','))輸出:['/','/'] 實際上,當(dāng)剔除部分是固定或者樣式統(tǒng)一的時候,利用split()函數(shù)或者re正則表達式能夠更方便的實現(xiàn)相應(yīng)功能編程只是實現(xiàn)功能目標(biāo)的手段。當(dāng)程序員熟悉越多的已有函數(shù)或方法,其編程思維會越加的靈活豐富循環(huán)的嵌套處理相對復(fù)雜的問題Python語言允許在一個循環(huán)體里面嵌入另一個循環(huán)。可以在for(while)循環(huán)嵌套for(while)循環(huán),也可以在循環(huán)體內(nèi)嵌入其他的循環(huán)體作用示例:給定一個整數(shù)區(qū)間,找出其中的所有素數(shù),并求和。使用for嵌套循環(huán)語句實現(xiàn),分步驟說明如下:(1)獲取區(qū)間范圍[m,n],創(chuàng)建求和變量summe;(2)程序中的外層循環(huán)控制變量i從m遞增到n,依次獲取每一個區(qū)間內(nèi)的整數(shù)作為判斷對象;(3)程序中的內(nèi)層循環(huán)控制變量j從2遞增到i-1,程序在每次循環(huán)判斷j是否是外層變量i的因數(shù);(4)若j被判斷是i的因數(shù),利用break語句結(jié)束內(nèi)層循環(huán),進行下一次的外層循環(huán);(5)若內(nèi)層循環(huán)過程中,i%j始終不為0,說明i是素數(shù),在該層循環(huán)結(jié)束后執(zhí)行else子句,打印i值,并更新summe,然后進行下一次的外層循環(huán);(6)等循環(huán)全部結(jié)束后,打印素數(shù)和。循環(huán)的嵌套處理相對復(fù)雜的問題Python語言允許在一個循環(huán)體里面嵌入另一個循環(huán)??梢栽趂or(while)循環(huán)嵌套for(while)循環(huán),也可以在循環(huán)體內(nèi)嵌入其他的循環(huán)體作用#素數(shù)和1.0m,n=map(int,input('請輸入一個區(qū)間范圍:').split()) ①summe=0 ①
foriinrange(m,n+1): ②forjinrange(2,i): #j從2到i-1 ③ifi%j==0: ④break ④else: ⑤print(i,end='') ⑤summe+=i ⑤
print('在{}到{}區(qū)間中,所有素數(shù)和={}'.format(m,n,summe)) ⑥
輸出:
請輸入一個區(qū)間范圍:102011131719在10到20區(qū)間中,所有素數(shù)和=60
循環(huán)的嵌套處理相對復(fù)雜的問題Python語言允許在一個循環(huán)體里面嵌入另一個循環(huán)??梢栽趂or(while)循環(huán)嵌套for(while)循環(huán),也可以在循環(huán)體內(nèi)嵌入其他的循環(huán)體作用建立一個空列表,每找到一個素數(shù),就添加進該列表中,最后利用sum()對列表元素求和#素數(shù)和2.0m,n=map(int,input('請輸入一個區(qū)間范圍:').split())prime=[]foriinrange(m,n+1):forjinrange(2,i): #j從2到i-1ifi%j==0:breakelse:prime.append(i)print('在{}到{}區(qū)間中,總共有{}個素數(shù),分別是{},所有素數(shù)和={}'.format(m,n,len(prime),prime,sum(prime)))
輸出:請輸入一個區(qū)間范圍:1020在10到20區(qū)間中,總共有4個素數(shù),分別是[11,13,17,19],所有素數(shù)和=60
循環(huán)的嵌套約瑟夫環(huán)算法:m個猴子報數(shù)選大王,1到n循環(huán)報數(shù),數(shù)到n出列淘汰,剩下的最后一只猴子就是大王。兩個功能:(1)讓用戶交互式輸入開始時的猴子數(shù)m、報數(shù)的最后一個數(shù)n;(2)給出當(dāng)選猴王的初始編號。功能需求m=int(input('總猴子數(shù):')) n=int(input('報數(shù)到:'))l=[iforiinrange(1,m+1)] #列表解析式,創(chuàng)建m個猴子的序列
foriinrange(1,n+1):l.remove(l[0])print(l)l.append(l[0])print(l)輸出:總猴子數(shù):10報數(shù)到:3[2,3,4,5,6,7,8,9,10][2,3,4,5,6,7,8,9,10,2][3,4,5,6,7,8,9,10,2][3,4,5,6,7,8,9,10,2,3][4,5,6,7,8,9,10,2,3][4,5,6,7,8,9,10,2,3,4]循環(huán)的嵌套約瑟夫環(huán)算法:m個猴子報數(shù)選大王,1到n循環(huán)報數(shù),數(shù)到n出列淘汰,剩下的最后一只猴子就是大王。兩個功能:(1)讓用戶交互式輸入開始時的猴子數(shù)m、報數(shù)的最后一個數(shù)n;(2)給出當(dāng)選猴王的初始編號。功能需求'''m,n賦值'''lst=[iforiinrange(1,m+1)] #列表解析式 l=lst[:] #利用深拷貝復(fù)制lst#報數(shù)循環(huán)。報數(shù)相當(dāng)于從1開始,數(shù)到n表示一批次報數(shù)完成,總共報數(shù)n次foriinrange(1,n+1):l.remove(lst[0])l.append(lst[0])
print(l) #更新原序列,此句是后期改變外循環(huán)判斷條件的關(guān)鍵
lst=l[:]輸出:總猴子數(shù):10報數(shù)到:3[2,3,4,5,6,7,8,9,10,1][3,4,5,6,7,8,9,10,1,2][4,5,6,7,8,9,10,1,2,3] 循環(huán)的嵌套約瑟夫環(huán)算法:m個猴子報數(shù)選大王,1到n循環(huán)報數(shù),數(shù)到n出列淘汰,剩下的最后一只猴子就是大王。功能需求'''m,n,lst,l如上述示例賦值'''foriinrange(1,n+1):
#當(dāng)并非每批次中最后一個報數(shù)的猴子
ifi!=n:
#報完數(shù)后把該猴子從復(fù)制隊列的第一位調(diào)到復(fù)制隊列的最后一位
l.remove(lst[0])
l.append(lst[0])
print(l) lst=l[:]
else: #報數(shù)為n的猴子直接淘汰,不再重新進入循環(huán) l.remove(lst[0]) print(l) lst=l[:]輸出:總猴子數(shù):10報數(shù)到:3[2,3,4,5,6,7,8,9,10,1][3,4,5,6,7,8,9,10,1,2][4,5,6,7,8,9,10,1,2]
循環(huán)的嵌套約瑟夫環(huán)算法:m個猴子報數(shù)選大王,1到n循環(huán)報數(shù),數(shù)到n出列淘汰,剩下的最后一只猴子就是大王。功能需求#約瑟夫環(huán)算法
'''m,n,lst,l如上述示例賦值'''#當(dāng)原列表lst內(nèi)始終有元素時,繼續(xù)循環(huán)whilelen(lst)>1: foriinrange(1,n+1): ifi!=(n): l.remove(lst[0]) l.append(lst[0]) lst=l[:] else: l.remove(l[0]) lst=l[:] #每批次報數(shù)(即淘汰掉一只猴子)后,顯示新的隊列排列順序 print(l) #注意print語句的縮進位置請輸入猴子總數(shù):10 請輸入要淘汰猴子的報數(shù):3[4,5,6,7,8,9,10,1,2][7,8,9,10,1,2,4,5][10,1,2,4,5,7,8][4,5,7,8,10,1][8,10,1,4,5][4,5,8,10][10,4,5][10,4][4]
在程序中,循環(huán)結(jié)構(gòu)是常用的控制流結(jié)構(gòu),它能夠讓程序按照特定的條件進行循環(huán)執(zhí)行。好的編程思維能夠讓程序更加靈活地應(yīng)對各種意外情況,提高程序的容錯性和可靠性。總結(jié)編程思維的豐富性循環(huán)結(jié)構(gòu)的靈活運用解析式03列表解析式-格式:[exprforeiniterator]-可與if語句一起使用,用于篩選列表元素
-示例代碼解析lst=[1,2,3,4,5]even_numbers=[xforxinlstifx%2==0]列表解析式lst=[1,2,3,5,6,8,10]res=[xforxinlstifx%2==0]print(res)
輸出:
[2,6,8,10]
#說明列表解析式一定要使用中括號括起來[[x,y]forxinrange(2)foryinrange(5)]
輸出:
[[0,0],[0,1],[0,2],[0,3],[0,4],[1,0],[1,1],[1,2],[1,3],[1,4]]
lst=[1,2,3,5,6,8,10] [x**2ifx%2==0elsex**3forxinlst]
輸出:[1,4,27,125,36,64,100]
生成器解析式
-格式:(exprforeiniterator)-一邊循環(huán)一邊計算,節(jié)省內(nèi)存空間
-只能迭代一次
-示例代碼解析generator=(x**2forxinrange(5))>>>g=(x**2forxinrange(10)) >>>print(g)<generatorobject<genexpr>at0x10dd85b30>
#利用list()函數(shù)可以將其轉(zhuǎn)換成列表>>>list(g)[0,1,4,9,16,25,36,49,64,81]
集合解析式
-格式:{exprforeiniterator}-可用于去重
-示例代碼解析lst=[1,2,3,3,4,4,5]unique_numbers={xforxinlst}>>>lst=[1,2,2,3,5,6,8,10]>>>s={x**2forxinlst}>>>print(s){64,1,4,36,100,9,25}
字典解析式-格式:{key_expr:value_exprforeiniterator}-用于創(chuàng)建字典
-示例代碼解析names=['Alice','Bob','Charlie']name_lengths={name:len(name)fornameinnames}>>>{str(x):x**2forxinrange(5)}{'0':0,'1':1,'2':4,'3':9,'4':16} 應(yīng)用示例**使用列表解析式判斷素數(shù)**
-根據(jù)之前的示例進行改造
-示例代碼解析num=10factors=[factorforfactorinrange(2,num)ifnum%factor==0]is_prime=len(factors)==0解析式是一種常用的工具,可以讓我們更加靈活地處理和操作數(shù)據(jù)。解析式的靈活運用不同的解析式有不同的格式和用法,需要根據(jù)需求選擇合適的類型。根據(jù)需求選擇合適的解析式類型總結(jié)實驗:溫度轉(zhuǎn)換器2.004實驗:溫度轉(zhuǎn)換器2.0案例描述:根據(jù)章節(jié)2.7中實現(xiàn)的溫度轉(zhuǎn)換器,完善相關(guān)程序功能:根據(jù)鍵入的對應(yīng)溫度單位,實現(xiàn)反向轉(zhuǎn)換。案例分析:1. 根據(jù)輸入字符串,判斷當(dāng)前溫度單位;2. 分別根據(jù)獲得的溫度值,進行溫度轉(zhuǎn)換;3. 對應(yīng)鍵入不符要求的其他情況進行處理。實驗:溫度轉(zhuǎn)換器2.0代碼TempConvert2.pyTempStr=input("請輸入溫度值,并提供單位(例如37C/200F):") #①
Temp=float(TempStr[:-1])unit=TempStr[-1].lower()ifunit=='f': #②C=(Temp-32)/1.8print("轉(zhuǎn)換后的攝氏溫度是{:.1f}C".format(C))elifunit=='c':
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 讓課堂充滿生機與活力
- 2025年槍托項目可行性研究報告
- 2025年度航空航天裝備研發(fā)合作合同
- 信用社終止貸款合同范本
- 儲值合同范本
- 保時捷買賣合同范本
- 公司對個人轉(zhuǎn)讓合同范例
- 優(yōu)信網(wǎng)出租車合同范例
- 交通管制合同范本
- 企業(yè)公司聘用合同范本
- 高職應(yīng)用語文教程(第二版)教案 3管晏列傳
- 高中物理《光電效應(yīng)》
- 烹飪實訓(xùn)室安全隱患分析報告
- 《金屬加工的基礎(chǔ)》課件
- 運輸行業(yè)春節(jié)安全生產(chǎn)培訓(xùn) 文明駕駛保平安
- 體驗式沙盤-收獲季節(jié)
- 找人辦事協(xié)議
- 老年護理陪護培訓(xùn)課件
- 醬香型白酒工廠設(shè)計
- 第3章 環(huán)境感知技術(shù)
- 牽引管道孔壁與管道外壁之間注漿技術(shù)方案
評論
0/150
提交評論