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 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...
随机推荐
- centos 7 安装iptables防火墙
firewalle: 开启6379端口和16379端口 [root@localhost ~]# firewall-cmd --zone=public --add-port=6379/tcp --per ...
- Mysql phpStudy升级Mysql版本,流产了怎么办?
网上有一些phpStudy升级mysql的方法,如: https://www.cnblogs.com/GreenForestQuan/p/6496431.html 很不错,我的电脑一次成功,但是同事的 ...
- AC Challenge(状压dp)
ACM-ICPC 2018 南京赛区网络预赛E: 题目链接https://www.jisuanke.com/contest/1555?view=challenges Dlsj is competing ...
- 不得不补:PHP的JSON, SQL
不管怎么说,还是得感谢慕课网,提供了很多免费的视频教学. 学习自: https://www.imooc.com/view/68 前端页面: <!DOCTYPE html> <html ...
- 18-11-01 pandas 学习03
[python]pandas display选项 import pandas as pd 1.pd.set_option('expand_frame_repr', False) True就是可以换行显 ...
- Linux安装软件出现 “Unable to locate package xxx”错误
使用新购入的阿里云服务器ECS,预装的Ubuntu,然后想要利用 xrdp 进行远程登陆,但是在输入命令: apt-get install xrdp 出现了 E;Unable to locate pa ...
- window.location.href webkit不兼容
window.event.returnValue=false; 在location.href后加上后修复 来自为知笔记(Wiz)
- JAVA基础部分复习(七、JAVA枚举类型使用)
/** * java中的枚举 * 枚举(enum),是指一个经过排序的.被打包成一个单一实体的项列表.一个枚举的实例可以使用枚举项列表中任意单一项的值. * 枚举在各个语言当中都有着广泛的应用,通常用 ...
- 初见 fultter for MAC
第一步:下载flutter https://flutter.io/docs/development/tools/sdk/archive?tab=macos#macos 第二步:(development ...
- python学习之路04——列表和字典
列表和字典 python中的可变数据类型有:列表和字典 不可变类型:数字,字符串,元组 今天先讲列表和字典 一.列表 1.概念: 变量:使用变量存储数据,但是,变量存储数据每次只能存储一个数据 问题: ...