Python核心編程與應(yīng)用 課件 【ch09】應(yīng)用開發(fā)_第1頁
Python核心編程與應(yīng)用 課件 【ch09】應(yīng)用開發(fā)_第2頁
Python核心編程與應(yīng)用 課件 【ch09】應(yīng)用開發(fā)_第3頁
Python核心編程與應(yīng)用 課件 【ch09】應(yīng)用開發(fā)_第4頁
Python核心編程與應(yīng)用 課件 【ch09】應(yīng)用開發(fā)_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Python核心編程與應(yīng)用應(yīng)用開發(fā)第九章新工科·數(shù)據(jù)科學(xué)與大數(shù)據(jù)系列01Turtle圖像繪制Turtle圖像繪制01畫布畫布就是Turtle為我們展開用于繪圖的區(qū)域(如圖9-1所示)。用戶可以設(shè)置其大小和初始位置。turtle.screensize(canvwidth=None,canvheight=None,bg=None)其參數(shù)分別為畫布的寬、高(單位為像素)背景顏色。畫布存在于窗體中,用setup()函數(shù)設(shè)置窗體的初始位置和大小。turtle.setup(width=0.5,height=0.7,startx=None,starty=None)width、height:輸入整數(shù),表示像素;輸入浮點(diǎn)數(shù),則表示占據(jù)屏幕的比例。(startx,starty):表示矩形窗口左上角頂點(diǎn)的位置,若為空,則窗口位于屏幕中心。Turtle圖像繪制01畫筆畫筆有很多屬性,如畫筆的粗細(xì)、顏色、畫筆移動速度。turtle.pensize():設(shè)置畫筆的粗細(xì)。turtle.pencolor():沒有參數(shù)傳入時(shí),返回當(dāng)前畫筆的顏色,傳入?yún)?shù)即設(shè)置畫筆顏色。turtlespeed(speed):設(shè)置畫筆移動速度,畫筆繪制的速度范圍[0,10]整數(shù),數(shù)字越大越快但取值0時(shí)是特例,表示最快。Turtle圖像繪制01畫筆畫筆運(yùn)動命令如表9-1所示。畫筆控制命令如表9-2所示。畫筆全局控制命令如表9-3所示。Turtle圖像繪制01畫筆02Excel文件讀寫Excel文件讀寫02Python在自動化辦公領(lǐng)域越來越受歡迎,自動化辦公涉及Excel、Word、郵件、文件處理、數(shù)據(jù)分析處理等。其中,Excel因出色的計(jì)算功能和圖表工具成為了流行的數(shù)據(jù)處理軟件。我們經(jīng)常遇到批量數(shù)據(jù)的操作,如采集的大量的商品信息需要寫入Excel文件,或從Excel中讀取數(shù)據(jù)進(jìn)行各種統(tǒng)計(jì)和格式處理。針對這樣的問題,若用手工方法一條一條地添加數(shù)據(jù)則效率太低。如果Python能自動將數(shù)據(jù)寫入Excel文件并進(jìn)行數(shù)據(jù)處理,就可以大大提高工作效率。Python針對Excel有很多第三方庫可用,如xlwings、xlsxwriter、xlrd、xlwt、xsxwriter.xlutils等。本節(jié)介紹使用xrd模塊讀取XLS或XLSX文件使用xlt模塊生成XLS文件使用前必須安裝這兩個(gè)庫:pipinstallxlwtpipinstallxIrdExcel文件讀寫02【例9-9】簡單的處理Excel文件的例子。importxlwt#創(chuàng)建一個(gè)workbook并設(shè)置編碼workbook=xwt.Workbook(encoding='UTF-8)#創(chuàng)建一個(gè)worksheetworksheet=workbookaddsheet(MyWorksheet')#寫入Excel文件#worksheet.write方法的參數(shù)對應(yīng)行、列、值worksheet.write(1,0,label=thisistest')#保存,格式必須為.xlsworkbooksave(ExcelWorkbook.xls')運(yùn)行程序后,打開文件ExcelWorkbook.xls,內(nèi)容如圖9-7所示。Excel文件讀寫02Excel文件讀寫02【例9-10】Excel文件的格式設(shè)置。workbook=xlwt.Workbook(encoding=UTF-8')worksheet=workbook.add_sheet('MyWorksheet')font=xlwt,Font()

