信息安全案例教程:技術(shù)與應(yīng)用 第2版 課件 第5章 程序的控制結(jié)構(gòu)_第1頁
信息安全案例教程:技術(shù)與應(yīng)用 第2版 課件 第5章 程序的控制結(jié)構(gòu)_第2頁
信息安全案例教程:技術(shù)與應(yīng)用 第2版 課件 第5章 程序的控制結(jié)構(gòu)_第3頁
信息安全案例教程:技術(shù)與應(yīng)用 第2版 課件 第5章 程序的控制結(jié)構(gòu)_第4頁
信息安全案例教程:技術(shù)與應(yīng)用 第2版 課件 第5章 程序的控制結(jié)構(gòu)_第5頁
已閱讀5頁,還剩55頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第5章程序的控制結(jié)構(gòu)信息學(xué)院2024引言5.1案例:標(biāo)普500行業(yè)數(shù)據(jù)分析5.2分支結(jié)構(gòu)5.3循環(huán)結(jié)構(gòu)5.4CSV文件5.5編程實(shí)踐:錯誤處理5.6本章小結(jié)5.7習(xí)題本章將深入學(xué)習(xí)分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。在此基礎(chǔ)上還將學(xué)習(xí)常用的CSV數(shù)據(jù)文件。在章首案例的指引下,通過控制程序的執(zhí)行流程完成較為復(fù)雜的數(shù)據(jù)分析和處理工作。在編程實(shí)踐中,還將學(xué)習(xí)如何通過代碼來捕獲和處理程序運(yùn)行時發(fā)生的錯誤。5.1案例:標(biāo)普500行業(yè)數(shù)據(jù)分析標(biāo)準(zhǔn)普爾500指數(shù)(S&P500Index)是一個記錄美國500家上市公司的股票指數(shù),該指數(shù)占美國股票市場市值的80%。目前標(biāo)普500指數(shù)含有505只股票,因?yàn)橛?家公司有2類股,比如Google的母公司Alphabet就有A類股和C類股。本章案例從DataHub上搜集并下載的是2014年標(biāo)普500的財務(wù)數(shù)據(jù)文件“constituents_financials.csv”,讀取其中的數(shù)據(jù)進(jìn)行行業(yè)分析,比如各行業(yè)的股票數(shù)占比和總市值占比情況。CSV(CommaSeparatedValue)是一種用來存儲數(shù)據(jù)的純文本文件格式,可以用記事本、寫字板或電子表格軟件(如MicrosoftExcel)打開。首先通過文件對話框來選擇要打開的文件,注意這里的文件類型限定為CSV文件(*.csv)。5.1案例:標(biāo)普500行業(yè)數(shù)據(jù)分析找到文件后,程序出現(xiàn)如下提示:Numberofstocks(N)orMarketCapitalization(M)(Enterforexit):輸入“N”的結(jié)果如左圖所示,輸入“M”的結(jié)果如右圖所示。5.1案例:標(biāo)普500行業(yè)數(shù)據(jù)分析無論從股票數(shù)還是總市值來看,信息技術(shù)業(yè)、金融業(yè)、非必需消費(fèi)品業(yè)、醫(yī)療健康業(yè)、工業(yè)都位居前五,其中信息技術(shù)業(yè)領(lǐng)先優(yōu)勢明顯,其次是金融業(yè)。從股票數(shù)來看,從高到低依次是非必需消費(fèi)品業(yè)(16.63%)、信息技術(shù)業(yè)(13.85%)、金融業(yè)(13.47%)、工業(yè)(13.27%)和醫(yī)療健康業(yè)(12.08%)。從總市值來看,從高到低依次是信息技術(shù)業(yè)(27.05%)、金融業(yè)(13.84%)、醫(yī)療健康業(yè)(13.05%)、非必需消費(fèi)品業(yè)(12.92%)和工業(yè)(9.70%)。5.1案例:標(biāo)普500行業(yè)數(shù)據(jù)分析之后,程序再次出現(xiàn)選擇提示,可以再次輸入“N”或“M”。如果二者都不是,出現(xiàn)“Wronginput,pleasetryagain.”的提示信息。如果用戶什么也不輸入直接回車,程序結(jié)束。這樣的程序設(shè)計(jì)可以讓用戶在一次程序運(yùn)行的過程中進(jìn)行多次輸入選擇,即使輸入錯誤也可以再次輸入,而無需每次都重新運(yùn)行一次程序。5.1案例:標(biāo)普500行業(yè)數(shù)據(jù)分析Python的分支結(jié)構(gòu)使用if語句來構(gòu)成,包括單分支語句、雙分支語句和多分支語句。第1章中已經(jīng)介紹過if-else雙分支語句,在前面的幾章中也已經(jīng)使用過更為簡單的if單分支語句,本節(jié)主要介紹if-elif-else多分支語句。5.2分支結(jié)構(gòu)多分支結(jié)構(gòu)可以用嵌套的雙分支語句來實(shí)現(xiàn),但使用多分支結(jié)構(gòu)更加簡潔、直觀。多分支語句即在else后直接跟if形成一個elif的單一分支,其語法形式如下:if<condition-1>:<case-1-statements>elif<condition-2>:<case-2-statements>…elif<condition-n>:<case-n-statements>else:<default-statements>5.2.1if-elif-else多分支語句5.2.1if-elif-else多分支語句任何能被400整除的年份都是閏年;在剩下的年份中,任何能被100整除的年份都不是閏年;在剩下的年份中,任何能被4整除的年份都是閏年;其他年份都不是閏年。【例5-1】判定某年是否為閏年根據(jù)規(guī)則采用多分支結(jié)構(gòu)判定是否為閏年,如果是閏年,isLeapYear賦值為True,如果不是則賦值為False。運(yùn)行程序,輸入“2000”,觀察結(jié)果。再次運(yùn)行程序,輸入“1800”,觀察結(jié)果。第三次運(yùn)行程序,輸入“1840”,,觀察結(jié)果。最后一次運(yùn)行程序,輸入你的出生年份,觀察結(jié)果?!纠?-1】判定某年是否為閏年P(guān)ython中的條件表達(dá)式允許你在一行語句中根據(jù)不同的條件來進(jìn)行不同的賦值,其語法形式如下:XifCelseY先執(zhí)行中間的ifC,如果值為True,就將左邊的X作為結(jié)果返回,否則將右邊的Y作為結(jié)果返回。比如:c=aifa>belseb如果a大于b,條件表達(dá)式的結(jié)果為a,否則為b,然后將結(jié)果賦值給c,即c總是a和b中的最大值。用雙分支結(jié)構(gòu)為:ifa>b:

