Python环境下计算器的设计与实现

一、实验目的与要求

实验目的:锻炼可视化编程能力。

实验要求:

1. 熟悉VC++、Visual Studio C#或者Java编程环境。

2. 运用面向对象程序设计知识对实验题目进行分析和设计。

3. 进行程序编写和调试工作。

二、实验内容

使用MFC框架在Visual Studio 6.0环境下(也可使用Visual Studio c#或者Java编程环境)编写一个简易的计算器,能实现简单的加、减、乘、除四则运算,并加入特定的一些效果,如使计算器的颜色在红色,绿色和蓝色之间轮流变换等。完成诸如计算器对话框的创建、控件编辑、界面设计、关键功能的实现等工作。

三、实验设计

本次计算机设计实验采用python编程环境,设计分为两部分:

1)计算的实现 2)计算机可视化界面的实现

计算部分,采用python中自带的eval()函数为核心算法,原因在于eval()函数可以直接对输入其中的字符串进行计算,确保输入的字符串可计算即可,又采用try-except格式语句,对不能计算的情况进行处理,使其返回ERROR!

可视化界面设计部分,调用tkinter模块,内置多项可视化组件,其中包括文本输入框(Entry)、按钮组件(Button)、框架(Frame)、标签(Label)等等,引入各个组件并通过布局函数pack()逐次调整位置,令其尽量美观。大小方面使用expand=YES命令使用户可以自由调整大小。计算器颜色方面以下程序中提供了三种颜色可供选择,使用时选择#style.configure 。。。。。的其中一个语句,将#(注释符)去掉即可。

代码量部分,采用python编程环境代码量较少,仅50行(含注释),也更美观。

四、核心程序代码

‘’‘
from tkinter import *
from tkinter.ttk import *

将Frame的共同属性作为默认值,方便创建

def my_frame(master):
w=Frame(master)
w.pack(side=TOP,expand=YES,fill=BOTH)#expand控制fill开关,fill为X、Y、BOTH
return w

将Button的共同属性作为默认,方便创建

def my_Button(master,text,command):
w=Button(master,text=text,command=command,width=5)
w.pack(side=LEFT,expand=YES,fill=BOTH,padx=2,pady=2) #padx、pady设置按钮所占空间格大小
return w

退格键功能设置,将数字串最末字符删除并返回

def back(text):
if len(text)>0:
return text[:-1]
else:
return text

利用eval函数计算表达式的值

def calc(text):
try:
return eval(text) #此处为计算器的计算语句,简单粗暴
except (SyntaxError,ZeroDivisionError,NameError):
return 'ERROR!'

计算器界面实现

wind=Tk()
wind.title('Demut-Calculator') #标题
text=StringVar()

创建文本框

Entry(wind,textvariable=text).pack(expand=YES,fill=BOTH,padx=3,pady=4)

创建ttk子模块的Style对象,设置按钮内边距及颜色

style=Style()

style.configure('TButton',padding=3,background="#00FFFF",foreground="#008B8B")

style.configure('TButton',padding=3,background="#00FFFF",foreground="#87CEFA")

style.configure('TButton',padding=3,background="#87CEFA",foreground="#DA70D6")

创建第一行三个按钮

my1=my_frame(wind)
Label(my_Button(my1,'Backspace',lambda t=text:t.set(back(t.get()))),style="TButton")
Label(my_Button(my1,'Clear',lambda t=text:t.set('')),style="TButton")
Label(my_Button(my1,'Inverse',lambda t=text:t.set('-('+t.get()+')')),style="TButton")

创建其余四行

for key in ('789/','456*','123-','0.=+'):
my2=my_frame(wind)
for ch in key:
if ch =='=':
Label(my_Button(my2,ch,lambda t=text:t.set(calc(t.get()))),style="TButton")
else:
Label(my_Button(my2,ch,lambda t=text,c=ch:t.set(t.get()+c)),style="TButton")

wind.mainloop()

’‘’
五、实验结果

1)测试一:(验证+ - * / 的运算)

测试语句为:2+3*2+6/3

2)测试二: (验证带小数点的运算)

测试语句为:1.5+3.5

3)测试三: (验证带‘取负数操作’的运算)

测试语句为:2+2 之后对其取负数,再+1

4)测试四: (验证Backspace操作)

测试语句: 123 Backspace

5)测试五: (验证clear操作)

测试语句: 123 Clear

6)测试六: (验证非法语句的运算)

测试语句: 1+5*

7)测试七: (颜色变化)

六、实验总结

初次接触可视化界面的程序设计,选用python编程环境,在计算方面占有很大的优势,可以不用处理各个运算符的优先级顺序,但在界面设计部分需要注意很多因素,包括按钮的内外边距、文本框组件的布局位置、按钮背后的函数传参问题、非法语句的运算处理等等,因此此次实验有效锻炼了使用python处理问题的能力,在查找以及使用各个模块的同时,提高了代码的阅读效率以及利用率,在可视化部分自己有一个显著的提高。

另需特别声明:由于自身软件问题(pycharm),缺乏相应的bg颜色更改功能,按钮的背景颜色更改在代码中虽有体现,在此软件上确无法得到体现,而前景颜色可以展现出来,因此我保留了背景颜色更改语句,如有需要可运行查看。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 9,585评论 0 0
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,698评论 0 17
  • 第一天早上起床,本来以为他们会起不来,结果令人刮目相看,一班的所有学员五点多一点就都爬起床,整理自己的内务...
    夜色_1561阅读 3,584评论 2 0
  • 本文是对 Hands-On Machine Learing with Scikit-Learn and Tenso...
    CV_lsc阅读 5,649评论 0 1