#設(shè)置字體對象font='TimesNewRoman'

#設(shè)置屬性font.bold=Truefont.underline=Truefont.italic=TrueExcel文件讀寫02style=xlwt,XFStyle()

#設(shè)置樣式對象stylestyle.font=font

#將設(shè)置好的font屬性寫入樣式worksheet.write(0,0'Unformattedvalue')

#寫入0行0列單元格worksheet.write(1,0,'Formattedvalue',style)

#1行0列單元格,增加了樣式workbook.save(ExcelWorkbook.xls')運(yùn)行程序后,打開文件ExcelWorkbook.xls,內(nèi)容如圖9-8所示。03異常處理異常處理03異常的處理方式(1)防御式編碼。在處理數(shù)據(jù)前,程序員用代碼檢查數(shù)據(jù)的有效性或合法性。(2)異常處理另一種思路是,在程序運(yùn)行中等待執(zhí)行錯(cuò)誤,一旦出錯(cuò),捕獲錯(cuò)誤,轉(zhuǎn)入錯(cuò)誤處理,如果沒有錯(cuò)誤,那么程序繼續(xù)正常穩(wěn)定地往下執(zhí)行。所以,異常處理需要系統(tǒng)監(jiān)聽所有代碼,以備隨時(shí)應(yīng)對,這會造成一定程度上資源的浪費(fèi)異常處理03內(nèi)置異常類結(jié)構(gòu)層次內(nèi)置異常類結(jié)構(gòu)層次如下:BaseException

#所有異常的基類SystemExit

#解釋器請求退出(強(qiáng)制)KeyboardInterrupt

#用戶中斷執(zhí)行(通常是輸入^C)GeneratorExit

#生成器(generator)發(fā)生異常通知退出Exception

#常規(guī)異常的基類(最常用的異常處理類)StopIteration

#迭代器沒有更多的值A(chǔ)rithmeticError

#各種算術(shù)錯(cuò)誤引發(fā)的內(nèi)置異常的基類······異常處理03拋出異常:raise在編程中,通常在ty中主動拋出異常,然后由except捕獲處理,用于程序的業(yè)務(wù)邏輯出錯(cuò)時(shí)中斷程序的執(zhí)行?!纠?-20】拋出異常。classAgeRangeException(Exception):

#自定義異常類def__init__(self,age):self.age=ageinp=input('請輸入你的年齡:')try:age=int(inp)ifage<=@orage>=200:#raise:程序員手動寫入一個(gè)錯(cuò)誤raiseAgeRangeException("年齡范圍不正確!")異常處理03拋出異常:raiseexceptAgeRangeExceptionasexp:

#年齡異常錯(cuò)誤print(exp)exceptExceptionasexp:

#所有其他的異常在此捕獲print(exp)else:print(成功執(zhí)行完成!')finally:print(程序結(jié)束)運(yùn)行結(jié)果:請輸入你的年齡:230年齡范圍不正確!程序結(jié)束當(dāng)輸入年齡為230歲時(shí),主動拋出異常,觸發(fā)自定義異常類AgeRangeException,捕獲異常,給出提示“年齡范圍不正確!”。04軟件測試概述軟件測試概述04軟件運(yùn)行過程中會有各種各樣的異常,需要編程捕獲并加以處理,這些都在程序員的控制下,但是軟件中還有很多隱藏的錯(cuò)誤,甚至軟件發(fā)布后也沒有被發(fā)現(xiàn),所以才會有各種各樣的軟件補(bǔ)丁。這在軟件發(fā)布中成為了常態(tài),也催生了軟件業(yè)的另外一個(gè)分支——軟件測試。隨著軟件行業(yè)的發(fā)展,軟件測試越來越重要。Bi1Gates說,很多人認(rèn)為微軟是一家軟件開發(fā)公司而事實(shí)上我們是一家軟件測試公司,在最后產(chǎn)品發(fā)布的時(shí)候,此產(chǎn)品的所有相關(guān)部門都必須簽字,而測試人員擁有絕對的否決權(quán)。軟件測試概述04軟件測試是伴隨著軟件的產(chǎn)生而產(chǎn)生的。早期軟件的規(guī)模很小、復(fù)雜程度低,軟件開發(fā)過程無序、隨意,測試的含義比較狹窄,開發(fā)人員將測試等同于“調(diào)試”,目的是糾正軟件中已經(jīng)知道的故障,通常由開發(fā)人員自己完成這部分的工作。當(dāng)時(shí)對測試的投入極少,測試介入也晚,常常是等到產(chǎn)品已經(jīng)基本完成時(shí)才進(jìn)行測試。到了20世紀(jì)80年代初期,軟件和IT行業(yè)開始進(jìn)入了大發(fā)展時(shí)期,軟件趨向大型化、高復(fù)雜度,軟件的質(zhì)量越來越重要。這時(shí),一些軟件測試的基礎(chǔ)理論和實(shí)用技術(shù)開始形成,并且人們?yōu)檐浖_發(fā)設(shè)計(jì)了各種流程和管理方法,軟件開發(fā)的方式逐漸由混亂無序的開發(fā)過程過渡到結(jié)構(gòu)化的開發(fā)過程,以結(jié)構(gòu)化分析與設(shè)計(jì)、結(jié)構(gòu)化評審、結(jié)構(gòu)化程序設(shè)計(jì)、結(jié)構(gòu)化測試為特征。人們還將“質(zhì)量”的概念融入其中,軟件測試定義發(fā)生了改變,測試不但是一個(gè)發(fā)現(xiàn)錯(cuò)誤的過程,而且將測試作為軟件質(zhì)量保證SQA)的主要職能,并包含軟件質(zhì)量評價(jià)。BilHetzel在《軟件測試完全指南》(CompleteGuideofSoftwareTesting)一書中指出:“測試是以評價(jià)一個(gè)程序或者系統(tǒng)屬性為目標(biāo)的任何一種活動測試是對軟件質(zhì)量的度量?!避浖y試概述04現(xiàn)在,軟件測試已有了行業(yè)標(biāo)準(zhǔn)IEEE/ANSI。1983年,IEEE提出的軟件工程術(shù)語中給軟件測試下的定義是:“使用人工或自動的手段來運(yùn)行或測定某個(gè)軟件系統(tǒng)的過程,其目的在于檢驗(yàn)它是否滿足規(guī)定的需求或弄清預(yù)期結(jié)果與實(shí)際結(jié)果之間的差別。”這個(gè)定義明確指出,軟件測試的目的是檢驗(yàn)軟件系統(tǒng)是否滿足需求,它再也不是一次性的且只是開發(fā)后期的活動,而是與整個(gè)開發(fā)流程融為一體。軟件測試已成為一個(gè)專業(yè),需要運(yùn)用專門的方法和手段,需要專門人才和專家來承擔(dān)。05單元測試和文檔測試單元測試和文檔測試05斷言如斷言1+1大于2,可以寫成:assert1+1>2。然后在代碼中判斷這個(gè)假設(shè)是否成立,若不成立,就捕捉異常,中斷代碼的正常執(zhí)行。斷言可以看作異常處理的一種高級形式。斷言通常作為程序排錯(cuò)的一種方式,用于判斷程序出現(xiàn)錯(cuò)誤的大致位置。例如,插入一個(gè)斷言,如果斷言未通過,就可以判斷程序錯(cuò)誤發(fā)生在斷言這一行之前的代碼中。斷言表示為一些布爾表達(dá)式,程序員相信在程序中的某個(gè)特定點(diǎn)該表達(dá)式值為真。例如,相信一個(gè)函數(shù)或?qū)ο蟮哪撤椒óa(chǎn)生的結(jié)果應(yīng)是期望的那個(gè)結(jié)果,但具體的結(jié)果是否如愿用斷言測試。程序員可以在任何時(shí)候啟用和禁用斷言驗(yàn)證,通常在測試時(shí)啟用斷言,而在部署時(shí)禁用斷言。同樣,程序投入運(yùn)行后,最終用戶在遇到問題時(shí)可以重新啟用斷言。單元測試和文檔測試05文檔測試在Python的官方文檔中,我們通常可以看到對函數(shù)的文檔描述,其中有很多示例代碼?!纠?-23】測試文檔。deftest(x):""">>>test(2)'even'>>>test(1)'odd':paramx::return:"""單元測試和文檔測試05文檔測試if

