20211308武久淳 实验二 《计算器设计》实验报告
20211308 2021-2022-2 《Python程序设计》 计算器设置 实验报告
课程信息
课程 | Python程序设计 |
---|---|
班级 | 2113 |
姓名 | 武久淳 |
学号 | 20211308 |
实验教师 | 王志强 |
实验日期 | 2022年3月31日 |
必修/选修 | 公选课 |
1.实验内容
- 设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。
- 考核基本语法、判定语句、循环语句、逻辑运算等知识点
2.实验要求
- 创建工程项目,使用Python语言实现具体的操作运算,并完成程序调试和运行,代码托管到码云。
3.实验设想
- 由于之前对于python的thinker库有所了解,所以准备用thinker库实现有按钮以及界面的简易计算器。
- 计算器预想功能
- 加减乘除
- 平方
- 开方运算
- 求倒数
- 归零
- 退格
4.实验内容
1.准备工作
- 引入thinker库
import thinker as tk
- 定义判断变量并初始化框的内容
equal=False
text1 =''
2.生成控制部分
- 生成预想窗体
root=tk.TK() #窗体
root.geometry('450x600') #设置窗口大小
root.title('简易计算器')
接下来要生成按钮,这一步对我来说比较困难,没有相应的手段,经过不断地求救CSDN大佬,终于得到了启发,接下来我就用大佬的方法进行实现。
- 生成按钮
def create_btn(text,col,row,cs,rs,px=(1,1),py=(1,1)): #函数生成按钮
t=text
t=t.replace('×','*')
t=t.replace('÷','/')
t=t.replace('x²','**2')
t=t.replace('1/x','**(-1)')
t=t.replace('x开方','**(0.5)')
a=tk.Button(root,text=text,width=4,command=lambda:(text_print(t))) #输入内容
a.grid(column=col,row=row,columnspan=cs,rowspan=rs,padx=px,pady=py,sticky='nswe')
return(a)
这里用replace函数去代替文字上的内容。
- 参考链接
https://jingyan.baidu.com/article/af9f5a2dde4e0502140a45a7.html - 生成按钮位置以及功能
btn={} #生成按钮
btn['1']=create_btn('1',0,5,1,1)
btn['2']=create_btn('2',1,5,1,1)
btn['3']=create_btn('3',2,5,1,1)
btn['4']=create_btn('4',0,4,1,1)
btn['5']=create_btn('5',1,4,1,1)
btn['6']=create_btn('6',2,4,1,1)
btn['7']=create_btn('7',0,3,1,1)
btn['8']=create_btn('8',1,3,1,1)
btn['9']=create_btn('9',2,3,1,1)
btn['0']=create_btn('0',0,6,1,1)
btn['.']=create_btn('.',2,6,1,1)
btn['=']=create_btn('=',4,5,1,2)
btn['+']=create_btn('+',3,6,1,1)
btn['-']=create_btn('-',3,5,1,1)
btn['*']=create_btn('×',3,4,1,1)
btn['/']=create_btn('÷',4,4,1,1)
btn['←']=create_btn('←',1,2,1,1)
btn['C']=create_btn('C',2,2,1,1)
btn['(']=create_btn('(',3,2,1,1)
btn[')']=create_btn(')',4,2,1,1)
btn['**2']=create_btn('x²',3,3,1,1)
btn['**(-1)']=create_btn('1/x',4,3,1,1)
btn['**(0.5)']=create_('x开方',1,6,1,1)
理解上面这段代码,btn内的内容即为显示出的内容,create_bin函数中第一个为text内容及返回的位置坐标(行坐标、列坐标、长度、宽度)
- 输出输入框和显示框
input=tk.Label(root,text='',bg='white',fg='black',font=('宋体',24),anchor='w',relief='flat') #生成输入框
input.grid(column=0,row=0,columnspan=5,rowspan=1,sticky='we')
output=tk.Label(root,bg='white',fg='grey',height=1,font=('宋体',22),anchor='w',relief='flat') #生成显示框
output.grid(column=0,row=1,columnspan=5,rowspan=1,sticky='we')
- 自动填充
后期运行的时候发现运算框大小出现问题,于是又求救CSDN大佬获得了填充的方法
def grid_rowconfigure(*rows): #函数填充行。*rows:允许接收多个参数
for i in rows:
root.grid_rowconfigure(i,weight=1)
def grid_columnconfigure(*cols): #函数填充列。*cols:允许接收多个参数
for i in cols:
root.grid_columnconfigure(i,weight=1)
grid_rowconfigure(2,3,4,5,6)
grid_columnconfigure(0,1,2,3,4)
3.生成主体函数部分
- 定义退格、清空、判断
def text_print(x):
global textchange,equal_is #声明全局变量
if x!='=':
if x=='←':
a=str(textchange)[0:-1]
textchange=a #退格
elif x=='C':
textchange='' #清空
else:
textchange=str(textchange)+str(x)
la.configure(text=textchange)
show_is()
equal_is=False #判断
if x=='=':
text_equal() #计算
- 判断
def show_is(): #显示框内容
global textchange #声明全局变量
if textchange!='':
try:
textshow=eval(textchange)
except (SyntaxError,TypeError,NameError):
lab.configure(text='错误')
else:
lab.configure(text=textshow)
else:
lab.configure(text='')
- 输出结果
def text_equal(event=None): #函数计算结果并上到输入框
global textchange,equal_is #声明全局变量
if lab['text']!='错误' and equal_is==False:
textchange=lab['text'] #无格式错误时,计算结果
la.configure(text=textchange) #输入框显示结果
lab.configure(text='') #清空显示框
equal_is=True
5.最大的困难
如何将键盘按键和事件相连
经过不断的搜寻搜寻,最后只能模仿大佬的代码
参考连接
https://blog.csdn.net/xoofly/article/details/89736152
https://blog.csdn.net/weixin_52132159/article/details/115816000
6.实现截图
将代码上传到码云
实验中的问题以及解决方案
1.生成界面按钮时没有思路
经过搜寻各路资料,搜寻到可以利用定义函数的方法,还学习到了python中将数据可视化的函数grid()
2.输出界面时有空白
上网搜寻关于按钮空白填充的文章,找到自动填充的方法。
3.将键盘按键与事件相连
搜寻资料,理解CSDN上大佬的做法,这一步还是很困难,只能照猫画虎,解决问题了
4.command=lambda‘这个至关重要的匿名函数
运算时借助了大佬的想法,没有使用简单的return 运算,而是采用了这个匿名函数
其他(感悟)
即使之前对于thinker库有所了解,但还是发现python库的功能太强大,也初步理解了数据可视化的内容,thinker库自带的一些函数真是YYDS,但确实在实践中有很多问题是之前不曾料想的,所以还是需要多多实践、多多学习、多多进步
参考链接
https://jingyan.baidu.com/article/af9f5a2dde4e0502140a45a7.html
https://blog.csdn.net/xoofly/article/details/89736152
https://blog.csdn.net/weixin_52132159/article/details/115816000
https://jingyan.baidu.com/article/af9f5a2dde4e0502140a45a7.html
https://blog.csdn.net/weixin_36489344/article/details/113674382
https://blog.csdn.net/zanllp/article/details/80199369
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)