输入前缀表达式字符串 输出前缀表达式的计算结果(递归)
如:
+ 3 6 ==> 9.0
* + 3 6 + 5 18 ==> 207.0
/ + * - 17.3 8.9 - 3.9 4.7 18 - 3 * 2.3 7 ==> -0.86
def is_float(s):
try:
n = float(s)
return True
except ValueError:
return False
def apply(operator, operand1, operand2):
if operator == '+':
return operand1 + operand2
elif operator == '-':
return operand1 - operand2
elif operator == '*':
return operand1 * operand2
elif operator == '/':
return operand1 / operand2
elif operator == '%':
return operand1 % operand2
else:
raise ValueError("bad operator :" + operator)
def evaluate(token):
first = token.pop(0)
if is_float(first):
return float(first)
else:
operand1 = evaluate(token)
operand2 = evaluate(token)
return apply(first, operand1, operand2)
def main():
expr = input("Please input a Qianzhui string:")
while expr != '':
token = expr.split()
value = evaluate(token)
print("value = ", round(value, 2))
expr = input("Please input a Qianzhui string:")
print("Exiting.")
main()
result:
Please input a Prefix expression string:/ + * - 17.3 8.9 - 3.9 4.7 18 - 3 * 2.3 7
value = -0.86
Please input a Prefix expression string: + 3 6
value = 9.0
Please input a Prefix expression string: * + 2 3 + 5 18
value = 115.0
Please input a Prefix expression string:
Exiting.
Process finished with exit code 0