x

%

2==0:return'even'else:return

'odd'程序中用"““引起來的部分是測試用例,明確告訴函數(shù)的調(diào)用者該函數(shù)的期望輸入和輸出。可以用人工方法在Python交互模式下測試運(yùn)行,如:>>>test(2)看結(jié)果是否為“even”。Python內(nèi)置的“文檔測試”(doctest)模塊可以直接提取注釋中的代碼并自動執(zhí)行測試doctest嚴(yán)格按照Python交互式命令行的輸入和輸出來判斷測試結(jié)果是否正確,只有測試異常,才會有大段的錯(cuò)誤信息輸出。單元測試和文檔測試05單元測試單元測試就是開發(fā)者編寫一小段代碼,檢驗(yàn)?zāi)繕?biāo)代碼的功能是否符合預(yù)期。通常情況下,單元測試主要面向一些功能單一的模塊進(jìn)行。例如,一臺計(jì)算機(jī)由許多零部件組成,在正式組裝前,這些零部件,如CPU、內(nèi)存、電池、攝像頭等,都要進(jìn)行測試,這就是單元測試。常用的單元測試模塊有unittest和pytest,前者是標(biāo)準(zhǔn)庫,后者為第三方庫。(1)unittest模塊創(chuàng)建測試的流程如下:新建單元測試腳本,導(dǎo)入單元測試,繼承單元測試類,實(shí)現(xiàn)單元測試方法,編寫單元測試。單元測試和文檔測試05單元測試(2)pytest模塊pytest模塊是第三方庫,提供了更簡單的測試方法。pytest單元測試框架中并沒提供特殊的斷言方法,而是直接使用Python的assert進(jìn)行斷言。首先安裝pytest模塊(pipinstallpytest)和pytest-html模塊(pipinstallpytest-html,用于將測試結(jié)果生成為web網(wǎng)頁)。驗(yàn)證安裝版本:pytest--version編寫測試版本的步驟:測試文件以“test”開頭(test結(jié)尾也可以);測試類以“Test”開頭,并且不能帶有init方法;測試函數(shù)以“test_”開頭;斷言使用基本的assert語句即可。06用Smtplib模塊發(fā)送郵件用Smtplib模塊發(fā)送郵件06Smtplib模庫發(fā)送郵件的準(zhǔn)備工作①準(zhǔn)備發(fā)送郵件的必要信息,如接收方郵箱地址、郵件的發(fā)送方式。②由于郵件發(fā)送是由郵件服務(wù)器完成的,因此需要準(zhǔn)備本人真實(shí)的郵件賬號、密碼。這里采用163郵箱為例發(fā)送郵件,設(shè)用戶名為tedulivevideo@163.com,密碼為tedu@2019。③163的SMTP服務(wù)器地址為smtp.163com端號為465(其他常用的郵箱可以在運(yùn)行商網(wǎng)站上查詢)。④準(zhǔn)備郵件的內(nèi)容,如標(biāo)題、郵件正文、落款簽名等。用Smtplib模塊發(fā)送郵件06發(fā)送郵件的步驟Web上發(fā)送郵件的基本流程為:連接網(wǎng)易的SMTP服務(wù)器,開啟安全協(xié)議并登錄,發(fā)送郵件,結(jié)束。Python發(fā)送郵件的步驟同樣需要這些過程,具體來說:①發(fā)送自己的郵箱地址、密碼給服務(wù)器,服務(wù)器認(rèn)證通過后才能發(fā)送郵件②創(chuàng)建郵件對象,設(shè)置收件人、發(fā)件人、標(biāo)題、正文、抄送或密送等信息。③發(fā)送郵件,結(jié)束。用Smtplib模塊發(fā)送郵件06發(fā)送郵件的步驟【例9-27】用Smtplib模塊發(fā)送郵件。importsmtplibfromemail.messageimportEmailMessage#設(shè)置SMTP服務(wù)器信息smtp_server=""#設(shè)置發(fā)件人郵箱地址及密碼fromaddr="tedulivevideo@163.com"password="tedu@2019"#設(shè)置收件人郵箱地址列表,可以同時(shí)給多個(gè)人發(fā)郵件toaddrs=['87689097@','derek@icloud.com','8730dff88@163.com']用Smtplib模塊發(fā)送郵件06發(fā)送郵件的步驟#創(chuàng)建服務(wù)器連接conn=smtplib.SMTPSSL(smtpserver,465)conn.set_debuglevel(1)

