开发一个简单的python计算器

  1. 实现加减乘除及拓号优先级解析
  2. 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,结果必须与真实的计算器所得出的结果一致

hint:

re.search(r'\([^()]+\)',s).group()

'(-40/5)'

  • 输入用re搜索返回NONE的情况,也就是输入了全部是英文字母的情况;
  • 输入的括号,左括号和右括号的个数不匹配的情况,肯定少输入;
  • 输入含有非数字以及加减乘除或者括号的情况;搜索返回的字符的个数小于用户输入的长度;
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:lzdimport redef main():while True:a=input("请输入你想计算的数学方程式,先小括号(请输入半角的括号,不要输入中文的),后加减乘除\n")#a=' 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'a = a.replace(' ', '')# print(a)if re.search(r"[0-9\+\-\*/()\.]+", a) == None:print("匹配失败,输入格式错误,请重新输入\n")continueelif a.count('(') != a.count(')'):print('你写的括号左右个数不匹配')continueelif len(re.search(r"[0-9\+\-\*/()\.]+", a).group()) != len(a):print("输入格式错误,请重新输入\n")continueelse:while True:if '(' in a:ct = re.search(r'\([^()]+\)', a) #计算出第一个()里的算式if ct is not None:b = ct.group()c = chengfa_chufa(b)a = re.sub(r'\(([^()]+)\)', str(c), a, 1)print(a)else:c = chengfa_chufa(a)print(c)breakbreakdef jiajianfa(a):'''计算加减法:param::return:'''if '--' in a:a = a.replace('--', '+')c = re.findall(r'-?\d+\.?\d*', a) #-123456.132123ls = []for i in c:ls.append(float(i))rest = sum(ls)return restdef chengfa(a):'''计算乘法:param ct::return:'''b = re.search(r'\d+\.?\d*(\*-?\d+\.?\d*)+', a)  #132132.654645*-564564.456456*-5645645.654561651615if b is not None:b = b.group()rest = 1c = re.findall(r'-?\d+\.?\d*', b)ls = []for item in c:ls.append(float(item))for i1 in range(len(ls)):rest = rest * ls[i1]a = re.sub(r'\d+\.?\d*(\*-?\d+\.?\d*)+', str(rest), a, 1)return adef chufa(a):'''计算出发:param a::return:'''b = re.search(r'\d+\.?\d*(\/-?\d+\.?\d*)+', a) #523.5564561/-1231.564564/-1344.4546if b is not None:b = b.group()c = re.findall(r'-?\d+\.?\d*', b)ls = []for i in c:ls.append(float(i))rest = ls[0]for i1 in range(1, len(ls)):rest = rest / ls[i1]a = re.sub(r'\d+\.?\d*(\/-?\d+\.?\d*)+', str(rest), a, 1)return adef chengfa_chufa(b):'''计算结果:return:'''while True:if '*' in b:c = b.split('*')if '/' in c[0]:b = chufa(b)else:b = chengfa(b)elif '/' in b:b = chufa(b)elif '+' or '-' in b:b = jiajianfa(b)return belse:return bmain()

转载于:https://www.cnblogs.com/itfat/p/7502885.html

