输入:
1st integer given: 3,
2nd integer given: 2,
Primitives given in a STRING: '+'
预期产出:
5
因为3 + 2 = 5
我的方法:
str(3)+ '+' + str(2) --> '3+2'
int('3+2') --> Wishfully thinking: 5
正如预期的那样,我将得到ValueError:对于带有基数为10的int()的无效文字:' 3 + 2'。
我知道如何处理这个问题?我必须使用给定的所有输入,这意味着我必须使用字符串中的基元(' +')
谢谢!
答案 0 :(得分:3)
使用eval:
first = raw_input('1st integer given: ')
second = raw_input('2nd integer given: ')
primitives = raw_input('Primitives given in a STRING: ')
equation = first+primitives+second
answer = eval(equation)
print answer
运行方式:
1st integer given: 3
2nd integer given: 2
Primitives given in a STRING: +
5
或强>
1st integer given: 99
2nd integer given: 9
Primitives given in a STRING: /
11
答案 1 :(得分:1)
您可以使用eval。
eval( str(2) + '+' + str(3) )
你甚至可以使用这个
print( eval( input( "insert equation: " )))
或者,如果您想要分隔值:
inp = input("num1 num2 operation: ")
num1, num2, operation = inp.split()
print( eval ( str(num1) + str(operation) + str(num2) ))
答案 2 :(得分:1)
此函数递归调用自身分解其组件一次。 它也遵循标准Order of operations。
def evaluate(str_func):
if "-" in str_func:
return evaluate(str_func[:str_func.index("-")].strip()) - evaluate(str_func[str_func.index("-")+1:].strip())
if "+" in str_func:
return evaluate(str_func[:str_func.index("+")].strip()) + evaluate(str_func[str_func.index("+")+1:].strip())
if "*" in str_func:
return evaluate(str_func[:str_func.index("*")].strip()) * evaluate(str_func[str_func.index("*")+1:].strip())
if "/" in str_func:
return evaluate(str_func[:str_func.index("/")].strip()) / evaluate(str_func[str_func.index("/")+1:].strip())
return float(str_func.strip())
>>> evaluate("3 + 5")
8.0
>>> evaluate("3 + 5 / 2")
5.5
>>> evaluate("1 * 2 / 3 + 4 - 5")
-0.33333333333333304
>>>