#調(diào)試信息,可選#授權(quán)conn.login(fromaddr,password)#創(chuàng)建郵件對象msg=EmailMessage()msg['subject']='aletterfromdomkn'

#郵件標(biāo)題#發(fā)件人,格式為:domkn<tedulivevideo@163.com>msg['from']=f'domkn<{from_addr}>'用Smtplib模塊發(fā)送郵件06發(fā)送郵件的步驟msg['to']=f'xiaoming<{to_addrs}>'

#收件人,郵件列表msg.set_content('

'

'小明同學(xué),你好!2020年了,我終于學(xué)會使用Python寫郵件了,你也要加油哦!'

'

','plain','utf-8')#plain為純文本內(nèi)容#發(fā)送郵件conn,sendmail(fromaddr,toaddrs,msg.as_string())#退出conn.quit()運(yùn)行程序后,郵件發(fā)送成功。07用Poplib模塊收取郵件用Poplib模塊收取郵件07連接和認(rèn)證的過程①建立一個(gè)POP3對象,包含參數(shù)有遠(yuǎn)程服務(wù)器的主機(jī)名和端口號。②調(diào)用user()和pass()函數(shù)發(fā)送用戶名和密碼。③如果產(chǎn)生popliberror_proto異常,那么登錄失敗,服務(wù)器發(fā)送異常信息給客戶端。④登錄連接后,調(diào)用stat(),返回一個(gè)元組,其中包含了服務(wù)器郵箱中的郵件數(shù)量和郵件總的大小。使用列表得到郵件列表的信息,調(diào)用retr()提取具體的某一封郵件。⑤調(diào)用email模塊解析郵件列表中的內(nèi)容,還原為郵件對象。⑥調(diào)用quit(),關(guān)閉POP連接。08PyGame小程序PyGame小程序08安裝和驗(yàn)證Pygame安裝pygame:pipinstallpygame驗(yàn)證pygame:importpygame顯示PyGame1.9.6版本PyGame模塊概覽如表9-4所示。PyGame小程序08創(chuàng)建一個(gè)Pygame程序【例9-29】PyGame游戲小程序。在窗口中移動鼠標(biāo),在當(dāng)前鼠標(biāo)位置以隨機(jī)半徑和畫筆粗細(xì)畫圓。#導(dǎo)入模塊importpygameimportsys#pygame.locals模塊保存開發(fā)中的數(shù)據(jù)frompygame.localsimport*importrandom#初始化窗體pygame.init()#display顯示窗體,setmode()設(shè)置窗體的尺寸screen=pygame.d

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論