我正在编写一个程序来从用户那里得到一个等式,例如2 * 56
,程序会给出答案。这是有效的,但是对于超过2个函数,我的代码会中断
equation = input('Enter an equation: ')
def addition():
splited = equation.split('+')
results = [float(i) for i in splited]
results = results[0] + results[1]
print(results)
def subtraction():
splited= equation.split('-')
results = [float(i) for i in splited]
results = results[0] - results[1]
print(results)
def multiply():
splited= equation.split('*')
results = [float(i) for i in splited]
results = results[0] * results[1]
print(results)
def divide():
splited= equation.split('/')
results = [float(i) for i in splited]
results = results[0] / results[1]
print(results)
if ('+') in equation:
addition()
elif ('-') in equation:
subtraction()
elif ('*') in equation:
multiply()
elif ('/') in equation:
divide()
else:
print('Error! Please only input + , - , * , /')
此代码很容易适用于只包含一个操作的方程式,但如果用户输入2 + 2 - 9 * 6
怎么能修改此代码以适应每种情况
答案 0 :(得分:1)
我不确定这是不是你想要的,但是一个非常简单的方法就是:
equation = input('Enter an equation: ')
print(eval(equation))
答案 1 :(得分:1)
在你的程序中,表达式只包含一个运算符和2个操作数,当有更多运算符时,结果= result[0] + result[1]
将计算为results[0] = 2
,results[1] = 2 - 9 * 6
。因此,您遇到了这样的错误。
以下程序从右到左进行评估。递归迭代表达式的每个操作数或运算符。在进入解决方案之前了解re.split并捕获组。
import re
def evaluate(expression, index, size, result):
if index == 0:
operand = float(expression[0])
return evaluate(expression, index + 1, size, operand)
elif index < size:
op = expression[index]
if op in ['+', '-', '/', '*']:
if op == '+':
return result + evaluate(expression, index +1, size, 0.0)
if op == '-':
return result - evaluate(expression, index +1, size, 0.0)
if op == '/':
return result / evaluate(expression, index +1, size, 0.0)
if op == '*':
return result * evaluate(expression, index +1, size, 0.0)
else:
return evaluate(expression, index +1, size, float(op))
else:
return result
expression = re.split('([+-/*])', '2+34-48/8')
size = len(expression)
print evaluate(expression, 0, size, 0.0)