c=aelse:

c=b5.2.2條件表達(dá)式一年分為十二星座,分別是魔羯座(12/22~01/19)、水瓶座(01/20~02/18)、雙魚座(02/19~03/20)、白羊座(03/21~04/19)、金牛座(04/20~05/20)、雙子座(05/21~06/20)、巨蟹座(06/21~07/22)、獅子座(07/23~08/22)、處女座(08/23~09/22)、天秤座(09/23~10/22)、天蝎座(10/23~11/21)、射手座(11/22~12/21)。【例5-2】查詢出生日期的星座由用戶輸入兩位的月份和兩位的日期,用“/”分隔,然后調(diào)用split()方法對輸入的字符串進(jìn)行分割,分別賦值給mm和dd,并將dd轉(zhuǎn)換為整數(shù)。采用多分支結(jié)構(gòu)判斷mm的值,由于一個月內(nèi)前后有兩種不同的星座,采用條件表達(dá)式來判斷dd在哪一個日期范圍并將相應(yīng)的星座賦值給const,如果月份有誤,const賦值為空串。采用條件表達(dá)式來判斷輸入是否有效,如果有效輸出星座查詢結(jié)果,否則提示輸入錯誤。5.3循環(huán)結(jié)構(gòu)第1章中已經(jīng)介紹過for語句,本節(jié)主要介紹while語句。和分支結(jié)構(gòu)一樣,循環(huán)結(jié)構(gòu)也可以嵌套,嵌套循環(huán)比較復(fù)雜,要特別注意程序執(zhí)行的流程。5.3.1while語句for循環(huán)在循環(huán)開始的時候迭代次數(shù)就已經(jīng)確定了,到達(dá)迭代次數(shù)后,循環(huán)就終止了。如果我們在循環(huán)開始的時候無法確定迭代的次數(shù),就需要用到while語句。while循環(huán)也稱為條件循環(huán),其語法形式如下:while<condition>:<statements><condition>為條件表達(dá)式,其值為布爾型,即True或False。只要條件表達(dá)式的值為True,while下的語句塊(循環(huán)體)就會不斷被循環(huán)執(zhí)行;如果想要終止循環(huán),就要想辦法使條件表達(dá)式的值變?yōu)镕alse。死循環(huán)(infiniteloop)while語句功能強(qiáng)大,for語句的功能都可以用while語句實(shí)現(xiàn),反之則不然。我們來看一個簡單的例子,循環(huán)輸出0-9的數(shù)字。用for語句實(shí)現(xiàn)的代碼如下:foriinrange(10):print(i)其中i是循環(huán)變量,會自動遍歷range(10)中的所有值,在遍歷結(jié)束后循環(huán)即終止。死循環(huán)(infiniteloop)而在while結(jié)構(gòu)中并沒有循環(huán)變量,也不會自動終止,需要自行定義并賦值,通過條件來控制循環(huán)是否繼續(xù)執(zhí)行。用while語句實(shí)現(xiàn)的代碼如下:i=0whilei<10:print(i)

