Python制作简易版计算器(可用于初学者,课程设计,毕业设计,大作业) !!!

53 篇文章 14 订阅
订阅专栏

前文

      大家手机里都有一个出厂自带的计算器,需要用的时候直接掏出手机就能计算,特别的方便。
还记得我上小学and中学的时候,都会花10几块钱,买一个计算器、方便数学题目计算。
那时候好像进考场也可以带着计算器??
应该也许有可能是叭!!

​还有小时候很多大妈大爷的菜市场见到的计算器是很常见的,所以可见计算器的应用之广泛。

SO  大家已经猜到小编要做啥子了哈 @小粉今天带大家用Pyhton做一款简易版本的计算器小程序哦!!!

正文

该计算器思路:

ps:思路不一样哈 仅供参考

1、递归寻找表达式中只含有 数字和运算符的表达式,并计算结果

2、由于整数计算会忽略小数,所有的数字都认为是浮点型操作,以此来保留小数

使用技术:

1、正则表达式

2、递归

二、流程图:

​效果图如下😍😍😍😍😍😍:

​​

​附代码:

import re,os,sys

def compute_exponent(arg):
    """ 操作指数
    :param expression:表达式
    :return:计算结果
    """

    val = arg[0]
    pattern = re.compile(r'\d+\.?\d*[\*]{2}[\+\-]?\d+\.?\d*')
    mch = pattern.search(val)
    if not mch:
        return
    content = pattern.search(val).group()

    if len(content.split('**'))>1:
        n1, n2 = content.split('**')
        value = float(n1) ** float(n2)
    else:
        pass

    before, after = pattern.split(val, 1)
    new_str = "%s%s%s" % (before,value,after)
    arg[0] = new_str
    compute_exponent(arg)

def compute_mul_div(arg):
    """ 操作乘除
    :param expression:表达式
    :return:计算结果
    """

    val = arg[0]
    pattern = re.compile(r'\d+\.?\d*[\*\/\%\/\/]+[\+\-]?\d+\.*\d*')
    mch = pattern.search(val)
    if not mch:
        return
    content = pattern.search(val).group()

    if len(content.split('*'))>1:
        n1, n2 = content.split('*')
        value = float(n1) * float(n2)
    elif len(content.split('//'))>1:
        n1, n2 = content.split('//')
        value = float(n1) // float(n2)
    elif len(content.split('%'))>1:
        n1, n2 = content.split('%')
        value = float(n1) % float(n2)
    elif len(content.split('/'))>1:
        n1, n2 = content.split('/')
        value = float(n1) / float(n2)
    else:
        pass

    before, after = pattern.split(val, 1)
    new_str = "%s%s%s" % (before,value,after)
    arg[0] = new_str
    compute_mul_div(arg)


def compute_add_sub(arg):
    """ 操作加减
    :param expression:表达式
    :return:计算结果
    """
    while True:
        if arg[0].__contains__('+-') or arg[0].__contains__("++") or arg[0].__contains__('-+') or arg[0].__contains__("--"):
            arg[0] = arg[0].replace('+-','-')
            arg[0] = arg[0].replace('++','+')
            arg[0] = arg[0].replace('-+','-')
            arg[0] = arg[0].replace('--','+')
        else:
            break


    if arg[0].startswith('-'):

        arg[1] += 1
        arg[0] = arg[0].replace('-','&')
        arg[0] = arg[0].replace('+','-')
        arg[0] = arg[0].replace('&','+')
        arg[0] = arg[0][1:]
    val = arg[0]

    pattern = re.compile(r'\d+\.?\d*[\+\-]{1}\d+\.?\d*')
    mch = pattern.search(val)
    if not mch:
        return
    content = pattern.search(val).group()
    if len(content.split('+'))>1:
        n1, n2 = content.split('+')
        value = float(n1) + float(n2)
    else:
        n1, n2 = content.split('-')
        value = float(n1) - float(n2)

    before, after = pattern.split(val, 1)
    new_str = "%s%s%s" % (before,value,after)
    arg[0] = new_str
    compute_add_sub(arg)


def compute(expression):
    """ 操作加减乘除
    :param expression:表达式
    :return:计算结果
    """
    inp = [expression,0]

    # 处理表达式中的指数
    compute_exponent(inp)

    # 处理表达式中的乘除求余等
    compute_mul_div(inp)

    # 处理表达式的加减
    compute_add_sub(inp)
    if divmod(inp[1],2)[1] == 1:
        result = float(inp[0])
        result = result * -1
    else:
        result = float(inp[0])
    return result


