使用python实现计算器功能

学习python过程中的作业。实现了+、-、×、/、及幂运算,支持括号优先级。

代码为python3.5

  1 import re
  2 def formatEquation(string):
  3     string = string.replace("--", "+")
  4     string = string.replace("-+", "-")
  5     string = string.replace("++", "+")
  6     string = string.replace("+-", "-")
  7     string = string.replace("*+", "*")
  8     string = string.replace("/+", "/")
  9     string = string.replace(‘ ‘, ‘‘)
 10     return string
 11 def findErrorChar(equation):
 12     ‘‘‘
 13     查找非计算的字符
 14     ‘‘‘
 15     re_rule = r"[^ \.\d\+\-\*\/\(\)]+"
 16     req = re.findall(re_rule,equation)
 17     return req
 18 def findErrorOperator(equation):
 19     ‘‘‘
 20     查找连续多次出现的运算符号
 21     ‘‘‘
 22     re_rule = r‘[+\-/*][+\-/*][+\-/*]*‘
 23     req = re.findall(re_rule,equation)
 24     while ‘**‘ in req:
 25         req.remove(‘**‘)
 26     return req
 27 def addSubtract(equation):
 28     ‘‘‘
 29     加减法运算,递归运算
 30     ‘‘‘
 31     re_rule = r‘[-]?\d+\.?\d*[+-]\d+\.?\d*‘
 32     if re.search(re_rule,equation):
 33         req = re.search(re_rule,equation).group()
 34         if ‘+‘ in req:
 35             x,y = req.split(‘+‘)
 36             string = str(float(x) + float(y))
 37             equation = formatEquation(equation.replace(req,string))
 38             return addSubtract(equation)
 39         if ‘-‘ in req:
 40             if req.startswith(‘-‘):
 41                 req1 = req[1:]
 42                 x,y = req1.split(‘-‘)
 43                 x = ‘-‘+x
 44             else:
 45                 x,y = req.split(‘-‘)
 46             string = str(float(x) - float(y))
 47             equation = formatEquation(equation.replace(req,string))
 48             return addSubtract(equation)
 49     else:
 50         return equation
 51
 52 def multiplicationDivision(equation):
 53     ‘‘‘
 54     乘除法及幂运算,递归运算
 55     ‘‘‘
 56     re_rule = r‘\d+\.?\d*([*/]|\*\*)[\-]?\d+\.?\d*‘
 57     print(11)
 58     if re.search(re_rule,equation):
 59         req = re.search(re_rule,equation).group()
 60         print(req)
 61         if ‘**‘ in req:
 62             x,y = req.split(‘**‘)
 63             string = str(float(x) ** float(y))
 64             equation = formatEquation(equation.replace(req,string))
 65             return multiplicationDivision(equation)
 66         if ‘*‘ in req:
 67             x,y = req.split(‘*‘)
 68             string = str(float(x) * float(y))
 69             equation = formatEquation(equation.replace(req,string))
 70             return multiplicationDivision(equation)
 71         if ‘/‘ in req:
 72             x,y = req.split(‘/‘)
 73             string = str(float(x) / float(y))
 74             equation = formatEquation(equation.replace(req,string))
 75             return multiplicationDivision(equation)
 76     else:
 77         return equation
 78 def removeBrackets(equation):
 79     ‘‘‘
 80     计算算式中括号里的公式,直到所有括号的计算已完成
 81     ‘‘‘
 82     re_rule =  r‘\([^()]*\)‘
 83     equation = formatEquation(equation)
 84     if re.search(re_rule,equation):
 85         req = re.search(re_rule,equation).group()
 86         string = addSubtract(multiplicationDivision(req[1:-1]))
 87         equation = equation.replace(req,string)
 88         return removeBrackets(equation)
 89     else:
 90         return equation
 91 if __name__ == ‘__main__‘:
 92     while 1:
 93         #equation = input("请输入需要计算的公式")
 94         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) )"
 95         equation = equation.replace(‘ ‘,‘‘)
 96         #判断字符是否合法
 97         if findErrorChar(equation) :
 98             errorChar = findErrorChar(equation)
 99             print("下列字符不合法:",‘‘.join(errorChar))
