python实现中缀表达式计算,实现指数和对数
2018-01-05 09:32
417 查看
import os,sys,decimal,math def stack_sum_pop(sign,sum): t2,t3=0,0 t1=sign.pop() sum_a=0.00 decimal.getcontext().prec=2 if t1=='+': t2 = sum.pop() t3 = sum.pop() sum_a+=t2+t3 if t1=='-': t2 = sum.pop() t3 = sum.pop() sum_a+=t3-t2 if t1=='*': t2 = sum.pop() t3 = sum.pop() sum_a+=t2*t3 if t1=='/': t2 = sum.pop() t3 = sum.pop() sum_a=t3/t2 if t1=='l': t2 = sum.pop() sum_a=math.log(t2,10) if t1=='e': t2 = sum.pop() sum_a=math.exp(t2) if t1=='p': t2 = sum.pop() t3 = sum.pop() sum_a=pow(t3,t2) if t1=='(' : sum_a=sum.pop() return sum_a#出栈计算 def prio(s,sign):#优先级判断 a1,a2=0,0 if s=='+' or s=='-' : a1=2 if s=='*' or s== '/' : a1=4 if s=='(' : a1=8 if s=='l' or s== 'e' or s=='p' : a1=6 if s==')' : a1=1 if s=='\n' : a1=0 if not sign: a2=0 else: if sign[-1]=='+' or sign[-1]== '-' : a2=3 if sign[-1]=='*' or sign[-1]=='/' : a2=5 if sign[-1] == 'l' or sign[-1] == 'e' or sign[-1] == 'p': a2 = 7 if sign[-1]=='(' : a2=1.5 if sign[-1]==')' : a2=9 if (a1>a2): return -1#当前运算符优先级高于栈顶 if(a1==a2): return 0#优先级相等 if (a1<a2): return 1#当前运算符优先级低于栈顶 def pipei(string): n=0 for s in string: if s=='(': n=n+1 if s==')': n=n-1 if n<0: return 2 else: return 1#简单的圆括号匹配 def sum_push(string): sum=list() sign=list() str='' str1='' if pipei(string) == 2: return '错误' else: if 'log' in string : string=string.replace('log','l') if 'exp' in string: string=string.replace('exp','e') if 'pow' in string: string=string.replace('pow','p') for s in string: if s not in ['(',')','+','-','*','/','\n','l','e','p',',']: str=str+s else: if str: sum.append(eval(str)) str=''#遇见操作数直接操作数进栈 if s==',': continue x = sign p = prio(s, sign) if s=='\n' and not sign: if sum: return sum.pop() if p==-1 and s !=')' and s!='\n':#当前运算符优先级高于栈顶 sign.append(s) elif p==1:#当前运算符优先级低于栈顶 while(p==1): if s==')' and sign[-1]=='(': sign.pop() break sum.append(stack_sum_pop(sign,sum)) p=prio(s,sign)#出栈计算 if s !=')' and s!='\n': sign.append(s)#当为括号和反斜杠n时不入栈 while(sign): sum.append(stack_sum_pop(sign, sum))#出栈计算 if sum: return sum.pop() else: return '\n' infile=open("input.txt",'r')#文件操作 ofile=open("output.txt",'w+') j=0 for line in infile.readlines():#从第二行开始读 j=j+1 if j!=1: a=str(sum_push(line)) ofile.write(a) ofile.write('\n') infile.close()
相关文章推荐
- python 中自己写方法 计算向量长度 / 实现向量归一化
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- 【利用Python进行数据分析——经验篇2】计算微博转发/评论/点赞h指数的Python代码
- python实现身份证校验位计算
- 计算4000000000以内最大的f(n)=n的值---字符串问题python实现(五)
- LTE-TDD measurement gaps位置计算--Python代码实现
- 分享自用小工具:TF-IDF计算文档相似性的python实现
- 用Python实现多核心并行计算
- python计算文件的行数和读取某一行内容的实现方法
- [python]使用python实现Hadoop MapReduce程序:计算一组数据的均值和方差
- 农用地定级指数计算模块实现(一)
- python并行计算的简单实现--pp
- 计算Fibonacci数列第n项的第8种方法(数学推导与Python实现)
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- C语言实现指数计算
- python实现计算资源图标crc值的方法
- java实现中缀表达式转后缀表达式并且计算
- Problem #3288 成绩计算(python实现)
- 在python中用gmpy实现高精度计算
- 中缀表达式转换为后缀表达式 简易实现(c++)(简易表达式计算)