Python课程设计实训报告简易计算器的设计与应用_第1页
Python课程设计实训报告简易计算器的设计与应用_第2页
Python课程设计实训报告简易计算器的设计与应用_第3页
Python课程设计实训报告简易计算器的设计与应用_第4页
Python课程设计实训报告简易计算器的设计与应用_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

Python语言程序课程设计(报告)《Python语言程序课程设计》(报告)题目:简易计算器的设计与应用

摘要本文主要设计了简易计算器和即时时钟,主要的软件平台是Python语言编程实现的主要功能是进行简易计算和时间观看,主要技术指标是库的应用和按键位置运算,本设计的优点是可以进行生活中的简易计算取得结果,使运算更加方便。可以应用到日常基本生活运算领域,需要改进的是无法进行更精确地运算,希望在进行系统学习后可以改进次设计,如今Python在智能化时代的应用越来越多,需要我们不断学习和精进自己的技能,跟上时代的脚步,本次设计贴合生活,与人工智能适应人类需要的目标相符。关键词:按键调用turtle库图形用户界面小4号宋体小4号宋体,两个关键词之间空两格后退两个汉字,4号黑体目录一级标题为小四号黑体,顶格。章节号后空2个空格。一级标题为小四号黑体,顶格。章节号后空2个空格。TOC\o"1-3"\h\u第1章概述 此处无页码,页码下面居中一级标题,三号黑体居中,“第1章此处无页码,页码下面居中一级标题,三号黑体居中,“第1章”与“绪论”之间空2格;上下分别空一行,小4号。二级标题为小四号黑体,缩进两个汉字。章节号后空2个空格。第1章概述1.1课题选择正文中文为小四号宋体,数字和英文为小四号TimesNewRoman,各段行首缩进两正文中文为小四号宋体,数字和英文为小四号TimesNewRoman,各段行首缩进两个汉字。页面设置如前。1.2设计目的为了便于程序的维护和更好的实现模块化,好的程序都会分解为很多函数。可以这么说,对于任何的编程语言,函数都是一个非常重要的概念[4]。python

