Python核心编程与应用 课件 【ch09】应用开发_第1页
Python核心编程与应用 课件 【ch09】应用开发_第2页
Python核心编程与应用 课件 【ch09】应用开发_第3页
Python核心编程与应用 课件 【ch09】应用开发_第4页
Python核心编程与应用 课件 【ch09】应用开发_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python核心编程与应用应用开发第九章新工科·数据科学与大数据系列01Turtle图像绘制Turtle图像绘制01画布画布就是Turtle为我们展开用于绘图的区域(如图9-1所示)。用户可以设置其大小和初始位置。turtle.screensize(canvwidth=None,canvheight=None,bg=None)其参数分别为画布的宽、高(单位为像素)背景颜色。画布存在于窗体中,用setup()函数设置窗体的初始位置和大小。turtle.setup(width=0.5,height=0.7,startx=None,starty=None)width、height:输入整数,表示像素;输入浮点数,则表示占据屏幕的比例。(startx,starty):表示矩形窗口左上角顶点的位置,若为空,则窗口位于屏幕中心。Turtle图像绘制01画笔画笔有很多属性,如画笔的粗细、颜色、画笔移动速度。turtle.pensize():设置画笔的粗细。turtle.pencolor():没有参数传入时,返回当前画笔的颜色,传入参数即设置画笔颜色。turtlespeed(speed):设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快但取值0时是特例,表示最快。Turtle图像绘制01画笔画笔运动命令如表9-1所示。画笔控制命令如表9-2所示。画笔全局控制命令如表9-3所示。Turtle图像绘制01画笔02Excel文件读写Excel文件读写02Python在自动化办公领域越来越受欢迎,自动化办公涉及Excel、Word、邮件、文件处理、数据分析处理等。其中,Excel因出色的计算功能和图表工具成为了流行的数据处理软件。我们经常遇到批量数据的操作,如采集的大量的商品信息需要写入Excel文件,或从Excel中读取数据进行各种统计和格式处理。针对这样的问题,若用手工方法一条一条地添加数据则效率太低。如果Python能自动将数据写入Excel文件并进行数据处理,就可以大大提高工作效率。Python针对Excel有很多第三方库可用,如xlwings、xlsxwriter、xlrd、xlwt、xsxwriter.xlutils等。本节介绍使用xrd模块读取XLS或XLSX文件使用xlt模块生成XLS文件使用前必须安装这两个库:pipinstallxlwtpipinstallxIrdExcel文件读写02【例9-9】简单的处理Excel文件的例子。importxlwt#创建一个workbook并设置编码workbook=xwt.Workbook(encoding='UTF-8)#创建一个worksheetworksheet=workbookaddsheet(MyWorksheet')#写入Excel文件#worksheet.write方法的参数对应行、列、值worksheet.write(1,0,label=thisistest')#保存,格式必须为.xlsworkbooksave(ExcelWorkbook.xls')运行程序后,打开文件ExcelWorkbook.xls,内容如图9-7所示。Excel文件读写02Excel文件读写02【例9-10】Excel文件的格式设置。workbook=xlwt.Workbook(encoding=UTF-8')worksheet=workbook.add_sheet('MyWorksheet')font=xlwt,Font()

#设置字体对象font='TimesNewRoman'

#设置属性font.bold=Truefont.underline=Truefont.italic=TrueExcel文件读写02style=xlwt,XFStyle()

#设置样式对象stylestyle.font=font

#将设置好的font属性写入样式worksheet.write(0,0'Unformattedvalue')

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

#1行0列单元格,增加了样式workbook.save(ExcelWorkbook.xls')运行程序后,打开文件ExcelWorkbook.xls,内容如图9-8所示。03异常处理异常处理03异常的处理方式(1)防御式编码。在处理数据前,程序员用代码检查数据的有效性或合法性。(2)异常处理另一种思路是,在程序运行中等待执行错误,一旦出错,捕获错误,转入错误处理,如果没有错误,那么程序继续正常稳定地往下执行。所以,异常处理需要系统监听所有代码,以备随时应对,这会造成一定程度上资源的浪费异常处理03内置异常类结构层次内置异常类结构层次如下:BaseException

#所有异常的基类SystemExit

#解释器请求退出(强制)KeyboardInterrupt

#用户中断执行(通常是输入^C)GeneratorExit

#生成器(generator)发生异常通知退出Exception

#常规异常的基类(最常用的异常处理类)StopIteration

#迭代器没有更多的值ArithmeticError

