# 开发一个简单的计算器程序
# 实现对加减乘除、括号优先级的解析,并实现正确运算
def cal(num1, num2, op):
result = 0.0
if op == '+':
result = num1 + num2
elif op == '-':
result = num1 - num2
elif op == '*':
result = num1 * num2
elif op == '/':
result = num1 / num2
return result
def cal_prior(operator):
int_prior = 0
if operator == '+' or operator == '-':
int_prior = 1
elif operator == '*' or operator == '/':
int_prior = 2
elif operator == '(':
int_prior = 3
elif operator == ')':
int_prior = 4
return int_prior
while True:
str_input = '('+input("请输入需计算的表达式用‘()’包住[q退出]:").replace(" ","")+')'
num_list = [] #操作数栈
operator_list = [] #符号栈
x = 0
v = 0
if str_input == '(q)':
break;
for a in str_input:
if a.isdigit():
x = x * 10 + int(a) # 数字不是一位数时循环读数
v = 1
else:
if v == 1:
num_list.append(x) # 数字进栈
x = 0
v = 0
if a in ['+', '-', '*', '/', '(', ')']:
if len(operator_list) == 0: #符号栈为空时,待入栈字符直接进栈
operator_list.append(a)
else:
if a == '(': # '('直接进符号栈
operator_list.append(a)
elif a == ')':
while(operator_list[-1] != '('and len(operator_list)!=0): # 计算结果,将结果压入数字栈
op = operator_list.pop()
num2 = num_list.pop()
num1 = num_list.pop()
result = cal(num1, num2, op)
num_list.append(result)
operator_list.pop()
# if len(operator_list) == 0: # 符号栈为空时,待入栈字符直接进栈
# operator_list.append(a)
else:
while len(operator_list) != 0 and cal_prior(operator_list[-1]) >= cal_prior(a) and operator_list[-1] != '(' :
op = operator_list.pop()
num2 = num_list.pop()
num1 = num_list.pop()
result = cal(num1, num2, op)
num_list.append(result)
operator_list.append(a)
#输出运算结果
if len(operator_list)==0:
if len(num_list) == 1:
print("运算结果:",num_list)
else:
print("运算出错!")
Python简易计算器
最新推荐文章于 2025-03-01 17:44:54 发布