作业1开发一个简单的python计算器相关推荐

  1. python类计算器开发_开发一个简单的python计算器

    详解: 1.str.split(分隔符):将str按分隔符进行切片,最后形成的是列表类型 eg: str = "Line1-abcdef \nLine2-abc \nLine4-abcd&q ...

  2. MFC对话框控件成员变量编程熟悉 - 开发一个简单天线长度计算器

    新建一个对话框工程:VC6:VC2010类似:版本不同略有些差别: 新建完如下:对话框默认有三个控件,自己添加的: 右击 确定 按钮,建立类向导:进入类向导: Class name下拉选中对话框类:类 ...

  3. python做的简单gui计算器_Python计算器–使用Tkinter创建一个简单的GUI计算器

    在Python计算器教程中,您将学习创建简单的GUI计算器.在这篇文章中,我将向您展示如何使用python中的tkinter模块开发一个简单的计算器.因此,让我们进一步创建一个简单的python计算器 ...

  4. python可视化界面编程 pycharm_pycharm开发一个简单界面和通用mvc模板(操作方法图解)...

    文章首先使用pycharm的 PyQt5 Designer 做一个简单的界面,然后引入所谓的"mvc框架". 一.设计登录界面 下面开始第一个话题,使用pycharm的 PyQt5 ...

  5. 国外大牛教你,如何用Python开发一个简单的区块链数据结构| 建议收藏

    来源 | Medium 作者 | arjuna sky kok 整理 / Aholiab 出品 | 区块链大本营(blockchain_camp) 根据IEEE此前的一项调查,Python已成为最受开 ...

  6. 实战|轻松用 Python 开发一个简单有趣的聊天小程序

    前言 Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol). UDP 为应用程序提供了一种无需建立连接就可以发送封装的 I ...

  7. Python开发一个简单的BBS论坛

    项目:开发一个简单的BBS论坛 需求: 整体参考"抽屉新热榜" + "虎嗅网" 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用 ...

  8. 如何搭建python框架_从零开始:写一个简单的Python框架

    原标题:从零开始:写一个简单的Python框架 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 你为什么想搭建一个Web框架?我想有下面几个原因: 有一个 ...

  9. 用pygame做一个简单的python小游戏---七彩同心圆

    用pygame做一个简单的python小游戏-七彩同心圆 这个小游戏原是我同学python课的课后作业,并不是很难,就简单实现了一下,顺便加强一下pygame库的学习. 玩法:每次点击鼠标时,会以鼠标 ...

最新文章

  1. KITTI IMU 原始100Hz数据 (里面数据有重复)
  2. 使用PHP搞定支付宝、微信扫码支付
  3. 【Java 并发编程】线程池机制 ( 线程池执行任务细节分析 | 线程池执行 execute 源码分析 | 先创建核心线程 | 再放入阻塞队列 | 最后创建非核心线程 )
  4. Mybatis基础:增删改查、模糊查询、多条件查询
  5. crontab 半小时_?用猫粮诱惑,7名消防员花半小时救出困在夹墙间的喵星人
  6. (转)javabean是什么和总结javabean的两种使用方式
  7. 计算机组成材质,计算机组成原理及应用期末复习材料
  8. Chrome 更新导致部分 macOS 的文件系统损坏,无法重启
  9. 避免将 props 的值复制给 state!
  10. 【车间调度】基于matlab模拟退火算法求解车间调度(jobshop-3)问题【含Matlab源码 1082期】
  11. matlab深度学习基本操作,深度学习讲解,源代码分享,用一用改一改随便发篇EI
  12. sourceTree git工作流无法结束
  13. android - studio版本控制文件颜色代表意思
  14. CentOS7 wifi安装配置问题总结
  15. mysql implode_PHP implode() 函数
  16. JS 下拉菜单内容交换
  17. (内含两种方式)Android 在线查看文档world丶xls丶ppt等文件
  18. 互联网晚报 | 11月1日 星期一 | 小米之家第10000家店开业;中国移动11月4日首发上会;中国平安总资产首破10万亿元...
  19. python bar图 百分比_matplotlib bar()实现百分比堆积柱状图
  20. SQL中的in、not in语句遇到null时的坑点

热门文章

  1. 【文字超分辨率】A Text Image Super-Resolution Generation Network without Pre-training 阅读笔记
  2. 八爪鱼采集百度地图坐标店铺视频教程
  3. Nepnep战队:哪有什么一战成名,其实都是百炼成钢
  4. 【BIOS】主板BIOS的两种启动模式,传统模式(Legacy)和UEFI模式
  5. Webdings字体和Wingdings字体对照表
  6. 台大机器学习基石上_lesson 2
  7. 大数据市场年均增长30% “个人信用当钱花”安全吗?
  8. 如何让我们的人生,拥有更多的可能性?
  9. svg配合css3动画_如何使用CSS制作节日SVG图标动画
  10. 利用cpolar为群晖NAS建立稳定外网地址(1)