def exec_bracket(expression):
    """ 递归处理括号,并计算
    :param expression: 表达式
    :return:最终计算结果
    """
    pattern = re.compile(r'\(([\+\-\*\/\%\/\/\*\*]*\d+\.*\d*){2,}\)')
    # 如果表达式中已经没有括号,则直接调用负责计算的函数,将表达式结果返回,如:2*1-82+444
    #if not re.search('\(([\+\-\*\/]*\d+\.*\d*){2,}\)', expression):
    if not pattern.search(expression):
        final = compute(expression)
        return final
    # 获取 第一个 只含有 数字/小数 和 操作符 的括号
    # 如:
    #    ['1-2*((60-30+(-40.0/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))']
    #    找出:(-40.0/5)
    content = pattern.search(expression).group()


    # 分割表达式,即:
    # 将['1-2*((60-30+(-40.0/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))']
    # 分割更三部分:['1-2*((60-30+(    (-40.0/5)      *(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))']
    before, nothing, after = pattern.split(expression, 1)

    print('before:',expression)
    content = content[1:len(content)-1]

    # 计算,提取的表示 (-40.0/5),并活的结果,即:-40.0/5=-8.0
    ret = compute(content)

    print('%s=%s' %( content, ret))

    # 将执行结果拼接,['1-2*((60-30+(      -8.0     *(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))']
    expression = "%s%s%s" %(before, ret, after)
    print('after:',expression)
    print("="*10,'previous result is',"="*10)

    # 循环继续下次括号处理操作,本次携带者的是已被处理后的表达式,即:
    # ['1-2*((60-30+   -8.0  *(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))']

    # 如此周而复始的操作,直到表达式中不再含有括号
    return exec_bracket(expression)



# 使用 __name__ 的目的:
#   只有执行 python index.py 时,以下代码才执行
#   如果其他人导入该模块,以下代码不执行
if __name__ == "__main__":
    flag = True

    os.system('clear')                                                     ###清屏###

    print('\n================================================================')
    print('\033[33m 欢迎使用计算器 :\033[0m')
    print('\n================================================================')



    while flag:
        calculate_input = raw_input('\033[32m请输入计算的表达式 | (退出:q)\033[0m')
        calculate_input = re.sub('\s*','',calculate_input)
        if len(calculate_input) == 0:
            continue
        elif calculate_input == 'q':
            sys.exit('退出程序')
        elif re.search('[^0-9\.\-\+\*\/\%\/\/\*\*\(\)]',calculate_input):
            print('\033[31m 输入错误,请重新输入!!!\033[0m')
        else:
            result = exec_bracket(calculate_input)
            print('the expression result is %s' % result)

结尾

好啦!最后写完了哈。

完整的文章项目代码可以来小白解答学习的Python交流圈:959755565 大家一起学习、成长,Figthing!!

如文章对你有帮助,“关注点赞”和评论是对我最大的支持!!!