#各种算术错误引发的内置异常的基类······异常处理03抛出异常:raise在编程中,通常在ty中主动抛出异常,然后由except捕获处理,用于程序的业务逻辑出错时中断程序的执行。【例9-20】抛出异常。classAgeRangeException(Exception):

#自定义异常类def__init__(self,age):self.age=ageinp=input('请输入你的年龄:')try:age=int(inp)ifage<=@orage>=200:#raise:程序员手动写入一个错误raiseAgeRangeException("年龄范围不正确!")异常处理03抛出异常:raiseexceptAgeRangeExceptionasexp:

#年龄异常错误print(exp)exceptExceptionasexp:

#所有其他的异常在此捕获print(exp)else:print(成功执行完成!')finally:print(程序结束)运行结果:请输入你的年龄:230年龄范围不正确!程序结束当输入年龄为230岁时,主动抛出异常,触发自定义异常类AgeRangeException,捕获异常,给出提示“年龄范围不正确!”。04软件测试概述软件测试概述04软件运行过程中会有各种各样的异常,需要编程捕获并加以处理,这些都在程序员的控制下,但是软件中还有很多隐藏的错误,甚至软件发布后也没有被发现,所以才会有各种各样的软件补丁。这在软件发布中成为了常态,也催生了软件业的另外一个分支——软件测试。随着软件行业的发展,软件测试越来越重要。Bi1Gates说,很多人认为微软是一家软件开发公司而事实上我们是一家软件测试公司,在最后产品发布的时候,此产品的所有相关部门都必须签字,而测试人员拥有绝对的否决权。软件测试概述04软件测试是伴随着软件的产生而产生的。早期软件的规模很小、复杂程度低,软件开发过程无序、随意,测试的含义比较狭窄,开发人员将测试等同于“调试”,目的是纠正软件中已经知道的故障,通常由开发人员自己完成这部分的工作。当时对测试的投入极少,测试介入也晚,常常是等到产品已经基本完成时才进行测试。到了20世纪80年代初期,软件和IT行业开始进入了大发展时期,软件趋向大型化、高复杂度,软件的质量越来越重要。这时,一些软件测试的基础理论和实用技术开始形成,并且人们为软件开发设计了各种流程和管理方法,软件开发的方式逐渐由混乱无序的开发过程过渡到结构化的开发过程,以结构化分析与设计、结构化评审、结构化程序设计、结构化测试为特征。人们还将“质量”的概念融入其中,软件测试定义发生了改变,测试不但是一个发现错误的过程,而且将测试作为软件质量保证SQA)的主要职能,并包含软件质量评价。BilHetzel在《软件测试完全指南》(CompleteGuideofSoftwareTesting)一书中指出:“测试是以评价一个程序或者系统属性为目标的任何一种活动测试是对软件质量的度量。”软件测试概述04现在,软件测试已有了行业标准IEEE/ANSI。1983年,IEEE提出的软件工程术语中给软件测试下的定义是:“使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。”这个定义明确指出,软件测试的目的是检验软件系统是否满足需求,它再也不是一次性的且只是开发后期的活动,而是与整个开发流程融为一体。软件测试已成为一个专业,需要运用专门的方法和手段,需要专门人才和专家来承担。05单元测试和文档测试单元测试和文档测试05断言如断言1+1大于2,可以写成:assert1+1>2。然后在代码中判断这个假设是否成立,若不成立,就捕捉异常,中断代码的正常执行。断言可以看作异常处理的一种高级形式。断言通常作为程序排错的一种方式,用于判断程序出现错误的大致位置。例如,插入一个断言,如果断言未通过,就可以判断程序错误发生在断言这一行之前的代码中。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。例如,相信一个函数或对象的某方法产生的结果应是期望的那个结果,但具体的结果是否如愿用断言测试。程序员可以在任何时候启用和禁用断言验证,通常在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。单元测试和文档测试05文档测试在Python的官方文档中,我们通常可以看到对函数的文档描述,其中有很多示例代码。【例9-23】测试文档。deftest(x):""">>>test(2)'even'>>>test(1)'odd':paramx::return:"""单元测试和文档测试05文档测试if

x

%

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