不仅简化了函数的定义过程,而且还大量借鉴了其他函数编程语言中的优秀特性1.3设计工具Python语言编程软件Python3.3第2章设计内容2.1题目12.1.1设计任务及要求编程实现一个图形界面的具有加,减,乘,除运算功能的计算机2.1.2程序代码#*_*coding:utf8*_*importtkinterfromfunctoolsimportpartial#按钮输入调用defget_input(entry,argu):#从entry窗口展示中获取输入的内容input_data=entry.get()#合法运算符:+-*/--**//+-#输入合法性判断的优化#最后一个字符不是纯数字(已经有算数符号),原窗口值不为空,且输入值为运算符#ifnotinput_data[-1:].isdecimal()and(notargu.isdecimal()):#ifinput_data[-2:]in["--","**","//","+-"]:#return#if(input_data[-1:]+argu)notin["--","**","//","+-"]:#return##出现连续+,则第二个+为无效输入,不做任何处理if(input_data[-1:]=='+')and(argu=='+'):return#出现连续+--,则第三个-为无效输入,不做任何处理if(input_data[-2:]=='+-')and(argu=='-'):return#窗口已经有--后面字符不能为+或-if(input_data[-2:]=='--')and(arguin['-','+']):return#窗口已经有**后面字符不能为*或/if(input_data[-2:]=='**')and(arguin['*','/']):return#输入合法将字符插入到entry窗口结尾entry.insert("end",argu)#退格(撤销输入)defbackspace(entry):input_len=len(entry.get())#删除entry窗口中最后的字符entry.delete(input_len-1)#清空entry内容(清空窗口)defclear(entry):entry.delete(0,"end")#计算defcalc(entry):input_data=entry.get()#计算前判断输入内容是否为空;首字符不能为*/;*/不能连续出现3次;ifnotinput_data:returnclear(entry)#异常捕获,在进行数据运算时如果出现异常进行相应处理#noinspectionPyBroadExceptiontry:#eval()函数用来执行一个字符串表达式,并返回表达式的值;并将执行结果转换为字符串output_data=str(eval(input_data))exceptException:#将提示信息输出到窗口entry.insert("end","Calculationerror")else:#将计算结果显示在窗口中iflen(output_data)>20:entry.insert("end","Valueoverflow")else:entry.insert("end",output_data)if__name__=='__main__':root=tkinter.Tk()root.title("Yummy")#框体大小可调性,分别表示x,y方向的可变性;root.resizable(0,0)button_bg='pink'math_sign_bg='DarkTurquoise'#*_*coding:utf8*_*importtkinterfromfunctoolsimportpartial#按钮输入调用defget_input(entry,argu):#从entry窗口展示中获取输入的内容input_data=entry.get()#合法运算符:+-*/--**//+-#输入合法性判断的优化#最后一个字符不是纯数字(已经有算数符号),原窗口值不为空,且输入值为运算符#ifnotinput_data[-1:].isdecimal()and(notargu.isdecimal()):#ifinput_data[-2:]in["--","**","//","+-"]:#return#if(input_data[-1:]+argu)notin["--","**","//","+-"]:#return##出现连续+,则第二个+为无效输入,不做任何处理if(input_data[-1:]=='+')and(argu=='+'):return#出现连续+--,则第三个-为无效输入,不做任何处理if(input_data[-2:]=='+-')and(argu=='-'):return#窗口已经有--后面字符不能为+或-if(input_data[-2:]=='--')and(arguin['-','+']):return#窗口已经有**后面字符不能为*或/if(input_data[-2:]=='**')and(arguin['*','/']):return#输入合法将字符插入到entry窗口结尾entry.insert("end",argu)#退格(撤销输入)defbackspace(entry):input_len=len(entry.get())#删除entry窗口中最后的字符entry.delete(input_len-1)cal_output_bg='Yellow'button_active_bg='gray'#justify:显示多行文本的时候,设置不同行之间的对齐方式,可选项包括LEFT,RIGHT,CENTER#文本从窗口左方开始显示,默认可以显示20个字符#row:entry组件在网格中的横向位置#column:entry组件在网格中的纵向位置#columnspan:正常情况下,一个插件只占一个单元;可通过columnspan来合并一行中的多个相邻单元entry=tkinter.Entry(root,justify="right",font=1)entry.grid(row=0,column=0,co#*_*coding:utf8*_*importtkinterfromfunctoolsimportpartial#按钮输入调用defget_input(entry,argu):#从entry窗口展示中获取输入的内容input_data=entry.get()#合法运算符:+-*/--**//+-#输入合法性判断的优化#最后一个字符不是纯数字(已经有算数符号),原窗口值不为空,且输入值为运算符#ifnotinput_data[-1:].isdecimal()and(notargu.isdecimal()):#ifinput_data[-2:]in["--","**","//","+-"]:#return#if(input_data[-1:]+argu)notin["--","**","//","+-"]:#return##出现连续+,则第二个+为无效输入,不做任何处理if(input_data[-1:]=='+')and(argu=='+'):return#出现连续+--,则第三个-为无效输入,不做任何处理if(input_data[-2:]=='+-')and(argu=='-'):return#窗口已经有--后面字符不能为+或-if(input_data[-2:]=='--')and(arguin['-','+']):return#窗口已经有**后面字符不能为*或/if(input_data[-2:]=='**')and(arguin['*','/']):return#输入合法将字符插入到entry窗口结尾entry.insert("end",argu)#退格(撤销输入)defbackspace(entry):input_len=len(entry.get())#删除entry窗口中最后的字符entry.delete(input_len-1)lumnspan=4,padx=10,pady=10)defplace_button(text,func,func_params,bg=button_bg,**place_params):#偏函数partial,可以理解为定义了一个模板,后续的按钮在模板基础上进行修改或添加特性#activebackground:按钮按下后显示颜place_params色my_button=partial(tkinter.Button,root,bg=button_bg,padx=10,pady=3,activebackground=button_active_bg)button=my_button(text=text,bg=bg,command=lambda:func(*func_params))button.grid(**place_params)#文本输入类按钮place_button('7',get_input,(entry,'7'),row=1,column=0,ipadx=5,pady=5)place_button('8',get_input,(entry,'8'),row=1,column=1,ipadx=5,pady=5)place_button('9',get_input,(entry,'9'),row=1,column=2,ipadx=5,pady=5)place_button('4',get_input,(entry,'4'),row=2,column=0,ipadx=5,pady=5)place_button('5',get_input,(entry,'5'),row=2,column=1,ipadx=5,pady=5)place_button('6',get_input,(entry,'6'),row=2,column=2,ipadx=5,pady=5)place_button('1',get_input,(entry,'1'),row=3,column=0,ipadx=5,pady=5)place_button('2',get_input,(entry,'2'),row=3,column=1,ipadx=5,pady=5)place_button('3',get_input,(entry,'3'),row=3,column=2,ipadx=5,pady=5)place_button('0',get_input,(entry,'0'),row=4,column=0,padx=8,pady=5,columnspan=2,sticky=tkinter.E+tkinter.W+tkinter.N+tkinter.S)place_button('.',get_input,(entry,'.'),row=4,column=2,ipadx=7,padx=5,pady=5)#运算输入类按钮(只是背景色不同)#字符大小('+','-'宽度不一样,使用ipadx进行修正)place_button('+',get_input,(entry,'+'),bg=math_sign_bg,row=1,column=3,ipadx=5,pady=5)place_button('-',get_input,(entry,'-'),bg=math_sign_bg,row=2,column=3,ipadx=5,pady=5)place_button('*',get_input,(entry,'*'),bg=math_sign_bg,row=3,column=3,ipadx=5,pady=5)place_button('/',get_input,(entry,'/'),bg=math_sign_bg,row=4,column=3,ipadx=5,pady=5)#功能输入类按钮(背景色、触发功能不同)place_button('<-',backspace,(entry,),row=5,column=0,ipadx=5,padx=5,pady=5)place_button('C',clear,(entry,),row=5,column=1,pady=5,ipadx=5)place_button('=',calc,(entry,),bg=cal_output_bg,row=5,column=2,ipadx=5,padx=5,pady=5,columnspan=2,sticky=tkinter.E+tkinter.W+tkinter.N+tkinter.S)root.mainloop()2.1.3编译调试及运行结果图1.1简易计算机运行结果Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。

