我试图制作一个计算器,但有点不同。 我想是否像以下那样获取输入:
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 :(得分:0)
从operator
模块中抓取操作并创建可用运算符的字典:
>>> from operator import add, sub, mul, truediv
>>> ops = {'+': add, '-': sub, '*': mul, '/': truediv}
执行此操作后,您可以使用first_operation
作为key
上的ops
,获取相应的操作功能,并提供first_number
和second_number
作为其参数:
>>> first_number = int(input('Type first number: '))
>>> second_number = int(input('Type second number: '))
>>> first_operation = input('Type your operation (+, -, *, /): ')
我们说我们输入5
和10
以及+
,然后:
>>> 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,再次。