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按钮,清空文本框中的内容。

进行一次乘法运算

结果如下

以上为乘法的运算示例,简单进行展示,其他的运算就省略了。自此,原程序已经改进成一个较为直观的简单计算器了。

posted @ 2024-03-04 16:20  不想再打代码了  阅读(43)  评论(0编辑  收藏  举报