问题遇到的现象和发生背景
编写了一个计算器程序,但是输出结果很奇怪,希望能改正
遇到的现象和发生背景,请写出第一个错误信息
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
operators = {
"(": 1,
")": 1,
"+": 2,
"-": 2,
"*": 3,
"/": 3,
"%": 3,
"^": 4,
}
expression = input("input expression:")
def calculate(expression):
operands = []
operators = []
# 检查表达式是否合法
if expression[0] in operators or expression[-1] in operators:
return "Hint:the expression is wrong in format."
for i in range(1, len(expression)):
if expression[i] in operators and expression[i - 1] in operators:
return "Hint:the expression is wrong in format."
negative = False
for x in expression:
# 如果字符是数字,则将它压入操作数栈中
if x.isdigit():
if negative:
operands.append(-int(x))
negative = False
else:
operands.append(int(x))
# 如果字符是运算符,则根据优先级规则压入或弹出运算符栈
elif x in operators:
if x == "(":
operators.append(x)
elif x == ")":
while operators[-1] != "(":
operator = operators.pop()
b = operands.pop()
a = operands.pop()
if operator == "+":
operands.append(a + b)
elif operator == "-":
operands.append(a - b)
elif operator == "*":
operands.append(a * b)
elif operator == "/":
operands.append(a / b)
elif operator == "%":
operands.append(a % b)
elif operator == "^":
operands.append(a ** b)
operators.pop()
# 如果遇到其他运算符,则弹出运算符栈中优先级大于或等于当前运算符的运算符
else:
while operators and operators[-1] != "(" and operators.index(operators[-1]) >= operators.index(x):
operator = operators.pop()
b = operands.pop()
a = operands.pop()
if operator == "+":
operands.append(a + b)
elif operator == "-":
operands.append(a - b)
elif operator == "*":
operands.append(a * b)
elif operator == "/":
operands.append(a / b)
elif operator == "%":
operands.append(a % b)
elif operator == "^":
operands.append(a ** b)
# 将当前运算符压入运算符栈中
operators.append(x)
elif x == "-":
negative = True
return operands.pop()
result = calculate(expression)
print(result)
运行结果及详细报错内容
1+1=1或1+3=3
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
建立一个数字栈和一个符号栈,遍历输入值里面的所有字符
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
希望最后运行界面大概如下,如果表达式格式有误会提示
input expresion:
-2*(3+5)+2^3/4=
-14
continue or not(y,n)?
y
input expression:
2 3 5+6=
Hint:the expression is wrong in format.