版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python程序设计基础及应用实验指导书
实验项目内容与学时分配序号实验名称实验内容学时实验类型1anaconda安装和使用Anaconda的安装、配置和简单实用2验证2容器和控制语句使用列表、元组、字典、集合的使用2设计3字符串处理编写对字符串(正则表达式)进行操作的程序2设计4函数使用函数的设计与使用2设计5类的使用类的设计与使用2设计6文件和文件夹操作二进制和文本文件的操作使用2设计7异常处理异常处理程序的编写2设计8数据可视化数据可视化库matplotlib的使用2设计9数组使用数值计算工具numpy的使用2设计10数据分析Pandas库的使用2设计11网络爬虫lxml、requests库的使用2设计合计学时实验一anaconda安装与使用实验目的和要求掌握windows下PythonIDEL的安装。掌握anaconda的安装和配置、jupyternotebook、spyder工具的使用3)掌握使用pip安装Python扩展库。4)熟悉离线安装轮子文件的方法。二、实验内容1)PythonIDLE、Anaconda下载和安装。2)JupyterNotebook使用和常用功能。3)扩展库的安装。4)轮子文件的安装。三、实验仪器、设备计算机一台,安装有Windows7操作系统四、实验原理从Python官网下载Python3.7.2。从anaconda官网下载anaconda,建议下载3.6以上版本。Jupyternotebook是一个IDL,可以进行交互式编程,支持多种格式文件的编辑。IDEL也可以进行交互性编程。五、实验步骤1.下载anaconda/PythonIDEL从官网上下载anaconda3.6,需要根据安装的OS来进行选择。具体的安装环境要求可以查看官网的文档说明。从官网上下载Python,建议安装3.7.2版本。安装anaconda安装时选择定制安装,建议不要把anaconda安装在c:盘上。安装时选择针对所有用户。不要把anacond自带的python解释器加入到path中。启动JupyterNotebook
1)【开始】-->【所有程序】-->【anaconda】-->【JupyterNotebook】选择复制链接。修改属性,将%userprofile%更改为今后存放Python源程序的目录。启动JupyterNotebook。单击【new】--->“Python3”,进入Python脚本编辑界面。可以选择单元类型【code】,输入源代码,通过按下【shifit】+【enter】组合键,运行程序。也可以选择单元类型【markdown】。Markdown模式下可以对文本进行编辑,采用Markdown的语法规范,可以设定文本格式,插入链接、图片甚至数学公式,同样,通过按下【shifit】+【enter】组合键可运行Markdown单元,显示格式化的文本。在首行前加一个“#”字符和空格代表一级标题,加两个“#”字符和空格代表二级标题,以此类推。项目符号可以使用“+”、“-”、“*”加空格,公式使用两个“$”符号,例如“$E=mc^2$”。完成以下内容的输入:4.安装第三方扩展库(以安装matplotlib库为例。)1)升级pipwindows下进入命令行模式,输入python-mpipinstall--upgradepip。2)切换到python安装目录的scripts子目录下3)依次输入pipinstallnumpyscipy、pipinstallmatplotlib。5.离线安装第三方扩展库如果遇到安装不成功的扩展库,使用浏览器打开下面的网址,下载whl文件进行离线安装:/~gohlke/pythonlibs/。在IDLE中使用import导入安装好的扩展库,验证是否安装成功。六、实验注意事项1)Python是解释型语言,需要Python解释器支持。2)可以使用.tab来获取对象的属性,使用函数名?获取函数帮助信息,??函数名获取函数源码。七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:anaconda安装过程、第三方扩展库的安装、Python程序基本结构。八、实验成绩考核实验二容器和控制语句的使用一、实验目的和要求掌握列表的功能和使用。掌握元组的功能和使用。掌握字典的功能和使用。掌握集合的功能和使用。掌握选择结构和循环结构for、while的使用二、实验内容把列表中的所有数字都加5,得到新列表。输入三个序列,输出三个序列中最大值相乘的结果和最大值出现的位置。生成包含1000个随机字符的字符串,统计每个字符的出现次数。已知有一个包含一些同学成绩(math、Python、english)的字典,现在需要计算math成绩的最高分、最低分、平均分,并查找math最高分的同学。编写一个程序,检查用户输入3条边能否构成三角形,如果可以构成,请判断三角形的类型(锐角、钝角和直角以及等腰、等边)。三、实验仪器、设备计算机安装有Windows,有PythonIDE:Anaconda/Pycharm/VsCode。四、实验原理列表和元组属于有序序列,可以双向索引,支持切片操作。列表可变,提供了很多的元素增加和删除等方法。元组不可表,不能修改其中元素的值。字典是键值对的组合,键要求可哈希,值没有要求,通过键来索引,可以修改、增加和删除键值对。集合是无序的,支持增加和删除元素,无法取出特性的元素,支持集合之间的交并差。五、实验步骤1)1)启动IDE2)输入程序。3)执行程序。4)出现问题,调测程序,直至运行结果正确。六、实验注意事项1)正确使用数据类型。2)先确定思路,在编写程序实现。七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。比较列表、元组、字典和集合的异同。比较for、while循环的执行流程。八、实验成绩考核参考程序1.x=list(range(10))y=[]fornuminx:y.append(num+5)或者[num+5fornuminx]2.x=input("inputfirstlist:")x=list(map(int,x.split()))i=max(x)iPos=x.index(i)y=input("inputsecondlist:")y=list(map(int,y.split()))j=max(y)jPos=y.index(j)z=input("inputthirdlist:")z=list(map(int,z.split()))k=max(z)kPos=z.index(k)print("maxis",i*j*k,",positionis%d,%d,%d."%(iPos,jPos,kPos))3.importstringimportrandomx=string.ascii_letters+string.digits+string.punctuationy=[random.choice(x)foriinrange(1000)]z=''.join(y)d=dict()#使用字典保存每个字符出现次数forchinz:d[ch]=d.get(ch,0)+14.whileTrue: name=input("pleaseinputstudent'sname:") score=eval(input("pleaseinputscores(math,Python,english):")) studentInfo[name]=score choose=input("Doyouwanttofinish?(yes/no)".lower() ifchoose=="yes": continue elifchoose=="no": break else: print("youmustinputyesorno!")name1,highScore=max(studentInfo.items(),key=lambdaitem:item[1][0])#math最高分name2,lowestScore=min(studentInfo.items(),key=lambdaitem:item[1][0])#math最低分averageScore=sum([score[0]forscoreinstudentInfo.values()])/len(studentInfo.values())#math平均分highestPerson=name1print("Thehighestscoreinmathis:",highScore[0],"Thelowestscoreinmathis:",lowestScore[0],"theaveragescoreinmathis:",averageScore,"Thenameforhighscoreis:",name)5."""本程序完成对输入的3条边进行判断,如果构成三角形,则判断是锐角、钝角和直角三角形;还可以判断等腰和等边三角形"""x,y,z=eval(input("请输入三角形3条边的长度(以,分隔):"))#输入三条边长度x,y,z=sorted([x,y,z],reverse=True)#降序排列三条边长度whiley+z<=x:print("不能构成三角形,请重新输入3条边的长度:")x,y,z=eval(input("请输入三角形3条边的长度(以,分隔):"))x,y,z=sorted([x,y,z],reverse=True)cosX=(y**2+z**2-x**2)/2.0/y/zifcosX>0.0:print("锐角三角形")elifcosX==0.0:print("直角三角形")else:print("钝角三角形")ifx==y==z:print("等边三角形")elifx==yory==zorx==z:print("等腰三角形")实验三字符串处理一、实验目的和要求熟悉并掌握字符串的定义掌握字符串常用操作的使用二、实验内容生成指定长度的随机密码。编写程序实现字符串加密和解密,循环使用指定密钥,采用简单的异或算法。检查并判断密码字符串的安全强度,密码必须至少包含6个字符。编写程序,模拟打字练习程序的成绩评定。假设origin为原始内容,userInput为 用户练习时输入的内容,要求用户输入的内容长度不能大于原始内容的长度,如果对应 位置的字符一致则认为正确,否则判定输入错误。最后成绩为:正确的字符数量/原始 字符串长度,按百分制输出,要求保留2位小数。某网站,要求完成对用户输入用户名、密码和电子邮箱规范性验证。用户名要求长度为4~20个字符,只能包含大小写字母、数字及下划线,且必须以字母开头;密码要求长度为6~12个字符,只能包含大小写字母、数字,且必须含有至少一个数字和一个字母;电子邮箱需要符合格式要求。三、实验仪器、设备计算机、windows操作系统,安装有PythonIDE:Anaconda/Pycharm/VsCode。四、实验原理1)Python中,字符串属于不可变有序序列,使用单引号、双引号、三单引号或三双引号作为定界符,并且不同的定界符之间可以互相嵌套。2)Python字符串对象提供了大量方法用于字符串的切分、连接、替换和排版等操作,要正确使用,传递合法的参数值。另外还有大量内置函数和运算符也支持对字符串的操作。五、实验步骤1)启动IDE2)输入程序。3)执行程序。4)出现问题,调测程序,直至运行结果正确。六、实验注意事项正确使用字符串的方法和基本操作。字符串编码方案。编程规范。七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。八、实验成绩考核参考程序importstringimportrandomcharacters=string.digits+string.ascii_lettersprint(''.join([random.choice(characters)foriinrange(8)]))#返回8位的密码字段print(''.join([random.choice(characters)foriinrange(10)]))#返回10位的密码字段print(''.join([random.choice(characters)foriinrange(16)]))#返回16位的密码字段2,fromitertoolsimportcyclesource='xijinguniveisity'key='FanHui'result=''temp=cycle(key)forchinsource:result=result+chr(ord(ch)^ord(next(temp)))print(result)3.importstringpwd=input(‘inputapassword’)#密码必须至少包含6个字符ifnotisinstance(pwd,str)orlen(pwd)<6:return'notsuitableforpassword'#密码强度等级与包含字符种类的对应关系d={1:'weak',2:'belowmiddle',3:'abovemiddle',4:'strong'}#分别用来标记pwd是否含有数字、小写字母、大写字母和指定的标点符号r=[False]*4forchinpwd:ifnotr[0]andchinstring.digits: #测试是否包含数字r[0]=Trueelifnotr[1]andchinstring.ascii_lowercase: #是否包含小写字母r[1]=Trueelifnotr[2]andchinstring.ascii_uppercase: #是否包含大写字母r[2]=Trueelifnotr[3]andchin',.!;?<>': #是否包含指定的标点符号r[3]=True#统计包含的字符种类,返回密码强度result=d.get(r.count(True),'error')origin='''Beautifulisbetterthanugly.\Explicitisbetterthanimplicit.\Simpleisbetterthancomplex.\Complexisbetterthancomplicated.\Flatisbetterthannested.'''print("原始字符串:",origin)userInput=input("请按照原始字符串输入:")iflen(origin)<len(userInput):print("输入字符串和原始字符串长度不一致!")#精确匹配的字符个数right=sum(1foroc,ucinzip(origin,userInput)ifoc==uc)rate=right/len(origin)print("正确率为:{}%".format(round(rate*100,2)))importreif__name__=='__main__':username=input("请输入用户名:")pattern=pile(r'^[a-zA-Z]\w{4,20}$')whilenotpattern.match(username):print('Invalidusername!')username=input("请输入用户名:")else: print("Validusername!")pwd=input('请输入密码:')pattern=pile(r'^(?![a-zA-Z]+$)(?![0-9]+$)[0-9a-zA-Z]{6,12}$')whilenotpattern.match(pwd):print("Invalidpassword:")pwd=input('请输入密码:')else:print("ValidPassword!")email=input("请输入E-MAIL地址:")pattern=pile(r"^\w+@[a-zA-Z0-9]+(\.(com|cn|org|net|mil|edu))+$")whilenotpattern.match(email):print("InvalidE-MAIL:")pwd=input('请输入E-MAIL地址:')else:print("ValidE-MAIL!")实验四函数编写和使用一、实验目的和要求熟悉并掌握函数的定义和调用理解函数形参和实参的含义,能够正确设置形参类型理解隐含函数lambda二、实验内容输出“水仙花数”。所谓水仙花数是指1个3位的十进制数,其各位数字的立方和等于该数本身。例如:153是水仙花数,因为153=13+53+33。请使用函数式编程+内置函数来实现。编写使用朴素感知机实现与运算的函数andPerceptron()。计算两点间曼哈顿距离。编写函数sumDigits(num),完成对一个整数的各位求和操作。编写函数,求任意一个数的立方根(使用牛顿迭代法)。三、实验仪器、设备计算机、windows操作系统,安装有PythonIDE:Anaconda/Pycharm/VsCode。四、实验原理1)def定义函数,函数名参数后面添加:表示函数体开始,利用缩进表示函数体。2)函数内参数为局部变量,函数体外的变量为全局变量。3)函数的形参有位置参数、默认值参数和可变长度参数,要区分不同使用场合。4)函数的实参有关键字参数。5)递归函数要有基础条件和递归公式,递归函数运行开销大,要合理使用,不能滥用。6)lambda是匿名函数,只使用一次,常常作为高阶函数的参数来使用。五、实验步骤1)启动jupyternotebook2)单击【new】按钮。3)输入程序。3)使用【run】按钮执行程序。六、实验注意事项函数的正确缩进。lambda函数的定义和实现。函数内变量的作用域。七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。实验成绩考核参考程序1.defsxh():fornuminrange(100,1000):r=map(lambdax:int(x)**3,str(num))ifsum(r)==num:print(num)defandPerceptron(x1,x2): x=[x1,x2] w=[1,1] b=-1 v=sum([a*bfora,binzip(x,w)])+b ifv>0: return1 else: return0defmanhattanDistance(x,y):returnsum(map(lambdai,j:abs(i-j),x,y))print(manhattanDistance([1,2],[3,4]))print(manhattanDistance([1,2,3],[4,5,6]))print(manhattanDistance([1,2,3,4],[5,6,7,8]))fromfunctoolsimportreducedefgetDigits1(num):ifnum//10:resuslt=reduce(lambdax,y:int(x)+int(y),str(num))else:result=numreturnresult或者:defgetDigits2(num):result=sum(map(lambdax:int(x),str(num)))returnresultdefcbrt(x): ifx==0.0: return0.0 x1=xwhileTrue:x2=(2.0*x1+x/x1/x1)/3ifabs((x2-x1)/x1)<0.001: returnx2x1=x2实验五类的设计一、实验目的和要求熟悉并掌握类的编写过程理解类中成员的含义二、实验内容系统中的用户分类非常复杂,不同用户组具有不同的行为和权限,并且可能会经常改变,管理非常困难。这时候我们可以独立地定义一些行为,然后根据需要来为不同的用户设置相应的行为能力。请设计一个Person类,完成sing()、walk()、eat()等行为。现有一个基类Shape,其中有一个方法getArea()。请使用多态性实现Circle、Rectangle、Square中的getArea()方法(分别计算不同图形的面积)。编写一个队列类myQueue,完成队列的初始化、删除、入队和出队等操作。三、实验仪器、设备计算机、windows操作系统,安装有PythonIDE:Anaconda/Pycharm/VsCode。四、实验原理 按照class的三大特性:封装、继承和多态,合理设计属性(类属性和实例属性)和方法(实例方法、类方法和静态方法)的类型,根据实际类的功能要求设计继承链,按照子类和父类的不同行为设计公共方法。五、实验步骤1)启动IDE2)输入程序。3)执行程序。4)出现问题,调测程序,直至运行结果正确。六、实验注意事项使用jupyternotebook输入源代码。熟悉类的语法结构。当出现错误脚本会停止在错误行上,修正错误后,重新运行脚本。七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。八、实验成绩考核参考程序:1.classPerson(object):def__init__(self,name,sex):assertisinstance(name,str),'namemustbestring'assertisinstance(sex,str),'sexmustbestring'self.__name=nameself.__sex=sexdefshow(self,action):print(action.center(30,"#"))defsing(self):self.show("sing")print("{0}({1})cansing!".format(self.__name,self.__sex))defwalk(self):self.show("walk")print("{0}({1})canwalk!".format(self.__name,self.__sex))defeat(self):self.show("eat")print("{0}({1})caneat!".format(self.__name,self.__sex))defmain():person=Person("张三","男")person.sing()person.walk()person.eat()if__name__=="__main__":main()2.#定义基类classShape(object):name="Shape"def__init__(self):print(S,"initializationiscompleted!")defgetArea(self):print("BaseClass<Shape>cannotcalculatearea!")#定义子类classCircle(Shape):def__init__(self,radius):super().__init__()self.__radius=radiusC="Circle"print(C,"initializationiscompleted!")defgetArea(self):area=3.1415*self.__radius**2returnarea#定义子类classRectangle(Shape):def__init__(self,length,width):super().__init__()self.__length=lengthself.__width=widthR="Rectangle"print(R,"initializationiscompleted!")defgetArea(self):area=self.__length*self.__widthreturnarea#定义子类classSquare(Shape):def__init__(self,length):super().__init__()self.__length=lengthS="Rectangle"print(S,"initializationiscompleted!")defgetArea(self):area=self.__length**2returnareadefmain():circle=Circle(10)area=circle.getArea()print("areais",area)rectangle=Rectangle(10,20)area=rectangle.getArea()print("areais",area)square=Square(30)area=square.getArea()print("areais",area)if__name__=="__main__":main()3.classMyDeque:#构造方法,默认队列大小为10def__init__(self,iterable=None,maxlen=10):ifiterable==None:self._content=[]self._current=0else:self._content=list(iterable)self._current=len(iterable)self._size=maxlenifself._size<self._current:self._size=self._current#析构方法def__del__(self):delself._content#修改队列大小defsetSize(self,size):ifsize<self._current:#如果缩小队列,需要同时删除后面的元素foriinrange(size,self._current)[::-1]:#逆序delself._content[i]self._current=sizeself._size=size#在右侧入队defappendRight(self,v):ifself._current<self._size:self._content.append(v)self._current=self._current+1else:print('Thequeueisfull')#在左侧入队defappendLeft(self,v):ifself._current<self._size:self._content.insert(0,v)self._current=self._current+1else:print('Thequeueisfull')#在左侧出队defpopLeft(self):ifself._content:self._current=self._current-1returnself._content.pop(0)else:print('Thequeueisempty')#在右侧出队defpopRight(self):ifself._content:self._current=self._current-1returnself._content.pop()else:print('Thequeueisempty')#显示当前队列中元素个数def__len__(self):returnself._current#使用print()打印对象时,显示当前队列中的元素def__str__(self):return'myDeque('+str(self._content)+',maxlen='+str(self._size)+')'#队列置空defclear(self):self._content=[]self._current=0#测试队列是否为空defisEmpty(self):returnnotself._content#测试队列是否已满defisFull(self):returnself._current==self._sizedefmain():mydeque=MyDeque((-10,10,-1,3,2,1),6)mydeque.setSize(10)mydeque.appendRight(4)mydeque.appendLeft(0)print("入队后内容:",mydeque)mydeque.popRight()mydeque.popLeft()print("出队后内容:",mydeque)mydeque.clear()print("清空队列后内容:",mydeque)if__name__=="__main__":main()实验六文件和文件夹操作一、实验目的和要求掌握文件的定义、操作和使用能够使用文件来获取和存储数据学会文件夹的操作方法二、实验内容递归遍历指定文件夹下的子文件夹和文件。编写程序,递归删除指定文件夹中指定类型的文件。编写程序,进行文件夹增量备份。三、实验仪器、设备计算机、windows操作系统,安装有PythonIDE:Anaconda/Pycharm/VsCode。四、实验原理 使用标准模块os提供的函数对文件和文件夹操作。五、实验步骤1)启动IDE2)输入程序。3)执行程序。4)出现问题,调测程序,直至运行结果正确。六、实验注意事项熟悉os中函数的功能和参数。出现错误时,要根据错误提示,正确修正错误后,重新运行脚本。七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)参考程序:1.fromosimportlistdirfromos.pathimportjoin,isfile,isdirdeflistDirDepthFirst(directory):#遍历文件夹,如果是文件就直接输出,如果是文件夹,就递归遍历该文件夹forsubPathinlistdir(directory):path=join(directory,subPath)print(path)ifisdir(path):listDirDepthFirst(path)if__name__=="__main__":listDirDepthFirst("d:/")2.fromos.pathimportisdir,join,splitextfromosimportremove,listdirimportsysfiletypes=['.tmp','.log','.obj','.txt']#指定要删除的文件类型defdelCertainFiles(directory):ifnotisdir(directory):returnforfilenameinlistdir(directory):temp=join(directory,filename)ifisdir(temp):delCertainFiles(temp)elifsplitext(temp)[1]infiletypes:#分隔文件扩展名,检查文件类型remove(temp)print(temp,'deleted....')if__name__=="__main__":delCertainFiles("h:/tt")3.importosimportfilecmpimportshutilimportsysdefautoBackup(scrDir,dstDir):if((notos.path.isdir(scrDir))or(notos.path.isdir(dstDir))or(os.path.abspath(scrDir)!=scrDir)or(os.path.abspath(dstDir)!=dstDir)):usage()foriteminos.listdir(scrDir):scrItem=os.path.join(scrDir,item)dstItem=scrItem.replace(scrDir,dstDir)ifos.path.isdir(scrItem):#创建新增的文件夹,保证目标文件夹的结构与原始文件夹一致ifnotos.path.exists(dstItem):os.makedirs(dstItem)print('makedirectory'+dstItem)#递归调用自身函数autoBackup(scrItem,dstItem)elifos.path.isfile(scrItem):#只复制新增或修改过的文件if((notos.path.exists(dstItem))or(notfilecmp.cmp(scrItem,dstItem,shallow=False))):shutil.copyfile(scrItem,dstItem)print('file:'+scrItem+'==>'+dstItem)defusage():print('scrDiranddstDirmustbeexistingabsolutepathofcertaindirectory')print('Forexample:{0}c:\\olddirc:\\newdir'.format(sys.argv[0]))sys.exit(0)if__name__=='__main__':iflen(sys.argv)!=3:usage()scrDir,dstDir=sys.argv[1],sys.argv[2]autoBackup(scrDir,dstDir)实验七异常处理一、实验目的和要求掌握Python的异常处理结构能够独立编写异常处理程序二、实验内容编写函数模拟猜数游戏。系统随机产生一个数,并且指定玩家最多可以猜的次数,系统会根据玩家的猜测进行提示,玩家则可以根据系统的提示对下一次的猜测进行适当调整。用户输入若干个分数,求所有分数的平均分。每输入一个分数后询问是否继续输入下一个分数,回答“yes”就继续输入下一个分数,回答“no”就停止输入分数。请使用异常处理机制来编写程序编写自定义异常类,完成对异常信息的记录,将异常信息写入到app_log_file.txt文件中。三、实验仪器、设备计算机、windows操作系统,安装有PythonIDE:Anaconda/Pycharm/VsCode.四、实验原理 合理使用异常处理结构try…except…else…finally来编写异常处理程序,提供程序健壮性。五、实验步骤1)启动IDE2)输入程序。3)执行程序。4)出现问题,调测程序,直至运行结果正确。六、实验注意事项异常类型具有先后顺序,按照具体异常到Exception形式来编写except分支。七、实验报告要求实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)参考程序:fromrandomimportrandintdefguess(maxValue=100,maxTimes=5):value=randint(1,maxValue)#随机生成一个整数foriinrange(maxTimes):prompt='StarttoGUESS:'ifi==0else'Guessagain:'try:#使用异常处理结构,防止输入不是数字的情况x=int(input(prompt))except:print('YouMustinputanintegerbetween1and',maxValue)else:ifx==value:#猜对了print('Congratulations!')breakelifx>value:print('Toobig')else:print('Toolittle')else:#次数用完还没猜对,游戏结束,提示正确答案print('Gameover.FAIL.')print('Thevalueis',value)if__name__=="__main__":#以独立方式运行程序guess(88)numbers=[]#使用列表存放临时数据whileTrue:x=input('请输入一个成绩:')try:#异常处理结构numbers.append(float(x))except:print('不是合法成绩')whileTrue:flag=input('继续输入吗?(yes/no)').lower()ifflagnotin('yes','no'):#限定用户输入内容必须为yes或noprint('只能输入yes或no')else:breakifflag=='no':breakprint("平均分是{0:.1f}".format(sum(numbers)/len(numbers)))3.fromdatetimeimportdatetimeimporttraceback,sysclassMyException(Exception):logfile="e:\\app_log_file.txt"defdoLog(self):log=open(self.logfile,"wt")day=datetime.today()x=sys.exc_info()print("\n------出错了------",file=log)print("\n日期时间:",day,file=log)log.write("\n异常类型:%s"%x[0].__name__)log.write("\n异常描述:%s"%x[1])print("\n堆栈跟踪信息:",file=log)traceback.print_tb(self.args[1],file=log)#获得堆栈跟踪信息log.close()try:try:print(5/'0')exceptExceptionasex:raiseMyException(ex.args[0],ex.__traceback__)except(MyException)asex:ex.doLog()finally:print("程序执行结束")实验八数据可视化一、实验目的和要求掌握折线图的作用与绘制方法。掌握柱形图的作用与绘制方法。掌握条形图的作用与绘制方法。掌握散点图的作用与绘制方法掌握气泡图的作用与绘制方法。掌握饼图的作用与绘制方法。实验内容折线图的绘制方法。柱形图的绘制方法。条形图的绘制方法。散点图的绘制方法气泡图的绘制方法。饼图的绘制方法。三、实验仪器、设备计算机、windows操作系统,安装有PythonIDE:Anaconda/Pycharm/VsCode四、实验原理 1)导入matplotlib.pyplot和seaborn库。2)使用seaborn和matplotlib库提供的函数来编写代码。五、实验步骤1)启动IDE。2)输入程序。3)执行程序。4)发现问题,调测代码,直至运行结果正确。六、实验注意事项使用IDE输入源代码。注意图表修饰和显示、存盘的顺序。七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)参考代码:初等函数绘图importnumpyasnpfrommatplotlibimportpyplotaspltplt.rcParams['font.sans-serif']=['KaiTi'] #楷体plt.rcParams['axes.unicode_minus']=False #正常显示图中的负号plt.figure(figsize=(15,4)) #设置画布大小fig,ax=plt.subplots(2,2,figsize=(15,12)) #创建4个子图importmathx=np.linspace(0.1,2*math.pi);ax[0,0].plot(x,np.sin(x),c='red',linestyle='--');ax[0,1].plot(x,np.cos(x))ax[1,0].plot(x,np.log(x))ax[1,1].plot(x,np.exp(x))plt.show()极坐标图形的绘制#根据函数式的基本绘图,在直角坐标下可使用参数方法:#(x/a)^2+(y/b)^2=1等价于x=asin(c),y=bcos(c),(0<c<2*pi)#其图形绘制方法如下importnumpyasnpimportmathfrommatplotlibimportpyplotaspltt=np.linspace(0,2*math.pi)x=2*np.sin(t)y=3*np.cos(t)plt.plot(x,y)plt.text(0,0,r'$\frac{x^2}{2}+\frac{y^2}{3}=1$',fontsize=16)plt.show()绘制折线图importnumpyasnpimportmathimportmatplotlib.pyplotasplt#折线图常用于表示随着时间的推某指标的变化趋势,使用的是plt库中的plot方法#plot方法的具体参数如下:#plt.plot(x,y,color,linestyle,linewidth,marker,markeredgeclor,markeredgwidth,markerfacecolor,markersize,label)其中,参数x,y分别表示x轴和y轴的数据;color表示折线图的颜色,#linestyle表示#显示风格,linewith表示线的宽度。#绘制某公1-9月份注册用户量的折线图。plt.subplot(1,1,1) #建立一个坐标系x=np.array([1,2,3,4,5,6,7,8,9]) #指定x轴的值y=np.array([886,2335,5710,6482,6120,1605,3813,4428,4631])plt.plot(x,y,color='r',linestyle='dashdot',linewidth=1,marker='o',markersize=5,label='注册用户数') #绘制图表plt.title('某公司1-9月注册用户量',loc='center') #设置标题名及标题的位置#添加数据标签fora,binzip(x,y):plt.text(a,b,b,ha='center',va='bottom',fontsize=10)plt.grid(True) #设置网格线plt.legend() #设置图例plt.savefig(r'e:\test.jpg') #将图表保存到本地plt.show()运行截图:4.绘制柱形图代码:1)importnumpyasnpimportmatplotlib.pyplotaspltplt.rcParams['font.family']='STSong'#柱形图常用于比较不同类别之间的数据情况,使用的是plt库中的bar方法。#bar方法实现如下:#plt.bar(x,height,width=0.8,bottom=None,align='center',color,edgecolor)#其中,height表示每根柱子的高度,width表示每根柱子的宽度,bottom表示每根柱子的底部位置,每根柱子的底部位置读可以一样,也可以不一样;#align表示柱子的位置与x值得关系,有center、edge两个参数可选,center表示柱子位于x值得中心位置,edge表示柱子位于x值的边缘位置;color表示颜色;edgecolor表示柱子边缘的颜色#绘制一张全国各分区任务量的普通柱形图plt.subplot(1,1,1) #建立一个坐标系x=np.array(['东区','北区','南区','西区'])y=np.array([8566,6482,5335,7310])plt.bar(x,y,width=0.5,align='center',label='任务量',color=['r','g','b','k']) #绘图plt.title('全国各分区任务量',loc='center') #设置标题fora,binzip(x,y):plt.text(a,b,b,ha='center',va='bottom',fontsize=10) #添加数据标签plt.xlabel('分区') #设置x轴标签plt.ylabel('任务量') #设置y轴标签plt.legend() #显示图例plt.show()2)#绘制全国各分区任务量和完成量的簇状图形图。plt.subplot(1,1,1) #建立一个坐标系x=np.array([1,2,3,4])y1=np.array([8566,6482,5335,7310]) #任务量y2=np.array([4283,2667,3655,3241]) #完成量plt.bar(x,y1,width=0.3,label='任务量') #柱形图的宽度为0.3plt.bar(x+0.3,y2,width=0.3,label='完成量')#x+0.3相当于把完成量的每个柱子右移动0.3plt.title('全国各分区任务量',loc='center') #设置标题fora,binzip(x,y1):plt.text(a,b,b,ha='center',va='bottom',fontsize=12) #添加数据标签fora,binzip(x+0.3,y2):plt.text(a,b,b,ha='center',va='bottom',fontsize=12) #添加数据标签plt.xlabel('分区') #设置x轴标签plt.ylabel('任务情况') #设置y轴标签plt.xticks(x+0.15,['东区','南区','西区','北区']) #设置x轴刻度值plt.grid(False) #设置网格线plt.legend() #显示图例plt.show()3)#堆积柱形图实例#堆积柱形图常用来比较同类别各变量和不同类别变量的总和差异,使用的同样是plt库中的bar方法,只要在相同的x位置绘制不同的y,y就会自动叠加。#如,绘制全国各分区任务量和完成量的堆积柱形图plt.subplot(1,1,1) #建立一个坐标系x=np.array([1,2,3,4])y1=np.array([8566,6482,5335,7310]) #任务量y2=np.array([4283,2667,3655,3241]) #完成量plt.bar(x,y1,width=0.3,label='任务量')plt.bar(x,y2,width=0.3,label='完成量')plt.title('全国各分区任务量和完成量',loc='center') #设置标题fora,binzip(x,y1):plt.text(a,b,b,ha='center',va='top',fontsize=12) #添加数据标签fora,binzip(x,y2):plt.text(a,b,b,ha='center',va='bottom',fontsize=12) #添加数据标签plt.xlabel('分区') #设置x轴标签plt.ylabel('任务情况') #设置y轴标签plt.xticks(x,['东区','南区','西区','北区']) #设置x轴刻度值plt.legend(loc='uppercenter',ncol=2) #显示图例plt.show()运行截图:条形图代码:importnumpyasnpimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']#条形图与柱形图类似,只不过是将柱形图的x轴和y轴进行了调换,纵向柱形图变成了横向柱形图,使用plt库中的barth方法。#barth方法如下所示:#plt.barth(y,width,height,align,color,edgecolor)#barth方法的参数及说明如下表:#width表示柱子的宽度,height表示柱子的高度,align表示柱子的对齐方式#color表示颜色,edgeclolor表示柱子边缘颜色,绘制全国各分区任务量的条形图plt.figure(figsize=(9,4)) #创建图表对象x=np.array(['东区','北区','南区','西区'])y=np.array([8566,6482,5335,7310])plt.barh(x,height=0.5,width=y,align='center',color=['r','g','b','y']) #绘图plt.title('全国各分区任务量',loc='center') #设置标题fora,binzip(x,y):plt.text(b,a,b,ha='left',va='bottom',fontsize=12,color="m") #添加数据标签plt.ylabel('分区') plt.xlabel('任务量') plt.show()运行截图:气泡图plt.figure(1)x=np.arange(0,13,1)y=x**2colors=y*10 #根据y值的大小生成不同的颜色area=y*10 #根据y值得大小生成大小不同的形状plt.scatter(x,y,c=colors,marker='o',s=area)#绘图plt.title('平均气温与啤酒销量的关系图',loc='center')#设置标题#添加数据标签fora,binzip(x,y):plt.text(a,b,b,ha='center',va='center',fontsize=10,color='w')plt.xlabel('平均气温(℃)')plt.ylabel('啤酒销量(万)')plt.savefig(r"d:\test111.jpg",dpi=1000,bbox_inches='tight',pad_inches=0)plt.show()绘制饼图x=np.array([8566,5335,7310,6482])labels=['东区','北区','南区','西区']explode=[0.05,0.02,0.03,0.04] #让第一块离圆心远一点labeldistance=1.2plt.pie(x,labels=labels,autopct='%.0f%%',shadow=True,explode=explode,radius=1.0,labeldistance=labeldistance)plt.title('全国各分区任务量占比',loc='center')plt.show()实验九数组使用一、实验目的和要求掌握Python扩展库numpy中数组的使用。熟悉使用Python扩展库numpy的通用函数。二、实验内容绘制正态分布的概率密度曲线。下载mnist数据集/exdb/mnist/中的t10k-labels-idx1-ubyte.gz数据,该数据集的标签数据从第9个字节开始。将下载的数据转换成one-hot格式,如2对应的one-hot格式为:0010000000。三、实验仪器、设备计算机、windows操作系统,安装有Anaconda/Pycharm/VsCode四、实验原理 1)使用numpy提供的函数生成所需的数组对象。2)使用numpy提供的函数对数据进行计算。五、实验步骤1)启动IDE2)输入程序。3)执行程序。4)出现问题,调测程序,直至运行结果正确。六、实验注意事项绘图使用sns.distplot()方法。由于数据集是压缩的,需要先解压,使用gzip模块的open()方法,然后从数据集的第9个字节开始读取,读取的内容放入ndarray中,最后将数组内容转化为one-hot内容。七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)参考程序:importseabornassnsfrommatplotlibimportpyplotaspltimportnumpyasnpnp.random.seed(1234)#设置随机数种子#生成各种正态分布随机数rm1=np.random.normal(loc=0,scale=1,size=1000)rm2=np.random.normal(loc=0,scale=2,size=1000)rm3=np.random.normal(loc=0,scale=3,size=1000)rm4=np.random.normal(loc=0,scale=4,size=1000)#处理中文显示和负号问题plt.rcParams["font.family"]="SimHei"plt.rcParams['axes.unicode_minus']=Falseplt.title("正态分布均值一定时,标准差和密度函数的关系")#绘图sns.distplot(rm1,hist=False,kde=True,color="black",label="u=0,s=1")sns.distplot(rm2,hist=False,kde=True,color="red",label="u=0,s=2")sns.distplot(rm3,hist=False,kde=True,color="green",label="u=0,s=3")sns.distplot(rm4,hist=False,kde=True,color="blue",label="u=0,s=4")plt.legend()plt.show()2.importos.pathimportgzipimportpickleimportosimportnumpyasnpimportssl#关键:关闭SSL验证(解决https打不开问题)ssl._create_default_https_context=ssl._create_unverified_contextdataset={}url_base="/cvdf-datasets/mnist/"key_file={'test_label':'t10k-labels-idx1-ubyte.gz'}dataset_dir="e:\\"def_download(file_name):file_path=dataset_dir+"/"+file_nameifos.path.exists(file_path):returnprint("正在下载数据集"+file_name+"...")urllib.request.urlretrieve(url_base+file_name,file_path)print("下载完成".center(20,"-"))def_load_label(file_name):file_path=dataset_dir+"/"+file_nameprint("Converting"+file_name+"toNumPyArray...")withgzip.open(file_path,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海海关学院《阿拉伯国家历史与文化常识》2025-2026学年第一学期期末试卷(B卷)
- 智医云考试题库及答案
- 新冠肺炎患者舒适护理
- 护理课件公众号内容分享
- 护理领导力与团队建设
- (2026年)安全生产月安全知识竞赛试题及答案
- 腹腔镜手术护理安全管理制度
- 重症肌无力合并构音障碍管理专家共识(2026版)
- 2026年招标投标法考试题库及答案
- 管辖权异议复议申请书
- 燃气管网试验检测计划
- 2025年徐州市中考历史试题卷(含答案及解析)
- 医保网络安全知识培训课件
- 朋友合伙炒股协议书
- 全家便利店运营标准化培训
- 招商总监协议合同
- 《形位公差培训》课件
- 农村集体土地联营联建协议书
- GB/T 43878-2024旋挖钻机截齿
- 软磁材料及应用-March
- 喷涂厂厂管理制度
评论
0/150
提交评论