将包含整数和原始值的方程解开
输入:
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: invalid literal for int() with base 10: '3+2'。
有没有什么办法可以解决这个问题?我必须使用所有给定的输入,也就是说我必须使用字符串中的基本元素('+')
谢谢!!
3 个回答
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) ))
1
这个函数会自己不断地调用自己,把它的组成部分一个一个拆解开来。它还遵循了标准的运算顺序。
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
>>>
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