python开发计算器
1 业务需求
1.1 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,结果必须与真实的计算器所得出的结果一致。
2 业务逻辑
2.1 首先获取用户输入,处理非法字符,处理空格
2.2 匹配括号,找到括号内部计算公式
2.3 先计算乘除,再计算加减
2.4 最后返回结果与eval()相互比较
3 代码实现
import re def calculator(formula_1):
'''
此函数为主函数
:param formula: 传入的是不规则公式字符串
:return:
'''
print(formula_1)
expression = ''
for s in formula_1: # 去除空格
if s == ' ':
continue
expression = expression + s
while True: # 寻找括号
is_match = re.search('\([^()]+\)', expression)
if is_match:
match_result = is_match.group()
content = match_result[1:-1]
result = judge(formula_2=content) # 调用函数
expression = expression.replace(match_result,result[0])
else: # b如果匹配为空,即没有括号
result = judge(formula_2=expression)
return result[0] def judge(formula_2):
'''
此函数是先调用乘除
:param formula_2: 取出括号的字符串类型
:return: 返回计算乘除后的字符串
'''
num_list = re.split('[*/+-]', formula_2)
operator_list = re.findall('[*/+-]', formula_2)
for k, i in enumerate(num_list):
if len(i) == 0:
num_list[k+1] = operator_list[k] + num_list[k+1] #
del num_list[k]
del operator_list[k]
result = mul_div(formula_3=num_list, yunsuanfu=operator_list)
return result def mul_div(formula_3, yunsuanfu):
'''
此函数计算乘除
:param formula_3: 数字列表
:param yunsuanfu: 符号列表
:return: 计算结果
'''
flag = True
while flag:
for num, mark in enumerate(yunsuanfu):
if mark == "*" or mark == '/':
if mark == "*":
b = float(formula_3[num]) * float(formula_3[num+1])
formula_3[num] = str(b)
del formula_3[num+1]
del yunsuanfu[num]
break
else:
b = float(formula_3[num])/float(formula_3[num+1])
formula_3[num] = str(b)
del formula_3[num+1]
del yunsuanfu[num]
break
else:
flag = False
if len(yunsuanfu) == 0:
return formula_3
else:
result = add_sub(formula_4=formula_3, yunsuanfu_2=yunsuanfu)
return result def add_sub(formula_4, yunsuanfu_2):
'''
此函数计算加减
:param formula_4: 数字列表
:param yunsuanfu_2: 符号列表
:return: 计算结果
'''
flag = True
while flag:
for num, mark in enumerate(yunsuanfu_2):
if mark == '+' or mark == '-':
if mark == '+':
b = float(formula_4[num]) + float(formula_4[num+1])
formula_4[num] = str(b)
del formula_4[num+1]
del yunsuanfu_2[num]
break
else:
b = float(formula_4[num]) - float(formula_4[num + 1])
formula_4[num] = str(b)
del formula_4[num + 1]
del yunsuanfu_2[num]
break
else: # 使用break不执行此表达式
flag = False
return formula_4 string = "1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) ) "
result = calculator(string)
print(result)
print('-----------------')
print(eval(string))
4 思路来源
http://www.cnblogs.com/WuYongQi/p/5520592.html
python开发计算器的更多相关文章
- Python开发——利用正则表达式实现计算器算法
Python开发--利用正则表达式实现计算器算法 (1)不使用eval()等系统自带的计算方法 (2)实现四则混合运算.括号优先级解析 思路: 1.字符串预处理,将所有空格去除 2.判断是否存在括号运 ...
- 用Python开发实用程序 – 计算器
一段时间前,自己制作了一个库 “sui-math”.这其实是math的翻版.做完后,python既然可以轻易的完成任何的数学计算,何不用python开发一个小程序专门用以计算呢? 现在我们越来越依赖于 ...
- 从零开始学习PYTHON3讲义(二)把Python当做计算器
<从零开始PYTHON3>第二讲 上一讲我们说过了如何启动Python IDLE集成开发学习环境,macOS/Linux都可以在命令行执行idle3.Windows则从开始菜单中去寻找ID ...
- Python开发 第01课 Python 简介
一.Python 介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...
- Python 开发版本指导与资源
Python 文档:https://docs.python.org/3/ 下载 下载这些文件 文档版本 Python 3.9(开发中) Python 3.8(稳定) Python 3.7(稳定) Py ...
- Windows 平台做 Python 开发的最佳组合
在 Windows 上怎样做 Python 开发?是像大神那样使用纯文本编辑器,还是用更加完善的 IDE?到底是用自带的命令行工具,还是需要装新的 Terminal?本文将带你了解如何利用微软官方维护 ...
- 作为一名Python开发,我谈Linux和mac的使用体验
我是一名Python开发,在2018.7~2021.6使用的是Linux系统 Deepin OS 作为自己的开发系统:在2022.7-至今使用的是 mac OS 系统作为开发系统. Deepin OS ...
- python开发环境搭建
虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...
- 【Machine Learning】Python开发工具:Anaconda+Sublime
Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...
随机推荐
- 再次提供一个纯粹通过pl/sql解析json的方法。
在github上面有一个叫pljson的项目,该项目就是用pl/sql 来解析json的. 项目地址:pljson(需翻|强),如果翻不了强的同学,我在国内克隆了一个副本,不定期同步更新 pljson ...
- wishhack 玩法概览
抢流量玩法 超级店长玩法 https://www.wishhack.com/article/50.html https://www.wishhack.com/article/43.html
- 生成器yield
#!/usr/bin/python#coding=utf-8'''Created on 2017年11月23日 from home @author: James zhan ''' def counte ...
- 浏览器输入URL按回车后都经历了什么?
在浏览器上输入一个URL,按回车后,这个过程发生了什么? 1.首先,浏览器地址栏输入了URL,先解析URL,检测URL地址是否合法 2.浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直 ...
- WINDOWS SERVER 2016 设置使用照片查看器查看图片
1.使用win+R快捷键快速打开运行,输入regedit打开注册表 2.在注册表中找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Photo Viewe ...
- eclipse中创建DataBase Connections
1.window --> show view --> other --> Data Management --> Data Exploerer --> ok: 2.右键单 ...
- Linux ssh命令详解
SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息. ...
- yarn不是内部指令 react-native不是内部指令
1.先查看是否全局安装 2.我遇到的是,全局安装了,依然有问题. 昨天装了一个高版本的node,成功后有个黑窗口我点了几个回车,在我的环境变量里加了一大推重复的变量,删除就正常了,如下图是我删完之后的
- 实验 2:备份和还原IOS
SW1配置 Switch>en Switch#conf t Enter configuration commands, one per line. End with CNTL/Z. Switch ...
- Logging常用handlers的使用
一.StreamHandler 流handler——包含在logging模块中的三个handler之一. 能够将日志信息输出到sys.stdout, sys.stderr 或者类文件对象(更确切点,就 ...