100         elif findErrorOperator(equation):
101             errorOperator = findErrorOperator(equation)
102             print("下列字符不合法:",‘‘.join(errorOperator))
103         else:
104             #格式化算式
105             formatEquation(equation)
106             print("输入的公式为:",equation)
107             #去除括号
108             equation = removeBrackets(equation)
109             #计算结果
110             equation = addSubtract(multiplicationDivision(equation))
111             print(‘程序计算结果为:‘,equation)
112             print(‘eval计算结果为:‘,eval(equation))
113             break

源代码

时间: 2024-08-25 23:17:28

使用python实现计算器功能的相关文章

利用PYTHON设计计算器功能

通过利用PYTHON 设计处理计算器的功能如: 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 ))- (-4*3)/(16-3*2)) 我的处理计算基本思路是: 解题思路是,需要优先处理内层括号运算--外层括号运算--先乘除后加减的原则:1.正则处理用户输入的字符串,然后对其进行判断,判断计算公式是否有括号,有就先将计算公式进行正则处理,先获取最里层的每一个数据,然后一一计算 所要用到的正则是: inner

完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能

#!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能'''try: a=int(raw_input("please input a number:"))except ValueError: print("第一个运算数字输入非数字") try: b=int(raw_input("please input another number:"))except Val

python之计算器

作业: 使用正则表达式和递归实现计算器功能. 实现: 1.实现带括号的计算 2.实现指数.加减乘除求余等功能 一.实例说明: 本实例自己写了个版本,但依旧存在一点bug,例:-2-2等计算问题,故最后在武SIR的代码基础上加了指数.求余等功能. 该计算器思路:1.递归寻找表达式中只含有 数字和运算符的表达式,并计算结果2.由于整数计算会忽略小数,所有的数字都认为是浮点型操作,以此来保留小数使用技术:1.正则表达式2.递归 二.流程图: 三.代码: #!/usr/bin/python27#_*_

python之计算器操作(第四天)

作业: 使用正则表达式和递归实现计算器功能. 实现: 1.实现带括号的计算 2.实现指数.加减乘除求余等功能 一.实例说明: 本实例自己写了个版本,但依旧存在一点bug,例:-2-2等计算问题,故最后在武SIR的代码基础上加了指数.求余等功能. 该计算器思路: 1.递归寻找表达式中只含有 数字和运算符的表达式,并计算结果 2.由于整数计算会忽略小数,所有的数字都认为是浮点型操作,以此来保留小数使用技术: 1.正则表达式 2.递归 二.流程图: 三.代码: #!/usr/bin/python27

python之计算器(第四天)

作业: 使用正则表达式和递归实现计算器功能. 实现: 1.实现带括号的计算 2.实现指数.加减乘除求余等功能 一.实例说明: 本实例自己写了个版本,但依旧存在一点bug,例:-2-2等计算问题,故最后在武SIR的代码基础上加了指数.求余等功能. 该计算器思路:1.递归寻找表达式中只含有 数字和运算符的表达式,并计算结果2.由于整数计算会忽略小数,所有的数字都认为是浮点型操作,以此来保留小数使用技术:1.正则表达式2.递归 二.流程图: 三.代码: #!/usr/bin/python27#_*_

通过键盘接收数值和字符,实现计算器功能。

import java.util.Scanner; /** * @author 蓝色以太 * 通过键盘接收数值和字符,实现计算器功能. */ public class Calculator { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入第一个数值:"); double num1=sc.nextDouble(); System.out

Shell 实现简单计算器功能

Shell 实现简单计算器功能,脚本如下: [[email protected] scripts]# cat jisuan.sh #!/bin/bash print_usage(){     printf $"USAGE:$0 NUM1 {+|-|*|/} NUM2\n"     exit 1 } #判断传入的参数是不是3个 if [ $# -ne 3 ]   then     print_usage fi firstnum=$1 secondnum=$3 op=$2 #对传入的参数进

为python 添加新功能-dump

一直觉得thinkphp提供的dump函数挺好用的,但是python里面没有,就一直想着写个简单的. dir是我比较常用的一个内置函数了,但是显示效果实在有点受不了,每次我都要从大量的字符串里找到我需要的,眼都花了. 所以我就想,一行显示一个就好了. 所以我就写了一个模块,命名为dp 1 #!/usr/bin/env python 2 #coding:utf-8 3 4 """ 5 dump variable 6 """ 7 def dump(v

JavaScript实现计算器功能

截图 : cal.js Js代码   var Class = {} ; Class.calculation = function(){ var calculation = {} ; calculation.result = 0 ; calculation.calculate = function(num1,num2){} ; calculation.getResult = function(){ return this.result ; } ; return calculation ; } ;