'odd'程序中用"““引起来的部分是测试用例,明确告诉函数的调用者该函数的期望输入和输出。可以用人工方法在Python交互模式下测试运行,如:>>>test(2)看结果是否为“even”。Python内置的“文档测试”(doctest)模块可以直接提取注释中的代码并自动执行测试doctest严格按照Python交互式命令行的输入和输出来判断测试结果是否正确,只有测试异常,才会有大段的错误信息输出。单元测试和文档测试05单元测试单元测试就是开发者编写一小段代码,检验目标代码的功能是否符合预期。通常情况下,单元测试主要面向一些功能单一的模块进行。例如,一台计算机由许多零部件组成,在正式组装前,这些零部件,如CPU、内存、电池、摄像头等,都要进行测试,这就是单元测试。常用的单元测试模块有unittest和pytest,前者是标准库,后者为第三方库。(1)unittest模块创建测试的流程如下:新建单元测试脚本,导入单元测试,继承单元测试类,实现单元测试方法,编写单元测试。单元测试和文档测试05单元测试(2)pytest模块pytest模块是第三方库,提供了更简单的测试方法。pytest单元测试框架中并没提供特殊的断言方法,而是直接使用Python的assert进行断言。首先安装pytest模块(pipinstallpytest)和pytest-html模块(pipinstallpytest-html,用于将测试结果生成为web网页)。验证安装版本:pytest--version编写测试版本的步骤:测试文件以“test”开头(test结尾也可以);测试类以“Test”开头,并且不能带有init方法;测试函数以“test_”开头;断言使用基本的assert语句即可。06用Smtplib模块发送邮件用Smtplib模块发送邮件06Smtplib模库发送邮件的准备工作①准备发送邮件的必要信息,如接收方邮箱地址、邮件的发送方式。②由于邮件发送是由邮件服务器完成的,因此需要准备本人真实的邮件账号、密码。这里采用163邮箱为例发送邮件,设用户名为tedulivevideo@163.com,密码为tedu@2019。③163的SMTP服务器地址为smtp.163com端号为465(其他常用的邮箱可以在运行商网站上查询)。④准备邮件的内容,如标题、邮件正文、落款签名等。用Smtplib模块发送邮件06发送邮件的步骤Web上发送邮件的基本流程为:连接网易的SMTP服务器,开启安全协议并登录,发送邮件,结束。Python发送邮件的步骤同样需要这些过程,具体来说:①发送自己的邮箱地址、密码给服务器,服务器认证通过后才能发送邮件②创建邮件对象,设置收件人、发件人、标题、正文、抄送或密送等信息。③发送邮件,结束。用Smtplib模块发送邮件06发送邮件的步骤【例9-27】用Smtplib模块发送邮件。importsmtplibfromemail.messageimportEmailMessage#设置SMTP服务器信息smtp_server=""#设置发件人邮箱地址及密码fromaddr="tedulivevideo@163.com"password="tedu@2019"#设置收件人邮箱地址列表,可以同时给多个人发邮件toaddrs=['87689097@','derek@icloud.com','8730dff88@163.com']用Smtplib模块发送邮件06发送邮件的步骤#创建服务器连接conn=smtplib.SMTPSSL(smtpserver,465)conn.set_debuglevel(1)

#调试信息,可选#授权conn.login(fromaddr,password)#创建邮件对象msg=EmailMessage()msg['subject']='aletterfromdomkn'

#邮件标题#发件人,格式为:domkn<tedulivevideo@163.com>msg['from']=f'domkn<{from_addr}>'用Smtplib模块发送邮件06发送邮件的步骤msg['to']=f'xiaoming<{to_addrs}>'

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

'

'小明同学,你好!2020年了,我终于学会使用Python写邮件了,你也要加油哦!'

'

','plain','utf-8')#plain为纯文本内容#发送邮件conn,sendmail(fromaddr,toaddrs,msg.as_string())#退出conn.quit()运行程序后,邮件发送成功。07用Poplib模块收取邮件用Poplib模块收取邮件07连接和认证的过程①建立一个POP3对象,包含参数有远程服务器的主机名和端口号。②调用user()和pass()函数发送用户名和密码。③如果产生popliberror_proto异常,那么登录失败,服务器发送异常信息给客户端。④登录连接后,调用stat(),返回一个元组,其中包含了服务器邮箱中的邮件数量和邮件总的大小。使用列表得到邮件列表的信息,调用retr()提取具体的某一封邮件。⑤调用email模块解析邮件列表中的内容,还原为邮件对象。⑥调用quit(),关闭POP连接。08PyGame小程序PyGame小程序08安装和验证Pygame安装pygame:pipinstallpygame验证pygame:importpygame显示PyGame1.9.6版本PyGame模块概览如表9-4所示。PyGame小程序08创建一个Pygame程序【例9-29】PyGame游戏小程序。在窗口中移动鼠标,在当前鼠标位置以随机半径和画笔粗细画圆。#导入模块importpygameimportsys#pygame.locals模块保存开发中的数据frompygame.localsimport*importrandom#初始化窗体pygame.init()#display显示窗体,setmode()设置窗体的尺寸screen=pygame.d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论