51单片机计算器(源程序+流程图+答辩报告+综合设计)
m0_57007304的博客
03-04 1万+
保姆级讲解!C语言编程,使用51单片机及LCD1602显示屏实现!
50行python代码写个计算器教程_python计算器代码怎么写
2401_84616399的博客
04-26 1049
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。推荐阅读 点击标题可跳转。来获取用输入的内容,
如何用Python自制简单计算器?写起来就是那么简单!(代码全)
热门推荐
m0_60427022的博客
07-23 1万+
大家好,我是你们的python大猿,这是我的一次发文章,请大家多多关照,谢谢大家! 你们平常都是用手机or电脑自带的计算器把,今天,我就带你们用python做一个计算器 首先,我把运行效果放出来: 这是代码(大家看着注释一步一步学就可以了) from tkinter import root = Tk() root.title('计算机程序') frame = Frame(root) frame.pack(padx=10, pady=10) v1 = StringVar().
零基础做简易计算器超详细步骤 | MFC | Qt5 | C++ | Python | VS2017 | 温故而知新(上)
不唐
05-20 2019
目录1 前言2 新建MFC项目3 计算器界面设计4 简易计算器代码5 运行效果6 碎碎念 1 前言 MFC版本:零基础做简易计算器 | MFC | Qt5 | C++ | Python | VS2017 | 温故而知新(上) Qt版本:零基础做简易计算器 | MFC | Qt5 | C++ | Python | VS2017 | 温故而知新(下) 在VS2017中,结合MFC做一个简易计算器。 全过程记录在此文,每一步都很详细。 小声哔哔:因为很简单,所以步骤不多。 适合新手用来熟悉MFC的基本操作。 由于
python做简单的计算器,python编写简单计算器
wenangou的博客
08-26 1383
如:'-1-2*((-2+3)+(-2/2))' 应该处理成:['-1', '-', '2', '*', '(', '(', '-2', '+', '3', ')', '+', '(', '-2', '/', '2', ')', ')']。如:'-1-2*((-2+3)+(-2/2))' 应该处理成:['-1', '-', '2', '*', '(', '(', '-2', '+', '3', ')', '+', '(', '-2', '/', '2', ')', ')']。表示匹配小数点0次或1次;
python计算器代码,Python实现两款计算器功能示例
weixin_42121725的博客
03-26 2764
本文实例为大家分享了Python实现计算器功能示例代码,供大家参考,具体内容如下1.简单计算器#计算一个表达式的时候,首先肯定是先算括号里面的,再算乘除法,后算加减法import re# 1.去括号def remove_kuohao(expression):'''这是一个去除括号的函数:param expression: 传进来的表达式:return: 计算后的结果'''while True:re...
举一反三学python(12)—制作简易计算器
m0_58231750的博客
05-09 1188
b_equal = tk.Button(win, text='=', width=5, height=3, font=('宋体', 16), relief=tk.FLAT, bg='#b1b2b2')b_dot = tk.Button(win, text='.', width=5, font=('宋体', 16), relief=tk.FLAT, bg='#eacda1')下图为简易、实用的计算器的效果图,今天展示用百行代码完成。
课程设计基于Python遗传算法解决TSP问题源码课程大作业.zip
10-18
课程设计基于Python遗传算法解决TSP问题源码课程大作业.zip课程设计基于Python遗传算法解决TSP问题源码课程大作业.zip课程设计基于Python遗传算法解决TSP问题源码课程大作业.zip课程设计基于Python遗传算法解决TSP...
Python开发基于Pyqt5设计实现的简易版水果识别系统源码(毕业设计).zip
最新发布
05-14
Python开发基于Pyqt5设计实现的简易版水果识别系统源码(毕业设计).zip个人经导师指导并认可通过的高分毕业设计项目,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者。也可作为课程设计、...
Python开发基于Pyqt5设计实现的简易版水果识别系统源码.zip
10-11
Python开发基于Pyqt5设计实现的简易版水果识别系统源码.zipPython开发基于Pyqt5设计实现的简易版水果识别系统源码.zipPython开发基于Pyqt5设计实现的简易版水果识别系统源码.zipPython开发基于Pyqt5设计实现的简易版...
基于python+PYQT5的简易计算器源码+GUI界面.zip
03-03
基于python+PYQT5的简易计算器源码+GUI界面.zip基于python+PYQT5的简易计算器源码+GUI界面.zip基于python+PYQT5的简易计算器源码+GUI界面.zip基于python+PYQT5的简易计算器源码+GUI界面.zip基于python+PYQT5的简易...
python正则表达式之作业计算器
12-23
作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 – 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) – (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式,运算后得出结果,结果必须与真实的计算器所得出的结果一致 一、说明: 有一点bug就是不能计算幂次方,如:’6**6’会报错 该计算器思路: 1、没用使用递归,先找出并计算所有括号里的公式,再计算乘除和加减 2、所有的数字都认为是浮点型操作,以此来保留小数 使用技术: 1、正则表达式 2、tkint
毕业设计-课程设计-大作业-车辆管理系统本科毕业设计,采用php+mysql+python技术架构.zip
08-30
毕业设计-课程设计-大作业-车辆管理系统本科毕业设计,采用php+mysql+python技术架构.zip毕业设计-课程设计-大作业-车辆管理系统本科毕业设计,采用php+mysql+python技术架构.zip毕业设计-课程设计-大作业-车辆管理...
python编程计算器_Python3-用Python编写计算器的3种方法
weixin_39539764的博客
11-23 1326
python实现简单的计算器功能,有很多思路,这里介绍三种方法,并分析各自的优缺点。下图是一个真是的计算器,由StellrWeb摄于Unsplash:众所周知,根据Tao of Python的规定,对于任何给定任务:应该有一种明显的方法,最好只有一种但是,在编写简单的计算器程序的情况下,有许多不同的方法可以执行此操作。哪一个是“最佳”,很大程度上取决于上下文。在本文中,我将讨论三种常见的方法,包...
python做简单的计算器,如何用python计算器
nannannanmu的博客
03-28 866
任何主流语言都可以开发一个简易的计算器,本篇我们将选用python来开发!附源代码提示:以下是本篇文章正文内容,下面案例可供参考本文仅仅简单介绍了Tkinter的使用,来开发一个简易的计算器。大家可以根据可以通过下面的源代码,运行下来试一下,另附演示动图。另外对于本文中提到的Tkinter库有感兴趣的可以看下上面的链接,很详细源代码"""计算器窗体类""""""初始化实例"""self.title("我的计算器")self.memory = 0 # 暂存数值r = 1c = 0c += 1。
Python写一个简单的科学计算器
m0_74796397的博客
05-13 1436
简单讲解了math库导入及其中一些常用的函数和常量的介绍,代码实现了基本的加、减、乘、除运算以及正弦函数、余弦函数、正切函数、自然对数函数等高级运算。注意此实现中未对用户的输入进行严格的类型检查,仅作为示例使用。
chatgpt赋能python:用Python编写简单易用的计算器程序
虚幻私塾
06-27 645
Python是一种功能强大的编程语言,可以帮助您编写简单易用的计算器程序。使用eval()函数或第三方库,您可以快速编写自己的计算器程序。选择适合自己的方法,开始编写吧!本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。
项目:使用python做一个简易计算器,图形可视化,既有界面
weixin_44614751的博客
11-30 1万+
代码: import tkinter as tk class Calc(tk.Frame): # 创建Calc类继承Frame def __init__(self, parent=None): """简易图形用户界面计算器构造函数""" tk.Frame.__init__(self, parent) self.pack() ...
python编写一个简单的计算器
FederalSadler的博客
07-07 7075
计算器功能与组成部分基本功能创建简单的操作界面功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 基本功能 一个简单的计算器需要一个简单操作界面、会运算加减乘除运算的基本功能、支持键盘快捷键入 创建简单的操作界面 操作界面用pygam
python设计简易计算器
05-26
以下是一个简易计算器Python代码示例: ```python def add(x, y): """加法""" return x + y def subtract(x, y): """减法""" return x - y def multiply(x, y): """乘法""" return x * y def divide(x, y): """除法""" if y == 0: raise ValueError("除数不能为0!") return x / y print("请选择运算:") print("1、加法") print("2、减法") print("3、乘法") print("4、除法") # 获取用户输入 choice = input("请输入您的选择(1/2/3/4): ") num1 = float(input("请输入第一个数字: ")) num2 = float(input("请输入第二个数字: ")) if choice == '1': print(num1,"+",num2,"=", add(num1,num2)) elif choice == '2': print(num1,"-",num2,"=", subtract(num1,num2)) elif choice == '3': print(num1,"*",num2,"=", multiply(num1,num2)) elif choice == '4': print(num1,"/",num2,"=", divide(num1,num2)) else: print("输入错误,请重新输入!") ``` 该程序可以实现加、减、乘、除四种基本运算。用户可以根据提示输入两个数字和运算符号,程序将根据用户的选择执行相应的运算并输出结果。注意,在除法中,如果除数为0,程序会抛出一个ValueError异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Python游戏汇总:三十个pygame游戏代码【附源码免费分享】 114131
  • 程序员自制游戏:超级玛丽100%真实版,能把你玩哭了~【附源码】 78345
  • 隔壁家的WIFI密码如何破解?Python教你百分之百成功蹭网~ 66084
  • Python表白代码:“ 星光月夜烟花皆归你,我也归你”(满天烟花盛开、附番外玫瑰) 55339
  • Python表白代码:太秀了,用过的人都找到了对象...【满屏玫瑰盛开】 46956

分类专栏

  • Pygame合集 94篇
  • 程序员合集 149篇
  • python合集 161篇
  • 绘图合集 33篇
  • 爬虫+数据合集 25篇
  • 表白合集 28篇
  • 小白案例合集 26篇
  • 界面化小程序 53篇
  • 人工智能opencv合集 30篇
  • 节日专属合集 17篇

最新评论

  • Pygame实战:程序员小哥给女友写了一款锻炼反应能力的游戏,从此上班摸鱼再也没被扣工资。

    一个祎: 我也想要啊啊啊啊

  • Pygame实战:花巨资筹备的一款Tom猫游戏,你玩过嘛?

    m0_71350297: 没有图片、背景音乐这些素材吗

  • Pygame实战:这款“欢乐打地鼠”小游戏让几亿人“上瘾“?不玩绝对是你的损失。

    m0_71350297: 没有图片、背景音乐这些素材吗

  • Pygame实战:花巨资筹备的一款Tom猫游戏,你玩过嘛?

    m0_71350297: 没有素材吗

  • Python游戏汇总:三十个pygame游戏代码【附源码免费分享】

    m0_72207463: 已关注,求分享

大家在看

  • 基于SSM+JSP的网络在线考试系统代码(带1w+文档)
  • 【Python日志模块全面指南】:记录每一行代码的呼吸,掌握应用程序的脉搏 1738
  • RGB彩色模型理解与编程实例 587
  • Python统计实战:一题搞定多元线性回归、共线性、相对重要性分析
  • Docker 下载与安装以及配置

最新文章

  • 【Python小游戏】某程序员自制《苹果大赛》,赶紧来抢~“免费的平安夜苹果,你说是不是最甜的鸭?”(附源码)
  • 【Python表白集】没有哪个女孩子 不喜欢花 不喜欢惊喜:“一束花的仪式感,永远不会过时呢~”(turtle绘图代码)
  • 【Python游戏】在这款程序员游戏新作《现代空战—战机游戏》里,你可以体验一把紧张的空战感觉、刺激鸭~打飞机游戏都能有那么多骚操作……
2023年28篇
2022年72篇
2021年191篇

目录

目录

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顾木子吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

哆哆女性网yangshenlinkedin.com新注册公司起名字大全百货公司起个名字三个龙王加刘怎么起名字sm纯肉惩罚调教道具阳光城新界给儿童起乳名男孩诗词公司起名免费起名字大全公司起名带丹字焦急的近义词名典起名网免费测量蛇年宝宝起名打分荣先生夫妻肺片热血奇侠燕子李三白龙王12大神奇预言怎么免费起名大全cf调烟雾头盔谢氏起名男孩名蜂蜜店起名字大全集烟酒茶商行起名大全兰斯10起名网免费取名网大全公司免费起名大全我只是个辣文女主网上招聘女袁姓起名五行五行属土的的字女孩起名淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻不负春光新的一天从800个哈欠开始有个姐真把千机伞做出来了国产伟哥去年销售近13亿充个话费竟沦为间接洗钱工具重庆警方辟谣“男子杀人焚尸”男子给前妻转账 现任妻子起诉要回春分繁花正当时呼北高速交通事故已致14人死亡杨洋拄拐现身医院月嫂回应掌掴婴儿是在赶虫子男孩疑遭霸凌 家长讨说法被踢出群因自嘲式简历走红的教授更新简介网友建议重庆地铁不准乘客携带菜筐清明节放假3天调休1天郑州一火锅店爆改成麻辣烫店19岁小伙救下5人后溺亡 多方发声两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#青海通报栏杆断裂小学生跌落住进ICU代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了当地回应沈阳致3死车祸车主疑毒驾武汉大学樱花即将进入盛花期张立群任西安交通大学校长为江西彩礼“减负”的“试婚人”网友洛杉矶偶遇贾玲倪萍分享减重40斤方法男孩8年未见母亲被告知被遗忘小米汽车超级工厂正式揭幕周杰伦一审败诉网易特朗普谈“凯特王妃P图照”考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼恒大被罚41.75亿到底怎么缴男子持台球杆殴打2名女店员被抓校方回应护栏损坏小学生课间坠楼外国人感慨凌晨的中国很安全火箭最近9战8胜1负王树国3次鞠躬告别西交大师生房客欠租失踪 房东直发愁萧美琴窜访捷克 外交部回应山西省委原副书记商黎光被逮捕阿根廷将发行1万与2万面值的纸币英国王室又一合照被质疑P图男子被猫抓伤后确诊“猫抓病”

哆哆女性网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化