python公式计算器_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) )等类似公式后,

#必须自己解析里面的(),+,-,*,/符号和公式,运算后得出结果,结果必须与真实的计算器所得出的结果一致

import re

import functools

def minus_operator_handler(formula):

'''处理一些特殊的符号'''

minus_operator = re.split("-",formula)

calc_list = re.findall("[0-9]",formula)

if minus_operator[0] == '':#第一值肯定是负号

clac_list[0] = '-%s' % calc_list[0]

res = functools.reduce(lambda x,y:float(x) - float(y),calc_list)

print("\33[33;1m减号[%s]处理结果:\033[0m" % formula,res)

return res

def remove_duplicates(formula):

formula = formula.replace("++","+")

formula = formula.replace("+-","-")

formula = formula.replace("-+","-")

formula = formula.replace("--","+")

formula = formula.replace("- -","+")

return formula

def compute_mutiply_dividend(formula):

'''算乘除,传进来的是字符串'''

operators = re.findall("[*/]",formula)

calc_list = re.split("[*/]",formula)

res = None

for index,i in enumerate(calc_list):

if res:

if operators[index-1] == "*":

res *= float(i)

else operators[index-1] == "/"

res /= float(i)

else:

res = float(i)

print("\033[31;1m[%s]运算结果=\033[0m" %formula, res)

return res

def handle_minus_in_list(operators_list,calc_list):

for index,i in enumerate(calc_list):

if i == '':#它其实代表负号,改成负号

calc_list[index+1] = i + calc_list[index+1].strip()

def handle_special_occactions(plus_and_minus_operators,multiply_and_dividend):

for index,i in enumerate(multiply_and_dividend):

i = i.strip()

if i.endswith("*") or i.endswith("/"):

multiply_and_dividend[index] = multiply_and_dividend[index] + plus_and_minus_operators[index] + multiply_and_dividend[index+1]

del multiply_and_dividend[index+1]

del plus_and_minus_operators[index]

return plus_and_minus_operators,multiply_and_dividend

def compute(formula):

'''这里计算的是不带括号的公式'''

formula = formula.strip("()")#去除外面包的括号

formula = remove_duplicates(formula)#去除外重复的+-号

plus_and_minus_operators = re.findall("[+-]",formula)

multiply_and_dividend = re.split("[+-]",formula)#取出乘除公式

if len(multiply_and_dividend[0].strip()) == 0:#代表这肯定是个减号

multiply_and_dividend[1] = plus_and_minus_operators[0] + multiply_and_dividend[1]

del multiply_and_dividend[0]

del plus_and_minus_operators[0]

plus_and_minus_operators,multiply_and_dividend=handle_special_occactions(plus_and_minus_operators,multiply_and_dividend)

for index,i in enumerate(multiply_and_dividend):

if re.search("[*/]",i):

sub_res = compute_mutiply_dividend(i)

multiply_and_dividend[index] = sub_res

#开始运算+,-

print(multiply_and_dividend,plus_and_minus_operators)

total_res = None

for index,item in enumerate(multiply_and_dividend):

if total_res:#代表不是第一次循环

if plus_and_minus_operators[index-1] == '+':

total_res += float(item)

elif plus_and_minus_operators[index-1] == '-':

total_res -= float(item)

else:

total_res = float(item)

print("\033[32;1m[%s]运算结果:\033[0m" %format,total_res)

return total_res

def calc(formula):

'''计算程序入口,主要逻辑是先计算括号里的值,算出来后再计算乘除,再算加减'''

parenthesise_flag = Ture

calc_res = None#初始化运算结果为None

while parenthesise_flag:

m = re.search("\[^()*\]",formula)#找到最里层的括号

if m:

#print("先算括号里的值:",m.group())

sub_res = compute(m.group())

formula = formula.replace(m.group(),str(sub_res))

else:

print('\033[41;1m----没括号了...---\033[0m')

print('\n\n033[42;1m最终结果:\033[0m',compute(formula))

parenthesise_flag = False#代表公式里的括号已经都被剥除

if __name__ == '__main__':

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络流-SAP算法模板

node 表示当前讨论到的节点; flow 表示该节点被传入/要传出的流量;s, t, ver 分别是起点,终点,节点总数; SAP 函数返回增广路成功增大的流量; dlt 是当前已传出的流量; c 是残量。 1 const int …

python bp神经网络分类预测结果图_深度学习入门(四)BP神经网络——数字分类...

采用的是python中机器学习库sklearn图片数据sklearn简要介绍:#sklearn是Python中的一个机器学习包from sklearn.datasets import load_digits #载入Sklearnimport pylab as pldigitsload_digits()#载入数据集(都是数字图片)print(digits.data.shape)#一共有1797张图…

Koa框架

一、认识Koa 前面我们已经学习了express,另外一个非常流行的Node Web服务器框架就是Koa。 Koa官方的介绍: koa:next generation web framework for node.js;koa:node.js的下一代web框架; 事实上&#x…

SPOJ GSS2 Can you answer these queries II (线段树离线) - xgtao -

Can you answer these queries II 这是一道线段树的题目&#xff0c;维护历史版本&#xff0c;给出N(<100000)个数字(-100000<x<100000),要求求出在[l,r]区间里面的连续序列的最大值&#xff0c;并且重复的数字可以加入序列但是值不能再计算。 本题明显使用线段树,它只…

Node使用MySQL

一、认识mysql2 如何可以在Node的代码中执行SQL语句来&#xff0c;这里我们可以借助于两个库&#xff1a; mysql&#xff1a;最早的Node连接MySQL的数据库驱动&#xff1b;mysql2&#xff1a;在mysql的基础之上&#xff0c;进行了很多的优化、改进&#xff1b;目前相对来说&a…

