平台上搜一下好像只有简单四则运算的计算器, 只好自己动手做了一个. 能够运算 中括号, 小括号, 乘方, 连乘连除.
'''计算器'''
import re
def 查找_运算_替换__乘方(需要运算的内容):
乘方内容列表 = re.findall('\d+\.?\d*\*\*\d+\.?\d*',需要运算的内容)
while len(乘方内容列表) > 0 :
for 乘方内容 in 乘方内容列表:
需要乘方的数字 = re.split('\*\*', 乘方内容)
乘方内容结果 = float(需要乘方的数字[0])**float(需要乘方的数字[1])
乘方内容结果 = str(乘方内容结果)
乘方内容 = re.escape(乘方内容)
需要运算的内容 = re.sub(乘方内容,乘方内容结果,需要运算的内容,1)
乘方内容列表 = re.findall('\d+\.?\d*\*\*\d+\.?\d*',需要运算的内容)
return 需要运算的内容
def 查找_运算_替换__乘除(需要运算的内容):
乘除内容列表 = re.findall('\d+\.?\d*[\*|\/]\d+\.?\d*',需要运算的内容)
while len(乘除内容列表) > 0 :
for 乘除内容 in 乘除内容列表:
if '*' in 乘除内容:
需要乘除的数字 = re.split('\*', 乘除内容)
乘除内容结果 = float(需要乘除的数字[0])*float(需要乘除的数字[1])
if '/' in 乘除内容:
需要乘除的数字 = re.split('\/', 乘除内容)
乘除内容结果 = float(需要乘除的数字[0])/float(需要乘除的数字[1])
乘除内容结果 = str(乘除内容结果)
乘除内容 = re.escape(乘除内容)
需要运算的内容 = re.sub(乘除内容,乘除内容结果,需要运算的内容,1)
乘除内容列表 = re.findall('\d+\.?\d*[\*|\/]\d+\.?\d*',需要运算的内容)
return 需要运算的内容
def 查找_运算_替换__加减(需要运算的内容):
加减内容列表 = re.findall('\d+\.?\d*[\+|\-]\d+\.?\d*',需要运算的内容)
while len(加减内容列表) > 0 :
for 加减内容 in 加减内容列表:
if '+' in 加减内容:
需要加减的数字 = re.split('\+', 加减内容)
加减内容结果 = float(需要加减的数字[0])+float(需要加减的数字[1])
if '-' in 加减内容:
需要加减的数字 = re.split('\-', 加减内容)
加减内容结果 = float(需要加减的数字[0])-float(需要加减的数字[1])
加减内容结果 = str(加减内容结果)
加减内容 = re.escape(加减内容)
需要运算的内容 = re.sub(加减内容,加减内容结果,需要运算的内容,1)
加减内容列表 = re.findall('\d+\.?\d*[\+|\-]\d+\.?\d*',需要运算的内容)
return 需要运算的内容
def 有小括号先算小括号(需要运算的内容):
小括号内容列表 = re.findall('\(.+\)',需要运算的内容)
while len(小括号内容列表) > 0 :
for 小括号内容 in 小括号内容列表:
小括号内容结果 = 查找_运算_替换__乘方(小括号内容)
小括号内容结果 = 查找_运算_替换__乘除(小括号内容结果)
小括号内容结果 = 查找_运算_替换__加减(小括号内容结果)
小括号内容结果 = re.search('\((.*)\)',小括号内容结果).group(1)
小括号内容 = re.escape(小括号内容)
需要运算的内容 = re.sub(小括号内容,小括号内容结果,需要运算的内容,1)
小括号内容列表 = re.findall('\(.+\)',需要运算的内容)
return 需要运算的内容
def 有中括号先算中括号(需要运算的内容):
中括号内容列表 = re.findall('\[.+\]',需要运算的内容)
while len(中括号内容列表) > 0 :
for 中括号内容 in 中括号内容列表:
中括号内容结果 = 有小括号先算小括号(需要运算的内容)
中括号内容结果 = 查找_运算_替换__乘方(中括号内容结果)
中括号内容结果 = 查找_运算_替换__乘除(中括号内容结果)
中括号内容结果 = 查找_运算_替换__加减(中括号内容结果)
中括号内容结果 = re.search('\[(.*)\]',中括号内容结果).group(1)
中括号内容 = re.escape(中括号内容)
需要运算的内容 = re.sub(中括号内容,中括号内容结果,需要运算的内容,1)
中括号内容列表 = re.findall('\[.+\]',需要运算的内容)
return 需要运算的内容
print('欢迎使用小茶花的计算器~')
while True:
需要运算的内容 = input('请输入需要计算的内容:\t')
if 需要运算的内容 == 'q':
break
try:
需要运算的内容 = 有中括号先算中括号(需要运算的内容)
需要运算的内容 = 有小括号先算小括号(需要运算的内容)
需要运算的内容 = 查找_运算_替换__乘方(需要运算的内容)
需要运算的内容 = 查找_运算_替换__乘除(需要运算的内容)
需要运算的内容 = 查找_运算_替换__加减(需要运算的内容)
print('结果为:\t',需要运算的内容)
except ZeroDivisionError:
print('产生了为0的除数')