




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
信息系統(tǒng)菜單選擇功能實(shí)現(xiàn)任務(wù)三任務(wù)目標(biāo)3-1系統(tǒng)條件判斷3-2系統(tǒng)菜單循環(huán)3-3處理系統(tǒng)異常任務(wù)分析任務(wù)描述本任務(wù)主要學(xué)習(xí)Python的流程控制語句,包括判斷語句、循環(huán)語句等內(nèi)容,以及Python的異常處理機(jī)制。在Python開發(fā)中,程序員使用判斷語句、循環(huán)語句的頻率非常高,并且通常需要辨別事件的異常情況。希望同學(xué)們能結(jié)合案例多加以理解和練習(xí),熟練掌握它們的使用。任務(wù)目標(biāo)知識(shí)目標(biāo)掌握if、else和elif語句的基本結(jié)構(gòu)與語法掌握for循環(huán)、while循環(huán)語句的基本結(jié)構(gòu)與用法掌握循環(huán)語句中常用的break、continue、pass語句理解異常的概念和產(chǎn)生原理技能目標(biāo)能夠進(jìn)行選擇結(jié)構(gòu)程序設(shè)計(jì)能夠進(jìn)行循環(huán)結(jié)構(gòu)程序設(shè)計(jì)掌握處理異常的幾種方式任務(wù)設(shè)計(jì)3-1系統(tǒng)條件判斷一般情況下,程序都是一條一條語句順序執(zhí)行的。如果想要改變語句的執(zhí)行順序,讓程序根據(jù)不同的情況執(zhí)行不同的語句,該怎么實(shí)現(xiàn)呢?這是通過流程控制語句實(shí)現(xiàn)的。我們接下來要學(xué)習(xí)的判斷語句就是一種流程控制語句。所謂的判斷,是指如果條件滿足,才能做某件事情;相反,如果條件不滿足,就做另外一件事情,或者什么也不做。生活中的判斷幾乎是無所不在的,我們每天都在做各種各樣的選擇。計(jì)算機(jī)之所以能做很多自動(dòng)化的任務(wù),因?yàn)樗梢宰约鹤鰲l件判斷。比如,根據(jù)用戶年齡,判斷用戶是否是成年人,根據(jù)判斷結(jié)果打印不同的內(nèi)容。在Python中,判斷語句又被稱為“分支語句”,實(shí)現(xiàn)Python的選擇結(jié)構(gòu)。if語句在Python提供的多種條件判斷語句中,if語句是最簡(jiǎn)單的判斷語句。if語句實(shí)現(xiàn)單分支結(jié)構(gòu),使用可以返回一個(gè)布爾值的布爾表達(dá)式作為分支條件來進(jìn)行控制,格式如下。注意,布爾表達(dá)式后面要使用冒號(hào)(:),分支表示接下來滿足條件時(shí)要執(zhí)行的代碼塊。在Python中,通過將塊中的代碼行縮進(jìn)以構(gòu)成代碼塊,相同縮進(jìn)的語句組成一個(gè)語句塊。程序會(huì)先計(jì)算布爾表達(dá)式,如果結(jié)果為True,則執(zhí)行分支中的所有語句,然后執(zhí)行判斷語句后續(xù)代碼;相反的,如果結(jié)果為False,則分支不執(zhí)行,直接執(zhí)行判斷語句后續(xù)代碼。if語句用流程圖表示if語句的執(zhí)行過程如圖所示:if語句如下實(shí)例利用if語句實(shí)現(xiàn)對(duì)年齡的判斷,age的值大于18,布爾表達(dá)式的值為True,執(zhí)行if后面的分支語句age=30print('判斷開始')ifage>=18:
print('年齡為',age)
print('這是一個(gè)成年人')
print('判斷結(jié)束')運(yùn)行結(jié)果:判斷開始年齡為30這是一個(gè)成年人判斷結(jié)束if語句改變age的值,age的值小于18,布爾表達(dá)式的值為False,因此,if后面的分支語句不執(zhí)行age=3print('判斷開始')ifage>=18:
print('年齡為',age)
print('這是一個(gè)成年人')
print('判斷結(jié)束')運(yùn)行結(jié)果:判斷開始判斷結(jié)束if語句根據(jù)Python的縮進(jìn)規(guī)則,如果if語句判斷為True,就把縮進(jìn)的兩行print語句執(zhí)行了,否則,什么都不做。我們可以總結(jié)出if判斷語句的作用:當(dāng)滿足一定條件時(shí),執(zhí)行指定代碼,否則就不執(zhí)行。if后的布爾表達(dá)式還可以用簡(jiǎn)寫的判斷條件來代替,其中,只要x是非零數(shù)值、非空字符串、非空list等,就判斷為True,否則為False。x=2ifx:print('判斷為true')運(yùn)行結(jié)果:判斷為trueif-else語句使用if語句能夠?qū)崿F(xiàn)單分支選擇結(jié)構(gòu)。else語句可以與if語句組合,使用if-else語句能夠?qū)崿F(xiàn)雙分支,格式如下。上述格式中,程序會(huì)先計(jì)算布爾表達(dá)式,如果結(jié)果為True,則執(zhí)行第1個(gè)分支中的所有語句;如果為False,則執(zhí)行第2個(gè)分支中的所有語句。通過else語句,程序可以選擇執(zhí)行。if-else語句用流程圖表示if-else語句的執(zhí)行過程如圖所示:if-else語句如果想要在age<18時(shí),輸出一些信息,可以使用兩個(gè)if語句,if-else雙分支語句提供了更簡(jiǎn)潔的途徑:age=3print('判斷開始')ifage>=18:print('年齡為',age)print('這是一個(gè)成年人')ifage<18:print('年齡為',age)print('這是一個(gè)未成年人')print('判斷結(jié)束')運(yùn)行結(jié)果:判斷開始年齡為3這是一個(gè)未成年人判斷結(jié)束age=3print('判斷開始')ifage>=18:print('年齡為',age)print('這是一個(gè)成年人')else:print('年齡為',age)print('這是一個(gè)未成年人')
print('判斷結(jié)束')if-else語句利用if-else雙分支語句,實(shí)現(xiàn)對(duì)數(shù)字奇偶的判斷:a=3print('判斷開始')ifa%2==0:print(a,'是偶數(shù)')else:print(a,'是奇數(shù)')print('判斷結(jié)束')運(yùn)行結(jié)果:判斷開始3是奇數(shù)判斷結(jié)束if-elif語句在需要判斷的情況大于兩種的情況下,if和if-else語句顯然是無法完成判斷的。要實(shí)現(xiàn)多路分支,可以使用if-elif語句,格式如下。if-elif語句其中,elif是elseif的縮寫。為了實(shí)現(xiàn)多分支結(jié)構(gòu),程序中可以有多個(gè)elif。上述格式的運(yùn)行步驟如下:(1)程序計(jì)算第1個(gè)布爾表達(dá)式,如果結(jié)果為True,則執(zhí)行第1個(gè)分支。判斷結(jié)束;(2)如果為False,則計(jì)算第2個(gè)布爾表達(dá)式。如果第2個(gè)表達(dá)式為True,則執(zhí)行第2個(gè)分支。判斷結(jié)束;(3)如果為False,則繼續(xù)計(jì)算第3個(gè)布爾表達(dá)式。如果第3個(gè)表達(dá)式為True,則執(zhí)行第3個(gè)分支。判斷結(jié)束;(4)如果為False,則計(jì)算下一個(gè)布爾表達(dá)式…以此類推,直至結(jié)束。if-elif語句在if-elif語句中,程序從上往下判斷,根據(jù)布爾表達(dá)式的結(jié)果來決定沿哪個(gè)分支執(zhí)行。如果某個(gè)布爾表達(dá)式為True,把該表達(dá)式對(duì)應(yīng)的分支執(zhí)行后,就忽略剩下的elif語句,判斷結(jié)束。if-elif語句的使用如下所示。a=5ifa>0:print(a,'是一個(gè)正數(shù)')
elifa==0:print(a,'為0')
elifa<0:print(a,'是一個(gè)負(fù)數(shù)')運(yùn)行結(jié)果:5是一個(gè)正數(shù)if-elif語句接下來,利用if-elif語句實(shí)現(xiàn)對(duì)年齡更進(jìn)一步的判斷,實(shí)例如下所示。age=8print('判斷開始')ifage>=18:print('年齡為',age)print('這是一個(gè)成年人')elifage>=6:print('年齡為',age)print('這是一個(gè)青少年')elifage>=3:print('年齡為',age)print('這是一個(gè)兒童')print('判斷結(jié)束')運(yùn)行結(jié)果:判斷開始年齡為8這是一個(gè)青少年判斷結(jié)束if-elif-else語句多分支結(jié)構(gòu)還可以使用if-elif-else語句來實(shí)現(xiàn),格式如下。上述格式中,條件判斷從上往下匹配,當(dāng)某個(gè)布爾表達(dá)式為True時(shí),執(zhí)行對(duì)應(yīng)的分支語句,后續(xù)的elif和else都不再執(zhí)行。if-elif-else語句以下實(shí)例可以實(shí)現(xiàn)對(duì)年齡更精確的判斷。age=2print('判斷開始')ifage>=18:print('年齡為',age)print('這是一個(gè)成年人')elifage>=6:print('年齡為',age)print('這是一個(gè)青少年')elifage>=3:print('年齡為',age)print('這是一個(gè)兒童')else:print('年齡為',age)print('這是一個(gè)嬰幼兒')print('判斷結(jié)束')運(yùn)行結(jié)果:判斷開始年齡為2這是一個(gè)嬰幼兒判斷結(jié)束if嵌套使用if進(jìn)行條件判斷,如果希望在條件成立的執(zhí)行語句中增加條件判斷,則可以使用if嵌套,也就是說,整個(gè)if可以放在另一個(gè)if語句中。if嵌套的使用如下所示。m=int(input('請(qǐng)輸入月份1~12:'))if1<=m<=12:ifm<=3:print('春季')elifm<=6:print('夏季')elifm<=9:print('秋季')else:print('冬季')else:print("輸錯(cuò)了")運(yùn)行結(jié)果:請(qǐng)輸入月份1~12:6夏季外層if-else語句實(shí)現(xiàn)了對(duì)有效月份輸入的判斷,內(nèi)層if-elif-else語句實(shí)現(xiàn)了多分支判斷,嵌套到外層if語句的內(nèi)部。運(yùn)行結(jié)果如下所示:if嵌套利用if嵌套,能夠判斷某一年份是否是閏年。滿足以下條件之一的年份是閏年:(1)能被4整除,但不能被100整除;(2)能被100整除,又能被400整除。不符合這兩個(gè)條件的年份不是閏年。代碼如下所示。#year表示輸入的年份
#flag=0,不是閏年;flag=1,是閏年
year=int(input('請(qǐng)輸入年份:'))ifyear%4==0:ifyear%100==0:ifyear%400==0:flag=1else:flag=0else:flag=1else:flag=0ifflag==1:print(year,'isleapyear')else:print(year,'isnotleapyear')運(yùn)行結(jié)果:請(qǐng)輸入年份:20002000isleapyear3-2系統(tǒng)菜單循環(huán)計(jì)算機(jī)程序周而復(fù)始地重復(fù)同樣的步驟,這稱為循環(huán)。Python循環(huán)有兩種類型:(1)重復(fù)一定次數(shù)的循環(huán);(2)重復(fù)直至發(fā)生某種情況時(shí)結(jié)束的循環(huán)。循環(huán)語句是一種流程控制語句。Python提供兩種循環(huán)語句,分別是for循環(huán)和while循環(huán)。for語句在Python中,for循環(huán)是一個(gè)序列迭代器,可以遍歷任何有序的序列,如字符串、列表、元組和字典等。我們會(huì)在后面的章節(jié)中更加詳細(xì)地學(xué)習(xí)這幾種數(shù)據(jù)類型。for循環(huán)的基本格式如下。在上述格式中,循環(huán)變量的值受for循環(huán)控制,該變量會(huì)在每次循環(huán)開始時(shí)依次被賦值為序列中的每個(gè)元素,因此循環(huán)體中不能對(duì)該變量賦值。序列中有幾個(gè)元素,for循環(huán)的循環(huán)體就執(zhí)行幾次,元素的個(gè)數(shù)決定循環(huán)次數(shù)。for語句在下面的實(shí)例中,使用for循環(huán)遍歷列表。執(zhí)行這段代碼,會(huì)依次打印列表中的每一個(gè)元素。在每次循環(huán)中,i依次對(duì)應(yīng)列表中的每一個(gè)元素,循環(huán)體的語句要完成一次。運(yùn)行結(jié)果如下所示:print('循環(huán)開始')foriin[1,2,3,4,5]:print(i)print('循環(huán)結(jié)束')運(yùn)行結(jié)果:循環(huán)開始12345循環(huán)結(jié)束for語句同樣的,使用for循環(huán)遍歷字符串列表。print('循環(huán)開始')foriin['hello','Python','WWW','rabbit','computer']:print(i)print('循環(huán)結(jié)束')運(yùn)行結(jié)果:循環(huán)開始helloPythonWWWrabbitcomputer循環(huán)結(jié)束for語句使用for循環(huán)遍歷字符串,打印字符串的每個(gè)元素,代碼如下所示。print('循環(huán)開始')forletterin'Python':print('當(dāng)前字母:',letter)print('循環(huán)結(jié)束')運(yùn)行結(jié)果:循環(huán)開始當(dāng)前字母:P當(dāng)前字母:y當(dāng)前字母:t當(dāng)前字母:h當(dāng)前字母:o當(dāng)前字母:n循環(huán)結(jié)束range函數(shù)Python提供了一個(gè)內(nèi)置range函數(shù),它能返回一系列連續(xù)增加的整數(shù),經(jīng)常和for循環(huán)一起用于遍歷整個(gè)序列。range函數(shù)經(jīng)常使用的格式為:range(start,end),用于創(chuàng)建整數(shù)序列[start,start+1,…,end-1]。用Python程序?qū)崿F(xiàn)計(jì)算1+2+3+…+1000,代碼如下所示。sum=0foriinrange(1,1001):
sum+=i
print('1+2+3+...+1000=',sum)運(yùn)行結(jié)果:1+2+3+...+1000=500500range函數(shù)如下實(shí)例中,用for循環(huán)和range函數(shù)來計(jì)算指定整數(shù)的階乘。m為輸入整數(shù),result為計(jì)算后得出的階乘。假如用戶輸入7,程序會(huì)構(gòu)建一個(gè)range(1,8)對(duì)象(不包含8),在每次循環(huán)開始時(shí),i都會(huì)被依次自動(dòng)賦值為range所包含的每個(gè)元素,for循環(huán)將會(huì)自動(dòng)循環(huán)7次。運(yùn)行以上實(shí)例,如果輸入7,將會(huì)看到如下運(yùn)行結(jié)果:m=int(input("請(qǐng)輸入想計(jì)算的整數(shù)階乘:"))result=1foriinrange(1,m+1):result*=iprint('階乘為:',result)運(yùn)行結(jié)果:請(qǐng)輸入想計(jì)算的整數(shù)階乘:7階乘為:5040range函數(shù)此外,采用range(start,end,step)的格式,還可以指定創(chuàng)建整數(shù)序列時(shí)的步長(zhǎng),如下實(shí)例。print('循環(huán)開始')foriinrange(0,6,2):print(i)print('循環(huán)結(jié)束')運(yùn)行結(jié)果:循環(huán)開始024循環(huán)結(jié)束range函數(shù)使用for循環(huán)打印所有水仙花數(shù),并計(jì)算水仙花數(shù)的個(gè)數(shù)。水仙花數(shù)是指一個(gè)3位數(shù),它的每個(gè)數(shù)位上的數(shù)字的3次冪之和等于它本身(例如:1^3+5^3+3^3=153)。#count表示水仙花數(shù)的個(gè)數(shù)count=0fornuminrange(100,1000):a=num%10#個(gè)位數(shù)
b=num//10%10#十位數(shù)
c=num//100#百位數(shù)
ifa**3+b**3+c**3==num:#判斷條件
count+=1print(num,end='')print()print('水仙花數(shù)的個(gè)數(shù)為:',count)運(yùn)行結(jié)果:153370371407水仙花數(shù)的個(gè)數(shù)為:4while語句While循環(huán)也是最常用的循環(huán)之一,基本格式如下。上述格式中,只要布爾表達(dá)式為True,循環(huán)體就會(huì)被執(zhí)行。循環(huán)體執(zhí)行完畢后再次計(jì)算布爾表達(dá)式,如果結(jié)果依然為True,再次執(zhí)行循環(huán)體,直至布爾表達(dá)式為False,循環(huán)結(jié)束。用流程圖表示while循環(huán)的執(zhí)行過程,如圖所示。while語句使用while循環(huán)計(jì)算1-100之間所有奇數(shù)的和,代碼如下所示。odd_sum為計(jì)算結(jié)果,變量n初始值為100以內(nèi)最大奇數(shù)99,在循環(huán)體內(nèi)依次減2。在每次循環(huán)開始時(shí),會(huì)首先判斷n是否為正數(shù),如果判斷為True,執(zhí)行循環(huán)體,更新計(jì)算結(jié)果,在循環(huán)內(nèi)部變量n依次減2,直到變?yōu)?1時(shí),不再滿足while條件,循環(huán)退出。odd_sum=0n=99print('循環(huán)開始')whilen>0:odd_sum=odd_sum+nn=n-2print('循環(huán)結(jié)束')
print('1-100之間所有奇數(shù)的和為:',odd_sum)運(yùn)行結(jié)果:循環(huán)開始循環(huán)結(jié)束1-100之間所有奇數(shù)的和為:2500while語句使用while循環(huán),計(jì)算從鍵盤輸入的正整數(shù)中各位數(shù)字的和,例如,用戶輸入513,整數(shù)513中各位數(shù)字的和為9(5+1+3=9)。代碼如下所示。n=int(input('請(qǐng)輸入一個(gè)自然數(shù)'))m=ndigit_sum=0whilen>0:digit_sum+=n%10n//=10print(m,'整數(shù)中各位數(shù)字的和為:',digit_sum)變量n為用戶從鍵盤輸入的正整數(shù),在while循環(huán)中,為了依次求得整數(shù)的各數(shù)位,n的值會(huì)發(fā)生改變,因此定義變量m保存n的初始值;變量digit_sum保存整數(shù)中各位數(shù)的和。在while循環(huán)體中,n%10表示n除以10所得到的余數(shù),即,整數(shù)n的個(gè)位數(shù)字;n//10表示整數(shù)n去掉最后一位的其他數(shù)字。例如,513%10=3,513//10=51。在每一個(gè)循環(huán)中,將n%10累加到digit_sum中,再將n的值更新為n//10。最終,n的值為0,digit_sum為整數(shù)n中各位數(shù)字的和。while語句使用while循環(huán)輸出1-50以內(nèi)3的倍數(shù)、5的倍數(shù)以及3和5的公倍數(shù),代碼如下所示。n=1whilen<=50:ifn%3==0andn%5==0:print(n,'是3和5的倍數(shù)')
elifn%3==0:print(n,'是3的倍數(shù)')
elifn%5==0:print(n,'是5的倍數(shù)')
n+=1while語句當(dāng)布爾表達(dá)式一直為True時(shí),while循環(huán)體就會(huì)一直執(zhí)行,就實(shí)現(xiàn)了無限循環(huán)。下面實(shí)例中,當(dāng)用戶輸入內(nèi)容時(shí)顯示其值。whileTrue:s=input('請(qǐng)輸入內(nèi)容')
ifs:print('輸入內(nèi)容:',s)運(yùn)行結(jié)果:請(qǐng)輸入內(nèi)容woeuot輸入內(nèi)容:woeuot請(qǐng)輸入內(nèi)容ouotu輸入內(nèi)容:ouotu請(qǐng)輸入內(nèi)容wou輸入內(nèi)容:wou請(qǐng)輸入內(nèi)容uuuuo輸入內(nèi)容:uuuuo請(qǐng)輸入內(nèi)容wer輸入內(nèi)容:wer請(qǐng)輸入內(nèi)容循環(huán)嵌套在Python程序中,如果把一個(gè)循環(huán)放在另一個(gè)循環(huán)體內(nèi),就形成了循環(huán)嵌套。嵌套循環(huán)可以有多層,一般情況下,在實(shí)際開發(fā)中兩層或三層嵌套就足夠了。執(zhí)行循環(huán)嵌套時(shí),如果外層循環(huán)的循環(huán)條件為True,則開始執(zhí)行外層循環(huán)的循環(huán)體,而內(nèi)層循環(huán)被作為外層循環(huán)的循環(huán)體來執(zhí)行。當(dāng)內(nèi)層循環(huán)的循環(huán)條件為False時(shí),則跳出內(nèi)層循環(huán),結(jié)束外層循環(huán)的當(dāng)次循環(huán),開始下一次循環(huán)。循環(huán)嵌套for循環(huán)和while循環(huán)都可以作為外層循環(huán)和內(nèi)層循環(huán)。如下實(shí)例使用內(nèi)外層while循環(huán)嵌套。n=int(input('請(qǐng)輸入一個(gè)整數(shù):'))i=1whilei<=n:j=1whilej<=i:print(j,end='')j=j+1i=i+1print()運(yùn)行結(jié)果:請(qǐng)輸入一個(gè)整數(shù):71121231234123451234561234567循環(huán)嵌套使用內(nèi)外層for循環(huán)嵌套打印九九乘法表。使用外層循環(huán)變量i控制行,內(nèi)層循環(huán)變量j控制每行打印的乘法式。實(shí)例運(yùn)行結(jié)果:foriinrange(1,10):forjinrange(1,10):ifj<=i:print('%d*%d=%-2d'%(j,i,i*j),end='')print()運(yùn)行結(jié)果:1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81循環(huán)嵌套for循環(huán)也可以和while循環(huán)實(shí)現(xiàn)嵌套,代碼如下所示。實(shí)例將每個(gè)循環(huán)中變量i,j的值分別打印出來,運(yùn)行結(jié)果如下所示:foriinrange(0,5):j=0whilej<3:print("i的值為:%d,j的值為:%d"%(i,j))j+=1運(yùn)行結(jié)果:i的值為:0,j的值為:0i的值為:0,j的值為:1i的值為:0,j的值為:2i的值為:1,j的值為:0i的值為:1,j的值為:1i的值為:1,j的值為:2i的值為:2,j的值為:0i的值為:2,j的值為:1i的值為:2,j的值為:2i的值為:3,j的值為:0i的值為:3,j的值為:1i的值為:3,j的值為:2i的值為:4,j的值為:0i的值為:4,j的值為:1i的值為:4,j的值為:2break語句break語句用在for和while循環(huán)中,用于終止循環(huán)語句,常用在當(dāng)某個(gè)外部條件被觸發(fā)(一般通過if語句檢查),需要立刻從循環(huán)中退出時(shí)。如果使用在嵌套循環(huán)中,break語句只對(duì)所在的循環(huán)起作用。break語句用戶輸入數(shù)字并求和,直到輸入0退出。n為用戶輸入整數(shù),當(dāng)n的值為0時(shí),整個(gè)for循環(huán)就結(jié)束了。運(yùn)行結(jié)果如下所示。從上述實(shí)例可以看出,break語句的作用是直接跳出整個(gè)循環(huán)。input_sum=0whileTrue:n=int(input('請(qǐng)輸入一個(gè)數(shù)字'))
ifn==0:breakinput_sum+=nprint('輸入非零數(shù)字的和為:',input_sum)運(yùn)行結(jié)果:請(qǐng)輸入一個(gè)數(shù)字7請(qǐng)輸入一個(gè)數(shù)字1請(qǐng)輸入一個(gè)數(shù)字1請(qǐng)輸入一個(gè)數(shù)字1請(qǐng)輸入一個(gè)數(shù)字0輸入非零數(shù)字的和為:10continue語句continue語句也是用在for和while循環(huán)中,作用是跳過當(dāng)前循環(huán)的剩余語句,結(jié)束本次循環(huán),繼續(xù)進(jìn)行下一輪循環(huán)。continue語句輸入2個(gè)班級(jí)中每個(gè)班級(jí)3個(gè)學(xué)生的成績(jī),統(tǒng)計(jì)成績(jī)不低于80分的人數(shù)。count為成績(jī)不低于80分的人數(shù)。當(dāng)score小于80時(shí),跳出當(dāng)前循環(huán)的剩余語句,count不加1。運(yùn)行以上代碼,從鍵盤輸入成績(jī),得到如下結(jié)果。count=0foriinrange(1,3):print('請(qǐng)輸入第',i,'個(gè)班級(jí)的學(xué)生成績(jī)')
forjinrange(1,4):print('請(qǐng)輸入第',j,'個(gè)學(xué)生成績(jī)')
score=int(input())ifscore<0:print('輸入負(fù)數(shù),進(jìn)入下一個(gè)班級(jí)')
breakifscore<80:continuecount+=1print('成績(jī)不低于80分的人數(shù)為:',count)運(yùn)行結(jié)果:請(qǐng)輸入第1個(gè)班級(jí)的學(xué)生成績(jī)請(qǐng)輸入第1個(gè)學(xué)生成績(jī)90請(qǐng)輸入第2個(gè)學(xué)生成績(jī)80請(qǐng)輸入第3個(gè)學(xué)生成績(jī)-4輸入負(fù)數(shù),進(jìn)入下一個(gè)班級(jí)請(qǐng)輸入第2個(gè)班級(jí)的學(xué)生成績(jī)請(qǐng)輸入第1個(gè)學(xué)生成績(jī)92請(qǐng)輸入第2個(gè)學(xué)生成績(jī)56請(qǐng)輸入第3個(gè)學(xué)生成績(jī)87成績(jī)不低于80分的人數(shù)為:4continue語句依據(jù)用戶輸入的成績(jī)統(tǒng)計(jì)各區(qū)間的人數(shù),超出范圍內(nèi)提示重新輸入,輸入正確提示是否繼續(xù)。代碼如下所示。運(yùn)行代碼,從鍵盤輸入成績(jī),得到如下結(jié)果。a,b,c,d=0,0,0,0#初始化各個(gè)區(qū)間的人數(shù)whileTrue:score=int(input('請(qǐng)輸入成績(jī):'))
ifscore>=90andscore<=100:#區(qū)間:[90,100]
a+=1elifscore>=80andscore<90:#區(qū)間:[80,90)
b+=1elifscore>=60andscore<80:#區(qū)間:[60,80)
c+=1elifscore>=0andscore<60:#區(qū)間:[0,60)
d+=1else:print('Error,請(qǐng)重新輸入!')
continue#結(jié)束本次循環(huán),進(jìn)入下一次循環(huán),即接著重新輸入成績(jī)
inp=input('是否繼續(xù):(y/n)')ifinp=='n':break#結(jié)束并跳出循環(huán),成績(jī)錄入結(jié)束print('優(yōu)秀線{0}良好線{1}及格{2}不及格{3}'.format(a,b,c,d))運(yùn)行結(jié)果:請(qǐng)輸入成績(jī):92是否繼續(xù):(y/n)y請(qǐng)輸入成績(jī):82是否繼續(xù):(y/n)y請(qǐng)輸入成績(jī):89是否繼續(xù):(y/n)y請(qǐng)輸入成績(jī):65是否繼續(xù):(y/n)y請(qǐng)輸入成績(jī):78是否繼續(xù):(y/n)n優(yōu)秀線1良好線2及格2不及格0pass語句Python還提供了pass語句。Pass是空語句,作用是保持程序結(jié)構(gòu)的完整性。如果在需要有語句的地方不寫任何語句,解釋器會(huì)提示語法錯(cuò)誤,因此,Python提供了pass語句作為占位語句。當(dāng)i的值大于5時(shí),由于pass是空語句,程序會(huì)忽視該語句,不做任何事情。運(yùn)行結(jié)果:foriinrange(2,9):ifi<5:print(i,'小于5')
elifi>5:passelse:print(i,'等于5')運(yùn)行結(jié)果:2小于53小于54小于55等于5循環(huán)中使用else語句除了判斷語句,Python程序中的while和for循環(huán)中也可以使用else語句。循環(huán)正常退出時(shí),會(huì)執(zhí)行else語句。使用for循環(huán)輸出從99到81的遞減序列,循環(huán)結(jié)束后,執(zhí)行else代碼塊。實(shí)例運(yùn)行結(jié)果:foriinrange(99,80,-1):print(i,end='')else:print()print('elsecontent')運(yùn)行結(jié)果:99989796959493929190898887868584838281elsecontent循環(huán)中使用else語句而當(dāng)循環(huán)是由break語句中斷時(shí),else語句就不執(zhí)行,也就是說,break語句也會(huì)跳過else代碼塊。在如下實(shí)例中,查找81-99之間最大的完全平方數(shù)并輸出,找不到則輸出else代碼塊。#導(dǎo)入math模塊importmathforiinrange(99,80,-1):root=math.sqrt(i)ifroot==int(root):print(i,end='')breakelse:print()print('elsecontent')運(yùn)行結(jié)果:81上述實(shí)例中,找到了最大的完全平方數(shù)81,執(zhí)行break語句,跳出當(dāng)前for循環(huán),也跳過了else代碼塊。3-3處理系統(tǒng)異常當(dāng)Python程序出現(xiàn)某些異常狀況的時(shí)候,異常就發(fā)生了,例如列表索引越界、想要讀取的文件不存在等。上述這些情況可以使用異常來處理。當(dāng)發(fā)生Python異常的時(shí)候,會(huì)把異常的類型和異常的位置打印出來,便于程序員去處理。Python內(nèi)置了一套功能強(qiáng)大的異常處理機(jī)制,來幫助我們進(jìn)行異常處理。程序在執(zhí)行的過程中產(chǎn)生的錯(cuò)誤稱為異常。在程序設(shè)計(jì)過程中,必須考慮到程序運(yùn)行過程中可能會(huì)發(fā)生的異常,并進(jìn)行適當(dāng)?shù)奶幚?,否則程序在運(yùn)行時(shí)有可能提前終止或出現(xiàn)不可預(yù)料的行為,從而影響程序的正常使用。Python異常類Python內(nèi)置了很多異常類,它們都從基類Exception繼承而來,在exceptions模塊中定義。Python自動(dòng)將所有異常放在內(nèi)建命名空間中,所以程序不必導(dǎo)入exceptions模塊即可使用異常。Python中所有的異常必須是Exception及其子類的實(shí)例。常見異常類異常名稱描述ArithmeticError各種算術(shù)運(yùn)算錯(cuò)誤引發(fā)的異常類的基類OverflowError數(shù)值運(yùn)算超出最大限制時(shí),引發(fā)此異常ZeroDivisionError除數(shù)為0時(shí),引發(fā)此異常IndexError下標(biāo)索引超出序列邊界時(shí),引發(fā)此異常KeyError試圖訪問字典里不存在的鍵,引發(fā)此異常NameError使用一個(gè)未聲明或未被賦予對(duì)象的變量,引發(fā)此異常TypeError使用函數(shù)時(shí)傳入對(duì)象類型與要求的不符合,引發(fā)此異常ValueError傳入無效的參數(shù)時(shí),引發(fā)此異常FileNotFoundError試圖打開不存在的文件,引發(fā)此異常AttributeError試圖訪問未定義的對(duì)象屬性,引發(fā)此異常SyntaxError遇到語法錯(cuò)誤時(shí),引發(fā)此異常異常處理大多數(shù)的異常都不會(huì)被程序處理,都以錯(cuò)誤信息的形式展現(xiàn)出來。運(yùn)行如下實(shí)例:使用索引4訪問列表元素,實(shí)例運(yùn)行結(jié)果如下所示:上述信息表明,程序產(chǎn)生了IndexError異常,描述信息為索引超出邊界。程序出現(xiàn)異常,導(dǎo)致程序終止,后續(xù)代碼不會(huì)執(zhí)行。list1=['phy','che',1997,2019]print(list1[4])print('...后續(xù)代碼...')Traceback(mostrecentcalllast):File"D:/PycharmProjects/模塊二/異常.py",line2,in<module>print(list1[4])IndexError:listindexoutofrange異常處理運(yùn)行如下實(shí)例:實(shí)例運(yùn)行結(jié)果如下所示:上述實(shí)例中,從鍵盤輸入w,不能將其轉(zhuǎn)變成整數(shù),因此程序產(chǎn)生了ValueError異常。a=int(input('請(qǐng)輸入一個(gè)整數(shù)'))請(qǐng)輸入一個(gè)整數(shù)wTraceback(mostrecentcalllast):File"D:/PycharmProjects/模塊二/異常.py",line7,in<module>a=int(input('請(qǐng)輸入一個(gè)整數(shù)'))ValueError:invalidliteralforint()withbase10:'w'異常處理運(yùn)行如下實(shí)例:實(shí)例運(yùn)行結(jié)果如下所示:上述實(shí)例中,浮點(diǎn)數(shù)算數(shù)運(yùn)算的結(jié)果太大,因此程序產(chǎn)生OverflowError異常。a=86.5b=743536345print(a**b)Traceback(mostrecentcalllast):File"D:/PycharmProjects/模塊二/異常.py",line3,in<module>print(a**b)OverflowError:(34,'Resulttoolarge')異常處理為了解決上述問題,Python提供了異常處理機(jī)制:python解釋器檢測(cè)到錯(cuò)誤,觸發(fā)異常;特定的代碼專門用來捕獲這個(gè)異常;如果捕獲成功,則進(jìn)入另外一個(gè)處理分支,執(zhí)行為異常情況定
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 敏捷開發(fā)方法論2025年考試試題及答案
- 2025年軟考軟件設(shè)計(jì)師有效試題及答案匯編
- 法學(xué)概論從入門到精通的試題及答案
- 管理者的時(shí)間與精力分配計(jì)劃
- 會(huì)計(jì)軟件應(yīng)用能力提升計(jì)劃
- 積極心理與職業(yè)幸福感提升計(jì)劃
- 供應(yīng)鏈優(yōu)化計(jì)劃
- 城市交通需求管理重點(diǎn)基礎(chǔ)知識(shí)點(diǎn)
- 美術(shù)班級(jí)文化建設(shè)活動(dòng)計(jì)劃
- 2024年陜西師范大學(xué)輔導(dǎo)員考試真題
- 中國(guó)馬克思主義與當(dāng)代思考題(附答案)
- 醫(yī)療機(jī)構(gòu)發(fā)生醫(yī)療民事賠償情況以及衛(wèi)生技術(shù)人員違法違規(guī)執(zhí)業(yè)及其處理情況表
- 設(shè)計(jì)變更、工程指令、現(xiàn)場(chǎng)簽證管理辦法(修訂)
- 金屬風(fēng)管支架重量計(jì)算表
- 光伏發(fā)電項(xiàng)目并網(wǎng)調(diào)試方案
- 【總平施工】室外總平施工組織設(shè)計(jì)
- 地溝更換管線專項(xiàng)施工方案完整
- 《鵝養(yǎng)殖技術(shù)》PPT課件
- 甲醇球形儲(chǔ)罐設(shè)計(jì)
- 殯葬資格考試:殯葬服務(wù)試題及答案
- 工業(yè)機(jī)器人安全操作規(guī)范PPT課件
評(píng)論
0/150
提交評(píng)論