java安装后在哪里打开_冷却塔声屏障安装后降噪效果不理想,原因出在哪里?...

现有冷却塔大部分产品都不能满足噪音环保标准&#xff0c;只有少数几种低吨位超低噪声型号的冷却塔可以满足少部分区域噪声标准要求。在一些商住混合区&#xff0c;冷却塔的出风口强烈的噪声和热气往往干扰附近居民不得安宁&#xff0c;所以冷却塔的噪声问题成为环境投诉的热点…

iOS10 权限崩溃问题

iOS10 权限崩溃问题 原文: http://blog.csdn.net/runleelrg/article/details/51673025 今天 手机升级了 iOS10 Beta&#xff0c;然后用正在开发的项目 装了个ipa包&#xff0c;发现点击有关 权限访问 直接Crash了&#xff0c;并在控制台输出了一些信息&#xff1a; This app h…

Koa框架——coderhub实战

https://github.com/zep03/koa-coderhub/commits/main 一、coderhub功能接口说明 Coderhub旨在创建一个程序员分享生活动态的平台。 完整的项目接口包括&#xff1a; 面向用户的业务接口&#xff1b;面向企业或者内部的后台管理接口&#xff1b; 完成的功能如下&#xff1a;…

python 协程_Python多任务协程

协程协程&#xff0c;又称微线程&#xff0c;纤程。英文名Coroutine。协程是python个中另外一种实现多任务的方式&#xff0c;只不过比线程更小占用更小执行单元(理解为需要的资源)。为啥说它是一个执行单元&#xff0c;因为它自带CPU上下文。这样只要在合适的时机&#xff0c;…

python局域网大文件_[源码]Python简易http服务器(内网渗透大文件传输含下载命令)...

Python简易http服务器源码import SimpleHTTPServerimport SocketServerimport sysPORT 80if len(sys.argv) ! 2:print("use: web.exe port")else:PORT int(sys.argv[1])Handler SimpleHTTPServer.SimpleHTTPRequestHandlerhttpd SocketServer.TCPServer(("&…

CoderHub接口文档

CoderHub接口文档 Coderhub旨在创建一个程序员分享生活动态的平台。 完成的功能如下&#xff1a; 用户管理系统 内容管理系统 内容评论管理 内容标签管理 文件管理系统 接口完整请求示例&#xff1a;http://127.0.0.1:8000/users github仓库&#xff1a;https://github.com…

Spring 概况

网站&#xff1a;http://spring.io/ http://projects.spring.io/spring-framework Spring是一个开源框架&#xff0c;为了解决企业应用开发的复杂性而创建的&#xff0c;但现在已经不止应用于企业应用。 是一个轻量级的控制反转&#xff08;IoC&#xff09;和面向切面&#xff…

属于python应用领域的有数据可视化_Python数据可视化

译者序前 言第1章 数据可视化概念框架11.1 数据、信息、知识和观点21.1.1 数据21.1.2 信息21.1.3 知识31.1.4 数据分析和观点31.2 数据转换41.2.1 数据转换为信息41.2.2 信息转换为知识71.2.3 知识转换为观点71.3 数据可视化历史81.4 可视化如何帮助决策101.4.1 …

JavaScript高级之构造函数和原型

1.1 概述 在典型的 OOP 的语言中&#xff08;如 Java&#xff09;&#xff0c;都存在类的概念&#xff0c;类就是对象的模板&#xff0c;对象就是类的实例&#xff0c;但在 ES6之前&#xff0c; JS 中并没用引入类的概念。 ES6&#xff0c; 全称 ECMAScript 6.0 &#xff0c;2…

wget python3_python wget

wget -nH &#xff0d;K -E -d -np -L -r http://flatfull.com/themes/scale/-np 递归下载时不搜索上层目录-nH, –no-host-directories 不创建主机目录-d, –debug 打印调试输出-L 递归时不进入其它主机-E //将所有text/html文档以.html扩展名保存-r 递归抓取-k 抓取之后修正链…

JavaScript高级之继承

ES6之前并没有给我们提供 extends 继承。我们可以通过构造函数原型对象模拟实现继承&#xff0c;被称为组合继承。 2.1 call() 调用这个函数, 并且修改函数运行时的 this 指向 fun.call(thisArg, arg1, arg2, …) thisArg &#xff1a;当前调用函数 this 的指向对象arg1&…

【代码笔记】iOS-UILable电子表显示

一&#xff0c;效果图。 二&#xff0c;代码。 RootViewController.h #import <UIKit/UIKit.h>interface RootViewController : UIViewController {UILabel *label;NSDateFormatter *dateFormatter ; } end RootViewController.m #import "RootViewController.h&qu…

python cpu_python 让cpu满载

python 让cpu满载发布时间&#xff1a;2018-07-29 17:25:11编辑&#xff1a;admin阅读(5939)搞zabbix监控的时候&#xff0c;linux服务器的负载很低&#xff0c;如何写一个python脚本&#xff0c;让它满载呢&#xff1f;网上搜了一堆&#xff0c;发现各种不靠谱。后来终于发现了…

JavaScript高级之ES5 中的新增方法

3.1 ES5 新增方法概述 ES5 中给我们新增了一些方法&#xff0c;可以很方便的操作数组或者字符串&#xff0c;这些方法主要包括&#xff1a; 数组方法字符串方法对象方法 3.2 数组方法 迭代(遍历)方法&#xff1a;forEach()、map()、filter()、some()、every()&#xff1b; …

extjs 事件

。。转载于:https://www.cnblogs.com/glblog/p/5732636.html