使用python实现计算器功能
学习python过程中的作业。实现了+、-、×、/、及幂运算,支持括号优先级。
代码为python3.5
import re
def formatEquation(string):
string = string.replace("--", "+")
string = string.replace("-+", "-")
string = string.replace("++", "+")
string = string.replace("+-", "-")
string = string.replace("*+", "*")
string = string.replace("/+", "/")
string = string.replace(' ', '')
return string
def findErrorChar(equation):
'''
查找非计算的字符
'''
re_rule = r"[^ \.\d\+\-\*\/\(\)]+"
req = re.findall(re_rule,equation)
return req
def findErrorOperator(equation):
'''
查找连续多次出现的运算符号
'''
re_rule = r'[+\-/*][+\-/*][+\-/*]*'
req = re.findall(re_rule,equation)
while '**' in req:
req.remove('**')
return req
def addSubtract(equation):
'''
加减法运算,递归运算
'''
re_rule = r'[-]?\d+\.?\d*[+-]\d+\.?\d*'
if re.search(re_rule,equation):
req = re.search(re_rule,equation).group()
if '+' in req:
x,y = req.split('+')
string = str(float(x) + float(y))
equation = formatEquation(equation.replace(req,string))
return addSubtract(equation)
if '-' in req:
if req.startswith('-'):
req1 = req[1:]
x,y = req1.split('-')
x = '-'+x
else:
x,y = req.split('-')
string = str(float(x) - float(y))
equation = formatEquation(equation.replace(req,string))
return addSubtract(equation)
else:
return equation def multiplicationDivision(equation):
'''
乘除法及幂运算,递归运算
'''
re_rule = r'\d+\.?\d*([*/]|\*\*)[\-]?\d+\.?\d*'
print(11)
if re.search(re_rule,equation):
req = re.search(re_rule,equation).group()
print(req)
if '**' in req:
x,y = req.split('**')
string = str(float(x) ** float(y))
equation = formatEquation(equation.replace(req,string))
return multiplicationDivision(equation)
if '*' in req:
x,y = req.split('*')
string = str(float(x) * float(y))
equation = formatEquation(equation.replace(req,string))
return multiplicationDivision(equation)
if '/' in req:
x,y = req.split('/')
string = str(float(x) / float(y))
equation = formatEquation(equation.replace(req,string))
return multiplicationDivision(equation)
else:
return equation
def removeBrackets(equation):
'''
计算算式中括号里的公式,直到所有括号的计算已完成
'''
re_rule = r'\([^()]*\)'
equation = formatEquation(equation)
if re.search(re_rule,equation):
req = re.search(re_rule,equation).group()
string = addSubtract(multiplicationDivision(req[1:-1]))
equation = equation.replace(req,string)
return removeBrackets(equation)
else:
return equation
if __name__ == '__main__':
while 1:
#equation = input("请输入需要计算的公式")
equation = "1 - 2 * ( (60-30 +(-9-2-5-2*3-5/3-40*4/2-3/5+6*3) * (-9-2-5-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )"
equation = equation.replace(' ','')
#判断字符是否合法
if findErrorChar(equation) :
errorChar = findErrorChar(equation)
print("下列字符不合法:",''.join(errorChar))
elif findErrorOperator(equation):
errorOperator = findErrorOperator(equation)
print("下列字符不合法:",''.join(errorOperator))
else:
#格式化算式
formatEquation(equation)
print("输入的公式为:",equation)
#去除括号
equation = removeBrackets(equation)
#计算结果
equation = addSubtract(multiplicationDivision(equation))
print('程序计算结果为:',equation)
print('eval计算结果为:',eval(equation))
break
源代码
使用python实现计算器功能的更多相关文章
- 利用PYTHON设计计算器功能
通过利用PYTHON 设计处理计算器的功能如: 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 ))- (-4*3 ...
- python实现计算器功能
import re def strip_operate(exp): # 合并多余的操作符 exp = exp.replace("+-", "-") exp = ...
- python 实现计算器功能 输入字符串,输出相应结果
import re formul='1 - 2 *( (6 0- 30+(0-40/5) * (9-2* 5/3 +7 /3*99/4*2998 +10 *568/14)) - (-4*3) / (1 ...
- 完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能
#!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能'''try: a=int(raw_input(" ...
- python实现计算器
计算器功能 实现优先级解析,加减乘除四则运算 自定义小数位精度 实现思想: 先找到最里层括号,根据乘除,加减优先级,调用写好的乘除.加减运算函数算出括号内总值,再将原括号式用所得值替换,此过程循环进行 ...
- python之计算器(第四天)
作业: 使用正则表达式和递归实现计算器功能. 实现: 1.实现带括号的计算 2.实现指数.加减乘除求余等功能 一.实例说明: 本实例自己写了个版本,但依旧存在一点bug,例:-2-2等计算问题,故最后 ...
- 从零开始学习PYTHON3讲义(二)把Python当做计算器
<从零开始PYTHON3>第二讲 上一讲我们说过了如何启动Python IDLE集成开发学习环境,macOS/Linux都可以在命令行执行idle3.Windows则从开始菜单中去寻找ID ...
- javaWeb 使用 jsp 和 javaBean 实现计算器功能
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- C#实现按键计算器功能
C#实现按键计算器功能 (一次失败的编程) 界面: 代码如下: using System; using System.Collections.Generic; using System.Compone ...
随机推荐
- Coder的好伙伴Github
网络越来越发达,各式各样的网盘.云存储也走进日常生活, 在老师的指导下,我第一次接触了GitHub. 什么是Github? Github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一 ...
- css预处理语言--让你的css编写更加简单方便
CSS预处理语言之一-------LESS Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量.Mixin.函数等特性,使 CSS 更易维护和扩展. Less 可以运行在 Nod ...
- GitHub使用(一) - 新建个人网站
1.首先进入“仓库Repositories”,点击“新建New”.
- Quartz源码——Quartz调度器的Misfire处理规则(四)
Quartz调度器的Misfire处理规则 调度器的启动和恢复中使用的misfire机制,还需细化! SimpleTrigger的misfire机制 默认的 Trigger.MISFIRE_INSTR ...
- C++ Primer Plus 6 第二章
// myfirst.cpp--displays a message #include <iostream> // a PREPROCESSOR directive int main() ...
- Disharmony Trees 树状数组
Disharmony Trees Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Su ...
- bzoj3713 [PA2014]Iloczyn|暴力(模拟)
斐波那契数列的定义为:k=0或1时,F[k]=k:k>1时,F[k]=F[k-1]+F[k-2].数列的开头几项为0,1,1,2,3,5,8,13,21,34,55,-你的任务是判断给定的数字能 ...
- Android开发更新UI的几种方式
1.runOnUiThread 2.handler post 3.handler sendmessage 4.view post xml布局文件: <RelativeLayout xmlns:a ...
- JavaWeb(三)JSP概述
一.JSP概述 1.1.JSP简介 一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%>结束.JSP是一种Java servlet,主要用于实现 ...
- JS类继承常用方式发展史
JS类继承常用方式发展史 涉及知识点 构造函数方式继承 1-继承单个对象 1.1 多步走初始版 1.2 多步走优化版 1.3 Object.create()方式 2-继承多个对象 2.1 遍历 Obj ...