Я предложил бы использовать один input
заявление и затем с помощью простого regular expression разобрать строку в x
, y
и оператора. Например, этот шаблон: (\d+)\s*([-+*/])\s*(\d+)
. Здесь \d+
означает «один или более цифры», \s*
означает «ноль или более пространства», и [-+*/]
означает «любой из этих четырех символов. Части в пределах (...)
позже могут быть извлечены.
import re
expr = input() # get one input for entire line
m = re.match(r"(\d+)\s*([-+*/])\s*(\d+)", expr) # match expression
if m: # check whether we have a match
x, op, y = m.groups() # get the stuff within pairs of (...)
x, y = int(x), int(y) # don't forget to cast to int!
if op == "+":
print(x + y)
elif ...: # check operators -, *,/
...
else:
print("Invalid expression")
В качестве альтернативы четыре if/elif
вы также можете создать словарь, символы операторов отображения в функцию:
operators = {"+": lambda n, m: n + m}
а потом просто получить нужную функцию из этого Dict и применить его к операндам:
print(operators[op](x, y))
Используйте только один 'input', а затем используйте регулярное выражение или аналогичный синтаксический анализ строки. Кроме того, вы хотите, чтобы пользователь нажал Enter между x, xy и y? –
Этот код, вероятно, не делает то, что вы ожидаете, так как вы не конвертируете строки, то есть: 1 + 2 = 12 – danielfranca
Возможный дубликат [Python, создающий калькулятор] (http://stackoverflow.com/questions/13116167/python-create-a-calculator) – log0