如何将输入作为操作

时间:2016-09-17 23:36:05

标签: python python-3.x

我试图制作一个计算器,但有点不同。 我想是否像以下那样获取输入:

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这样的输入,但我想在打印答案后解决。

1 个答案:

答案 0 :(得分:0)

operator模块中抓取操作并创建可用运算符的字典:

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

执行此操作后,您可以使用first_operation作为key上的ops,获取相应的操作功能,并提供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

请注意,在将数字提供给运算符之前,这些数字会包含在int中,因为类型str时它们的行为会有所不同。

作为一个简单的替代方案,您可以使用literal_eval模块中的ast,为其提供表达式作为输入:

>>> 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,再次。