2016-09-17 40 views
-1

我试图制作一个计算器,但有点不同。 我在想,如果得到输入像操作:如何将输入作为操作

first_number = input('Type first number: ') 
first_operation = input('Type your operation (+, -, *, /): ') 
second_number = input('Type second number: ') 
first_answer = input('Do you wanna stop here y/n: ') 
if first_answer = "y": 
    print(int(first_number), str(first_operation), int(second_number)) 

目前,该方案需要做出与用户的输入有问题。例如,如果用户输入第一个号码为3,第一个操作为+,第二个号码为2。我只能写出像3 + 2这样的输入,但我想在打印答案后解决。

回答

0

抓住从operator模块的操作,并创建可用的运营商的字典:

>>> from operator import add, sub, mul, truediv 
>>> ops = {'+': add, '-': sub, '*': mul, '/': truediv} 

这样做后,你可以在ops使用first_operationkey,得到了相应的功能操作和供应first_numbersecond_number作为参数:

>>> first_number = int(input('Type first number: ')) 
>>> second_number = int(input('Type second number: ')) 
>>> first_operation = input('Type your operation (+, -, *, /): ') 

比方说,我们进入510+,则:

>>> print(ops[first_operation](first_number, second_number)) 
15 

注意,因为他们的行为不同,当str类型的号码包裹在int它们提供给运营商面前。

举一个简单的选择,你可以使用literal_evalast模块,它提供一个表达式作为输入:

>>> from ast import literal_eval 
>>> first_number = input('Type first number: ') 
>>> second_number = input('Type second number: ') 
>>> first_operation = input('Type your operation (+, -, *, /): ') 

在这里,您不必进行任何更改,int,你刚刚加入所有的参数和创建一个整体表达式的字符串,并将其送到literal_eval,以便它做到这一点。

>>> literal_eval(" ".join([first_number, first_operation, second_number])) 

在本质上您的通话将看起来像:

>>> literal_eval('5 + 10') 

为15的结果,再次。