i+=1如果忘記在循環(huán)體中對i的值進(jìn)行累加,程序執(zhí)行結(jié)果會怎樣?不斷被執(zhí)行、停不下來的循環(huán)被稱為死循環(huán)。程序執(zhí)行發(fā)生死循環(huán)時,可以在IDLE解釋器中通過快捷鍵“Ctrl+C”或者Shell菜單下的“InterruptExecution”來強(qiáng)行終止程序運(yùn)行。試一試交互式循環(huán)(interactiveloop)交互式循環(huán)是while語句常用的一種循環(huán)模式,在每一次循環(huán)迭代中由用戶輸入數(shù)據(jù),程序進(jìn)行數(shù)據(jù)處理,然后詢問用戶是否還要繼續(xù)輸入數(shù)據(jù)。moredata=Truewhilemoredata:#getdataitemfromuser#processdataitem#askuserifthereismoredata其中布爾變量moredata表示是否還要繼續(xù)輸入數(shù)據(jù),初值為True,在用戶沒有更多數(shù)據(jù)需要輸入時,將其賦值為False,循環(huán)終止。平均績點(diǎn)=∑(課程學(xué)分×課程績點(diǎn))÷∑課程學(xué)分課程績點(diǎn)的計(jì)算方法不同高校各有不同,這里采用如下方法:4.5(95~100)、4.0(90~94)、3.5(85~89)、3.0(80~84)、2.5(75~79)、2.0(70~74)、1.5(65~69)、1.0(60~64)、0(60以下)?!纠?-3】計(jì)算平均績點(diǎn)(GPA)為了計(jì)算平均績點(diǎn),定義了三個累加變量totalCourses、totalCredits和totalGradePoints,賦初值為0。通過while循環(huán)來不斷獲取用戶輸入的課程學(xué)分和課程成績。【例5-3】計(jì)算平均績點(diǎn)(GPA)在用戶每次循環(huán)迭代后,詢問用戶是否還有更多課程要輸入,如果用戶輸入“N”或者“n”,則將more賦值為False,循環(huán)條件不再滿足,退出循環(huán)。為了用戶輸入方便,如果需要繼續(xù)輸入,直接回車即可,或者輸入其他任意字符。運(yùn)行程序,輸入第一門課(學(xué)分2、成績94),程序問“Morecourses?(Y/N)”,直接輸入回車?yán)^續(xù)輸入第二門課(學(xué)分3,成績88),程序再問“Morecourses?(Y/N)”,輸入“n”,循環(huán)結(jié)束,輸出“2courses;5credits;GPAis3.70.”。再次運(yùn)行程序,輸入截止目前你所有課程的學(xué)分和成績,看看你的平均績點(diǎn)是多少??!纠?-3】計(jì)算平均績點(diǎn)(GPA)標(biāo)記控制循環(huán)一直處理數(shù)據(jù)直到數(shù)據(jù)達(dá)到一個標(biāo)記循環(huán)結(jié)束的特殊值,這個特殊值(標(biāo)記)可以是任意值,但要和要處理的數(shù)據(jù)值有所區(qū)別。其一般形式為:#getthefirstdataitem#whileitemisnotthesentinel:#processtheitem#getthenextdataitem循環(huán)開始之前讀取第一個數(shù)據(jù)項(xiàng),如果這個數(shù)據(jù)項(xiàng)的值就是標(biāo)記,循環(huán)不會被執(zhí)行,數(shù)據(jù)也不會被處理。標(biāo)記控制循環(huán)(sentinelloop)如果第一個數(shù)據(jù)項(xiàng)不是標(biāo)記,循環(huán)被執(zhí)行,數(shù)據(jù)被處理,并獲取下一個數(shù)據(jù)項(xiàng),如此循環(huán)迭代,直到被輸入的數(shù)據(jù)項(xiàng)是標(biāo)記,循環(huán)結(jié)束。一個典型的標(biāo)記是空字符串,如果用戶什么也沒輸入而是直接按下回車鍵,input函數(shù)返回的就是空串,以此作為標(biāo)記來結(jié)束循環(huán),既方便用戶,也不會和要處理的數(shù)據(jù)混淆。本章案例中用戶可以循環(huán)選擇查看行業(yè)的股票只數(shù)占比情況或是市值占比情況,變量choice用來接收用戶的選擇,“N”表示股票只數(shù),“M”表示市值,如果用戶想終止循環(huán)退出程序,可以直接回車。標(biāo)記控制循環(huán)(sentinelloop)importmatplotlib.pyplotasplt#數(shù)據(jù)可視化工具#繪制餅圖,根據(jù)用戶選擇顯示市值占比或股票只數(shù)占比choice

