通过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) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式,运算后得出结果,结果必须与真实的计算器所得出的结果一致

#coding=utf-8
import re

def sub_calc(formula):
    """ 计算一个加减乘除表达式的值"""
    flag = True
    while flag:
        m = re.search(‘\d+\.?\d*[*/]-?\d+\.?\d*‘,formula) #先匹配乘除  举例: 5.12 * -123.12 ,  - 5.12 / -123.12
        if m:
            sub_mul_div = m.group()
            res = calc_multi_divd(sub_mul_div)
            formula = formula.replace(sub_mul_div,res)  # 将乘除表达式的结果替换,循环判断是否还有乘除表达式
            print "*" * 10,"乘除表达式:",formula
        else:
            print "*" * 10 ,"乘除计算完毕"
            flag = False
    print "*" * 10,"子括号里面计算乘除后的表达式 ",formula
    result = calc_add_stract(formula) #计算加减法
    return result
def calc_multi_divd(formula):
    """计算单个的乘除法表达式"""
    print "*" * 20,"单个的乘除法表达式",formula
    f_list = re.split(‘[*/]‘,formula)
    print "*" * 20 ,"单个的乘除表达式列表",f_list
    if ‘*‘ in formula:
        res = float(f_list[0]) * float(f_list[1])
    elif ‘/‘ in formula:
        res = float(f_list[0]) / float(f_list[1])
    return str(res)
def calc_add_stract(formula):
    """计算加减法,通过reduce 两两计算"""
    print "*" * 20,"没有处理正负号的加减表达式: ",formula
    #对符号进行处理
    formula = formula.replace(‘--‘,‘+‘)
    formula = formula.replace(‘++‘,‘+‘)
    formula = formula.replace(‘-+‘,‘-‘)
    formula = formula.replace(‘+-‘,‘-‘)
    print "*" * 20 ,"处理完正负号的加减表达式:",formula
    #对一个加减表达式,-变成+-,为了进行split成列表用于reduce计算
    formula = formula.replace(‘-‘,‘+-‘)
    formula_list = formula.split(‘+‘)
    print "*" * 20,"按加号分割的列表:",formula_list   #第一个数为负数,则列表第一个字段为空
    if formula_list[0] == ‘‘:
        formula_list = formula_list[1:]
    """
    result = 0
    for i in formula_list:
        if ‘-‘ in i:
            stract_list = i.split(‘-‘)
            result = float(stract_list[0]) - float(stract_list[1]) + result
        else:
            result += float(i)
    """
    result = reduce(lambda x,y: float(x) + float(y),formula_list)
    print "*" * 20 ,"加减表达式的结果:" ,result
    return str(result)
def calc(formula):
    flag = True
    while flag:
        m = re.search(‘\([^()]*\)‘,formula)
        if m:
            print "*" * 5, "计算匹配到的括号表达式:",m.group()
            sub_formula = m.group().strip(‘()‘)
            res = sub_calc(sub_formula)      #先计算括号内的表达式
            formula = formula.replace(m.group(),res)  #将表达式计算出来的结果替换原括号,再一次循环判断是否还有括号
        else:
            flag = False
    print "*" * 5,"最终的去括号后的表达式:", formula
    result = sub_calc(formula)
    return result        

if __name__ == ‘__main__‘:
    formula = "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) )"
    print "要计算的表达式:", formula
    #去掉所有的空格
    formula = re.sub(‘\s‘,‘‘,formula)
    print "去掉空格后的表达式",formula
    res = calc(formula)
    print "最终的结果:",res
时间: 2024-10-27 09:59:12

通过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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2

第一个python程序简单加法计算器

#-*- coding:utf-8 -*- # 获取用户输入内容 first_num = raw_input('plesea your first num : ') # 打印用户first num print "your first num is %r." % first_num # 获取用户输入内容 second_num = raw_input('plesea your second num : ') # 打印用户second num print "your second 

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) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式,运算后得出结果 实现代码: 1 import re 2 import functools 3 4 5 def minus_operator_handler(formula): 6 '''处理一些特

用Python编写简单的发红包程序和计算器原理

用Python编写简单的发红包程序: 第一种解法:数轴方法解决 import random def red_packet(money,num): money = money * 100 #将钱数转换成分为单位 ret = random.sample(range(1,money),num-1) #在最低钱数1分与总钱数之间生成人数减1个数作为数轴的节点 ret.sort() #对列表进行排序 ret.insert(0,0) ret.append(money) for i in range(len(

Python Tkinter学习之计算器

初学Python tkinter,利用目前所学编写一个简单的计算器练习一下. 预期效果: 1.能够实现加减乘除运算, 2.只能输入数字 3.通过按钮选择进行哪种运算. 4.结果框不能修改,智能复制 5.按清除按钮能够清除所有内容 from  tkinter import * count = Tk() count.title("纯醪八盅@计算器") def clear():     v1.set("")     v2.set("")     v3.

从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器

从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器 之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了. Caliburn.Micro(Caliburn.Micro框架概述 - https://blog.csdn.net/lzuacm/article/details/78886436) 是一个轻量级的WPF框架,简化了WPF中的不少用法,推荐做WPF开发时优先使用. 真正快速而熟练地掌握一门技术就可以尝试着用最快的

python中简单文件的输入三种方式

最近在自学python,简单的总结了一下文件的输入的方式. 1. f=open("foo.txt") line=f.readline() while line: print(line,end='') line=f.readline() f.close() 2. for line in open("foo.txt"): print(line,end='') 3. f=open("foo.txt") lines=f.readlines() for l

JS实现一个简单的计算器

使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除.效果如上: 第一步: 创建构建运算函数count(). 第二步: 获取两个输入框中的值和获取选择框的值. 提示:document.getElementById( id名 ).value 获取或设置 id名的值. 第三步: 获取通过下拉框来选择的值来改变加减乘除的运算法则. 提示:使用switch判断运算法则. 第四步:  通过 = 按钮来调用创建的函数,得到结果. 注意: 使用parseInt

Python实现简单的猜数字游戏

Python实现简单的猜数字游戏,具体如下: 随机生成一个1-10之间的数字,让用户来猜,当猜错时,会提示猜的数字是大还是小了,直到用户猜对为止. import random secret = random.randint(1,10) #print(secret) print('------猜数字游戏!-----') guess = 0 while guess != secret: temp = input('猜数字游戏开始,请输入数字:') guess = int(temp) if guess