Python提供了高效的高级数据结构[1],还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,

随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。

Python在各个编程语言中比较适合新手学习,Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。

Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。2.2题目2利用turtle库重新实现一个时钟运行代码importturtleimportdatetime'''悬空移动'''defmove(distance): turtle.penup() turtle.forward(distance) turtle.pendown()'''创建表针turtle'''defcreateHand(name,length): turtle.reset() move(-length*0.01) turtle.begin_poly() turtle.forward(length*1.01) turtle.end_poly() hand=turtle.get_poly() turtle.register_shape(name,hand)'''创建时钟'''defcreateClock(radius): turtle.reset() turtle.pensize(7) foriinrange(60): move(radius) ifi%5==0: turtle.forward(20) move(-radius-20) else: turtle.dot(5) move(-radius) turtle.right(6)'''获得今天是星期几'''defgetWeekday(today): return['星期一','星期二','星期三','星期四','星期五','星期六','星期日'][today.weekday()]'''获得今天的日期'''defgetDate(today): return'%s年%s月%s日'%(today.year,today.month,today.day)'''动态显示表针'''defstartTick(second_hand,minute_hand,hour_hand,printer): today=datetime.datetime.today() second=today.second+today.microsecond*1e-6 minute=today.minute+second/60. hour=(today.hour+minute/60)%12 #设置朝向 second_hand.setheading(6*second) minute_hand.setheading(6*minute) hour_hand.setheading(12*hour) turtle.tracer(False) printer.forward(65) printer.write(getWeekday(today),align='center',font=("Courier",14,"bold")) printer.forward(120) printer.write('12',align='center',font=("Courier",14,"bold")) printer.back(250) printer.write(getDate(today),align='center',font=("Courier",14,"bold")) printer.back(145) printer.write('6',align='center',font=("Courier",14,"bold")) printer.home() printer.right(92.5) printer.forward(200) printer.write('3',align='center',font=("Courier",14,"bold")) printer.left(2.5) printer.back(400) printer.write('9',align='center',font=("Courier",14,"bold")) printer.home() turtle.tracer(True) #100ms调用一次 turtle.ontimer(lambda:startTick(second_hand,minute_hand,hour_hand,printer),100)'''开始运行时钟'''defstart(): #不显示绘制时钟的过程 turtle.tracer(False) turtle.mode('logo') createHand('second_hand',150) createHand('minute_hand',125) createHand('hour_hand',85) #秒,分,时 second_hand=turtle.Turtle() second_hand.shape('second_hand') minute_hand=turtle.Turtle() minute_hand.shape('minute_hand') hour_hand=turtle.Turtle() hour_hand.shape('hour_hand') forhandin[second_hand,minute_hand,hour_hand]: hand.shapesize(1,1,3) hand.speed(0) #用于打印日期等文字 printer=turtle.Turtle() printer.hideturtle() printer.penup() createClock(160) #开始显示轨迹 turtle.tracer(True) startTick(second_hand,minute_hand,hour_hand,printer) turtle.mainloop()if__name__=='__main__': start()运行结果图2.1:钟表的运行2.3题目3利用turtle库绘制一个五角星运行代码#Five_Star.py#导入库fromturtleimport*pensize(5)pencolor('black')fillcolor('red')begin_fill()forward(200)right(144)fd(200)right(144)fd(200)right(144)fd(200)right(144)fd(200)end_fill()运行结果图3.1:五角星第3章总结本次实训,是对我本事的进一步锻炼,也是一种考验。从中获得的诸多收获,也是很可贵的,是十分有意义的。经过这次实训,我收获了很多,一方面学习到了许多以前没学过的专业知识与知识的应用,另一方面还提高了自我动手做项目的本事。在实训中我学到了许多新的知识。是一个让我把书本上的理论知识运用于实践中的好机会,原先,学的时候感叹学的资料太难懂,此刻想来,有些其实并不难,关键在于理解。在这次实训中还锻炼了我其他方面的本事,提高了我的综合素质。它锻炼了我做项目的本事,提高了独立思考问题、自我动手操作的本事,在工作的过程中,复习了以前学习过的知识,并掌握了一些应用知识的技巧等。从那里,我学会了下面找工作的心态:继续学习,不断提升理论涵养。在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更应该把学习作为保持工作积极性的重要途径。走上工作岗位后,我会积极响应单位号召,结合工作实际,不断学习理论、业务知识和社会知识,用先进的理论武装头脑,用精良的业务知识提升能力,以广博的社会知识拓展视野。这次课程设计的实践和体验下来,对我来说学到的不仅是那些知识,更多的是团队和合作。现在想来,也许学校安排的课程设计有着它更深层的意义吧,它不仅仅让我们综合那些理论知识来运用到设计和创新,还让我们知道了一个团队凝聚在一起时所能发挥出的巨大潜能!python作为我们的主要专业课之一,虽然在开学初我对这门课并没有什么兴趣,觉得那些程序枯燥乏味,但在这次课程设计后我发现自己在一点一滴的努力中兴趣也在逐渐增加。一开始还在为到底选那个课题而发生分歧,最后还是在老师的耐心分析和指导下完成了课题的选定,但是随之而来的问题却远比我们想想的要困难的多过没想到这项看起来不需要多少技术的工作却是非

温馨提示

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

评论

0/150

提交评论