Python项目 简单计算器的二次开发
在互联网上找到一个简单计算器的项目源码
点击查看代码
# 计算器
# 加法
def add(a, b):
c = a + b
print(f"结果为: {c:.2f}")
# 减法
def sub(a, b):
c = a - b
print(f"结果为: {c:.2f}")
# 乘法
def mul(a, b):
c = a * b
print(f"结果为: {c:.2f}")
# 除法,保留两位小数
def div(a, b):
c = a / b
print(f"结果为: {c:.2f}")
# 菜单
def menu():
print("1.加法")
print("2.减法")
print("3.乘法")
print("4.除法")
print("0.退出")
# 主函数
def main():
while True:
menu()
choice = int(input("请输入您的选择: "))
if choice == 1:
a = float(input("请输入第一个数: "))
b = float(input("请输入第二个数: "))
add(a, b)
elif choice == 2:
a = float(input("请输入第一个数: "))
b = float(input("请输入第二个数: "))
sub(a, b)
elif choice == 3:
a = float(input("请输入第一个数: "))
b = float(input("请输入第二个数: "))
mul(a, b)
elif choice == 4:
a = float(input("请输入第一个数: "))
b = float(input("请输入第二个数: "))
div(a, b)
elif choice == 0:
break
else:
print("输入错误,请重新输入")
# 运行主函数
main()
运行程序
这个简单的程序首先需要输入数字来选择功能,才能够进行运算,它有很多的改进空间。
-
程序一次只能执行一次运算,用户不能在上一次运算的基础上继续进行运算。
-
程序没有异常处理,在除法运算中,未对除数为0的情况进行处理,会导致程序报错。
-
程序没有直观的操作,用户需要选择操作后才能输入数字,这增加了用户的操作负担。可以改进为在输入数字时同时选择操作,或者提供更直观的界面。
-
程序结果输出时只是简单地打印在控制台上,没有提供更友好的界面或格式化输出结果的选项。
改进
将程序改为图形界面,使用wxPython库来实现,将命令行交互程序转化为类似于现实的符合直观的计算器,这样用户可以更直观地进行输入和操作,提升用户体验。
改进后的代码
点击查看代码
import wx
class CalculatorFrame(wx.Frame):
def __init__(self, *args, **kw):
super(CalculatorFrame, self).__init__(*args, **kw)
self.InitUI()
def InitUI(self):
panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
# 显示结果的文本框
self.result_text = wx.TextCtrl(panel, style=wx.TE_RIGHT | wx.TE_READONLY, size=(250, 50))
font = wx.Font(48, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)
self.result_text.SetFont(font)
vbox.Add(self.result_text, flag=wx.EXPAND | wx.ALL, border=10)
# 创建按钮
btns = [
'7', '8', '9', '/',
'4', '5', '6', '*',
'1', '2', '3', '-',
'.', '0', '=', 'C'
]
grid = wx.GridSizer(5, 4, 0, 5) # 5 行 4 列
for label in btns:
if label == '=':
button = wx.Button(panel, label=label, size=(70, 70))
elif label == 'C':
button = wx.Button(panel, label=label, size=(70, 70), style=wx.BU_EXACTFIT)
else:
button = wx.Button(panel, label=label)
button.SetMinSize((100, 100)) # 设置按钮的最小尺寸
self.Bind(wx.EVT_BUTTON, self.OnButtonPress, button)
grid.Add(button, 0, wx.EXPAND)
vbox.Add(grid, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)
panel.SetSizer(vbox)
self.SetTitle('简单计算器')
self.SetSize((350, 250))
self.Centre()
def OnButtonPress(self, event):
button = event.GetEventObject()
label = button.GetLabel()
if label == '=':
try:
result = eval(self.result_text.GetValue())
self.result_text.SetValue(str(result))
except:
self.result_text.SetValue('Error')
elif label == 'C':
self.result_text.SetValue('')
else:
current_text = self.result_text.GetValue()
new_text = current_text + label
self.result_text.SetValue(new_text)
def main():
app = wx.App()
frame = CalculatorFrame(None)
frame.Show()
app.MainLoop()
if __name__ == '__main__':
main()
在改进的程序中,当用户点击数字、运算符或小数点按钮时,会将对应的字符追加到文本框中。当用户点击等号按钮时,文本框中的表达式计算结果将显示在文本框中。此时用户可以在已有运算的基础上,通过按下运算符继续进行运算,如果需要重新运算,则要按下C按钮,清空文本框中的内容。
进行一次乘法运算结果如下
以上为乘法的运算示例,简单进行展示,其他的运算就省略了。自此,原程序已经改进成一个较为直观的简单计算器了。