首页 > 编程语言 >Python项目 简单计算器的二次开发

Python项目 简单计算器的二次开发

时间:2024-03-04 16:22:05浏览次数:37  
标签:Python text self label print result 计算器 二次开发 wx

在互联网上找到一个简单计算器的项目源码

点击查看代码
# 计算器
# 加法
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按钮,清空文本框中的内容。

进行一次乘法运算

结果如下

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

标签:Python,text,self,label,print,result,计算器,二次开发,wx
From: https://www.cnblogs.com/aloe-cong/p/18052059

相关文章

  • python merge函数使用
    函数语法:pd.merge(left,right,how="inner,on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=True)参数解释:left-数据顿对象。right-另一个数据顿对象on-要连接的列(名称)。必须在左侧和右侧数据框对象中找到lefton-左数据框......
  • H3C利用python开socks5
    H3C利用python开socks5#!/usr/bin/envpythonfromSocketServerimportBaseServer,ThreadingTCPServer,StreamRequestHandlerfromsocketimportsocket,AF_INET,SOCK_STREAMimportsignalimportstructimportsysimportthreadimportos'''exec(......
  • python获取服务器基本信息的脚本
     之前我发布了批量收集服务器信息脚本,本次更新优化了脚本,对脚本设置了trycatch抛出异常等等,收集信息如下:ip地址","主机名","序列号","服务器型号","系统盘数量","系统盘符","系统盘容量","系统盘分区","硬盘列表","硬盘数量","CPU核数","CP......
  • 利用python的http.server定制自己的页面和响应
    pythonhttp.server简介pythonhttp.server是一个简单的基础的httpserver,默认查找网站根目录的index.html文件,如果没有index.html文件,则放回网站根目录文件视图这里我们想对http.server进行修改,实现我们特定的需求,如果只变化html确实能展现不能的静态页面,但是没有办法进行交互,如......
  • python -- 解决安装pyxll-jupyter时出现“TimeoutError: The read operation timed ou
     在cmd输入命令”pipinstallpyxll-jupyter“进行安装,控制台出现以下报错信息:Downloadingpyxll_jupyter-0.5.2-py3-none-any.whl(46kB)----------------------------------------46.3/46.3kB16.1kB/seta0:00:00Downloadingjupyter-1.0.0-py2.py3-none-any.whl......
  • Python-数值类型
    数值类型1.内置数值工具内置数学函数:pow:计算幂abs:计算绝对值sum:求和round:向上取整(四舍五入)max:求最大值min:求最小值>>>pow(2,4),2**4,2.0**4.0(16,16,16.0)>>>abs(-42.0),sum((1,2,3,4))(42.0,10)>>>min((1,2,3,4)),max((1,2,3,4))......
  • python hashlib模块详解
    hashlib是python自带的加密模块,提供了一些基础常用的加密方式,如:md5(),sha1(),sha224(),sha256(),sha384(),sha512(),blake2b(),blake2s() Hash对象提供了4个方法: --update(data):更新hash对象的字节数据,data是需要加密的文本内容,需要转为bytes类型,如果”abc123”.en......
  • 详解Python中sys模块的功能与应用
    本文分享自华为云社区《深入Python:sys模块的功能与应用详解》,作者:柠檬味拥抱。在Python的标准库中,sys 模块是一个常用而强大的工具,它提供了与Python解释器交互的函数和变量。本文将介绍sys模块的一些常用函数和方法,并通过实际的代码实例来解析它们的用法。1.sys.argv-命令......
  • Python实现snap:对齐多张遥感影像的空间范围
      本文介绍基于Python中ArcPy模块,实现基于栅格图像批量裁剪栅格图像,同时对齐各个栅格图像的空间范围,统一其各自行数与列数的方法。  首先明确一下我们的需求。现有某一地区的多张栅格遥感影像,其虽然都大致对应着同样的地物范围,但不同栅格影像之间的空间范围、行数与列数、像......
  • python之为函数执行设置超时时间(允许函数执行的最大时间)
    1、背景    通常我们在自定义一个函数后,会调用这个函数来完成我们想要的功能。  就拿爬虫来举例,发送请求后服务器会在指定时间内响应(通常这个时间很短),但是有可能服务器没有返回任何数据。  无论是服务器已经识别爬虫不予返回数据亦或者是服务器繁忙等其他原因,......