=input("Numberofstocks(N)orMarketCapitalization(M)(Enterforexit):")whilechoice:ifchoice.upper()=='N':plt.pie(num,labels=sector,autopct='%5.2f%%')plt.title("Numberofstocks",fontsize=16)plt.show()elifchoice.upper()=='M':plt.pie(market_cap,labels=sector,autopct='%5.2f%%')plt.title("MarketCapitalization",fontsize=16)plt.show()else:print("Wronginput,pleasetryagain.")choice=input("Numberofstocks(N)orMarketCapitalization(M)(Enterforexit)")標(biāo)記控制循環(huán)(sentinelloop)注意:接收用戶的輸入語句出現(xiàn)了兩次,第一次在循環(huán)之前,第二次在循環(huán)體內(nèi)的最后。我們在第3章中已經(jīng)學(xué)習(xí)了如何利用matplotlib庫中的pyplot包繪制散點(diǎn)圖和折線圖,本章案例調(diào)用pyplot包的pie()方法來繪制餅圖。變量num和market_cap分別是存放行業(yè)的股票總數(shù)和總市值的列表,作為繪制餅圖的主要數(shù)據(jù)源,列表中的每個元素對應(yīng)餅圖中的一個扇形;labels參數(shù)是各個扇形的標(biāo)簽,這里就是存放行業(yè)數(shù)據(jù)的變量sector;autopct參數(shù)設(shè)置餅圖內(nèi)各個扇形百分比的顯示格式,“%d%%”是整數(shù)百分比,“%0.2f%%”是兩位小數(shù)百分比。標(biāo)記控制循環(huán)(sentinelloop)第3章中(3.3和3.4)介紹過break語句可以用來跳出for循環(huán),對于while循環(huán)也適用。如上的標(biāo)記控制循環(huán)使用break語句可以采用如下形式:whileTrue:#getdataitem#ifdataitemisthesentinel:break#processdataitemwhileTrue是一個死循環(huán),但我們可以在循環(huán)體中加入條件判斷,當(dāng)某個條件滿足時,就退出循環(huán),從而避免死循環(huán)的發(fā)生。使用break語句退出循環(huán)后,循環(huán)體中后面的語句就不會被執(zhí)行,因此無需使用else語句。半途退出循環(huán)(loopandahalf)下面我們對【例5-1】進(jìn)行修改,使得程序循環(huán)運(yùn)行,可以判定多個年份是否為閏年,直到用戶輸入“-1”為止:whileTrue:

year=int(input("Year(-1forexit):"))ifyear==-1:breakifyear%400==0:

isLeapYear=Trueelifyear%100==0:

isLeapYear=Falseelifyear%4==0:

isLeapYear=Trueelse:

isLeapYear=FalseifisLeapYear:print(year,"isaleapyear.")else:print(year,"isnotaleapyear.")半途退出循環(huán)(loopandahalf)5.3.2嵌套循環(huán)在嵌套循環(huán)中,內(nèi)層循環(huán)出現(xiàn)在外層循環(huán)的循環(huán)體中,外層循環(huán)的每一次迭代,都包含內(nèi)部循環(huán)的全部迭代。設(shè)計(jì)嵌套循環(huán)的最好方法是:先設(shè)計(jì)好外層循環(huán)而不去考慮內(nèi)層細(xì)節(jié),再去設(shè)計(jì)內(nèi)層循環(huán)不用考慮外層細(xì)節(jié)。凱撒密碼(Caesarcipher)是一種位移替換密碼,將某個明文字母做N位偏移得到密文,位數(shù)N就是凱撒密碼加密和解密的密鑰。比如,位數(shù)為3時,A變成D、B變成E、C變成F、……、X變成A、Y變成B、Z變成C。大寫和小寫字母都可以加密,非字母字符不變?!纠?-4】凱撒密碼外層是一個while死循環(huán),循環(huán)體內(nèi)有一個退出條件,即輸入信息(變量orig)為空串時?!纠?-4】凱撒密碼通過內(nèi)層for循環(huán)對于輸入信息的每一個字符(變量ch)進(jìn)行處理。變量pos是字符相對于“A”或“a”的位置,首先從字母轉(zhuǎn)換成相應(yīng)的ASCII值,由于是循環(huán)位移,加上位移數(shù)后還需要對26求余,得到新的ASCII值后再轉(zhuǎn)換成字符?!纠?-4】凱撒密碼5.4CSV文件本節(jié)介紹常用的數(shù)據(jù)文件之一:CSV文件。CSV(CommaSeparatedValue)是具有特殊格式的純文本文件,通常用來存儲表格數(shù)據(jù)。5.4.1CSV格式CSV文件由多行組成,表示表格數(shù)據(jù)中的記錄。每條記錄則由多個字段組成,字段間的分隔符最常見的是逗號或制表符,通常所有記錄都有完全相同的字段序列。CSV文件可以使用Windows附件中的記事本或?qū)懽职宕蜷_,也可以使用Office中的Excel應(yīng)用程序通過簡單的轉(zhuǎn)換后打開。5.4.1CSV格式5.4.2CSV庫Python提供了csv標(biāo)準(zhǔn)庫對CSV格式的文件進(jìn)行讀取和寫入,引入它之后就可以調(diào)用其中的函數(shù)進(jìn)行操作。函數(shù)功能reader(f)讀取文件對象f,返回一個迭代器對象,可以用來遍歷文件中的每一行數(shù)據(jù)writer(f)寫入文件對象f,返回一個csv編碼器對象,調(diào)用其方法可以將數(shù)據(jù)寫入文件,其中writerow()方法寫入一行,writerows()方法寫入多行【例5-5】輸入課程數(shù)據(jù)存入文件變量course是存放課程學(xué)分和成績的元組,courses是存放所有course的列表。以追加的形式打開文件“credit_score.csv”。由于CSV文件中行與行之間本身就有換行符,使用默認(rèn)值會出現(xiàn)空行,因此將newline參數(shù)賦值為空串。調(diào)用csv庫的writer()函數(shù),返回csv編碼器對象賦值給變量csvWriter,調(diào)用該對象的writerows()方法將所有的課程數(shù)據(jù)寫入文件。運(yùn)行程序,輸入第一門課(學(xué)分2、成績94),程序問“Morecourses?(Y/N)”,直接輸入回車?yán)^續(xù)輸入第二門課(學(xué)分3,成績88),程序再問“Morecourses?(Y/N)”,輸入“n”,循環(huán)結(jié)束,輸入的課程數(shù)據(jù)被保存至文件“credit_score.csv”。再次運(yùn)行程序,添加更多課程數(shù)據(jù)至該文件?!纠?-5】輸入課程數(shù)據(jù)存入文件【例5-6】讀取課程數(shù)據(jù)并計(jì)算GPA調(diào)用csv庫的reader()函數(shù),返回迭代器對象并轉(zhuǎn)換成列表賦值給變量courses。使用for循環(huán)遍歷courses中的每一門課,每一門課包含兩個元素,第一個是學(xué)分,第二個是成績,轉(zhuǎn)換成整型后分別賦值給變量credit和score。運(yùn)行程序,假設(shè)文件中包含之前輸入的兩門課程,則輸出“2courses;5credits;GPAis3.70.”。5.4.2CSV庫本章案例要從文件“constituents_financials.csv”中讀取標(biāo)普500的財務(wù)數(shù)據(jù),并進(jìn)行行業(yè)數(shù)據(jù)分析。從文件中讀取數(shù)據(jù)的代碼如下:importcsvf=open("constituents_financials.csv",'r')sp500=list(csv.reader(f))#轉(zhuǎn)換成列表,每個元素即一行f.close()5.4.2CSV庫CSV文件中還包括標(biāo)題行。標(biāo)題行和數(shù)據(jù)行不同,因此分開進(jìn)行處理,代碼如下:title=sp500[0]#第一行是標(biāo)題sector_ind=title.index('Sector')#獲得行業(yè)的下標(biāo)market_ind=title.index('MarketCap')#獲得市值的下標(biāo)sp500=sp500[1:]5.4.2CSV庫接下來從數(shù)據(jù)記錄中找出所有行業(yè),代碼如下:sector=set()#行業(yè)的集合foreachinsp500:

