解开由整数和基元组成的方程

时间:2014-04-23 17:27:14

标签: python string integer primitive

输入:

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'。

我知道如何处理这个问题?我必须使用给定的所有输入,这意味着我必须使用字符串中的基元(' +')

谢谢!

3 个答案:

答案 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
>>>