sector.add(each[sector_ind])sector=tuple(sector)#轉(zhuǎn)換成元組sector為集合類型,重復(fù)的行業(yè)不會被添加進(jìn)去。sector_ind是之前找出的“Sector”字段的下標(biāo)。為后續(xù)數(shù)據(jù)處理方便,將變量sector轉(zhuǎn)換為元組。5.4.2CSV庫接下來就是最重要的行業(yè)數(shù)據(jù)分析,得到所有行業(yè)的股票總數(shù)和總市值,代碼如下:num,market_cap=[],[]#股票總數(shù)和總市值的列表forsecinsector:#對每個行業(yè)循環(huán)

num_sec=0#每個行業(yè)的股票總數(shù)

market_cap_sec=0#每個行業(yè)的總市值foreachinsp500:#對每只股票循環(huán)ifeach[sector_ind]==sec:

num_sec+=1

market_cap_sec+=int(each[market_ind])

num.append(num_sec)

market_cap.append(market_cap_sec)5.4.2CSV庫變量num是存放所有行業(yè)股票數(shù)的列表,變量market_cap是存放所有行業(yè)總市值的列表。外循環(huán)遍歷sector中的每一個行業(yè),累加變量num_sec和market_cap_sec分別用來統(tǒng)計(jì)該行業(yè)的股票數(shù)和總市值,統(tǒng)計(jì)好后添加至相應(yīng)的列表num和market_cap。內(nèi)循環(huán)則是對某一個行業(yè)sec進(jìn)行統(tǒng)計(jì)的過程,遍歷sp500中的每一只股票,如果屬于sec這個行業(yè),則對num_sec和market_cap_sec進(jìn)行累加。由于CSV文件是純文本文件,讀取出來的數(shù)據(jù)要進(jìn)行數(shù)值運(yùn)算,需要轉(zhuǎn)換成數(shù)值類型。至此,本章案例除錯誤處理部分已完成,將程序文件保存為ch05.py,將數(shù)據(jù)文件“constituents_financials.csv”與程序文件保存至同一路徑下,運(yùn)行程序,如有錯誤則進(jìn)行修正。試一試5.5編程實(shí)踐:錯誤處理程序設(shè)計(jì)語言提供的錯誤處理機(jī)制使得程序員可以通過代碼來捕獲和處理程序運(yùn)行時的錯誤,而不是運(yùn)行時一發(fā)生錯誤程序就崩潰,出現(xiàn)一段“Traceback”的錯誤提示。錯誤處理機(jī)制保證即使程序運(yùn)行出現(xiàn)錯誤,程序的控制權(quán)還掌握在程序員手中。5.5編程實(shí)踐:錯誤處理Python中的錯誤處理是通過一種特殊的控制結(jié)構(gòu)(try-except)來完成的,這種結(jié)構(gòu)類似于分支結(jié)構(gòu),其語法形式如下:try:<statements>except<error-1>:<error-1statements>…except<error-n>:<error-nstatements>5.5編程實(shí)踐:錯誤處理Python遇到try語句時,就會嘗試執(zhí)行其中的語句塊,如果執(zhí)行過程中沒有發(fā)生錯誤,執(zhí)行結(jié)束后程序就會轉(zhuǎn)移到try-except結(jié)構(gòu)之后的語句開始執(zhí)行。如果發(fā)生了錯誤,Python就會去查找與錯誤類型匹配的except子句,并執(zhí)行其中的語句塊進(jìn)行錯誤處理,try語句塊中的剩余語句不會被執(zhí)行。如果找不到對應(yīng)錯誤類型的except字句,程序仍然會崩潰并出現(xiàn)“Traceback”的錯誤提示。在【例5-1】中,如果程序運(yùn)行時,用戶沒有輸入正確的年份,而是輸入“abcd”,那么在將用戶的輸入轉(zhuǎn)換成數(shù)值型進(jìn)行運(yùn)算時就會發(fā)生“ValueError”。【例5-7】給例1加入循環(huán)和錯誤處理【例5-7】給例1加入循環(huán)和錯誤處理最外層加入while循環(huán),將可能出錯的語句放在try語句塊中,加入捕獲值錯誤的except子句。如果用戶輸入不正確,執(zhí)行到第3行語句時出錯,程序轉(zhuǎn)向except子句并執(zhí)行其中的語句塊,即提示用戶輸入正確的年份,然后開始下一次循環(huán)迭代。【例5-7】給

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論