Комментарий : str.split()
... только хорошо ... отформатирован с пробелами.
Он не будет корректно маркировать "12 * 8"
Для обработки обоих и других возможных форматов замените на re.split(...)
, например:
import re
# Split by blank, require ALWAYS three parts delimited with blank
v1, v2 = re.split('[\+\-\*\/]', equation)
op = equation[len(v1)]
Вывод :
12*8 = 96
12* 8 = 96
100 *10 = 1000
division by zero: You cannot divide by 0
12 / 0 = None
Вопрос : арифметические выражения ... не работает с более чем одним значением места
Использование str.split()
васможет обрабатывать значения любой длины.
Упростите ваш подход, например:
def only_parsing(equation):
# Use the operators as dict key
operators = {'+': lambda x, y: int(x) + int(y),
'-': lambda x, y: int(x) - int(y),
'*': lambda x, y: int(x) * int(y),
'/': lambda x, y: int(x) / int(y)}
# Split by blank, require ALWAYS three parts delimited with blank
v1, op, v2 = equation.split()
#print("{}".format((v1, op, v2)))
# Use try:...except to catch ZeroDivisionError
try:
# Call the lambda given by dict key
return operators[op](v1, v2)
except ZeroDivisionError as e:
print("{}: You cannot divide by 0".format(e,))
for exp in ['12 * 8', '100 * 10', '12 / 0']:
print("{} = {}".format(exp, only_parsing(exp)))
Qutput :
12 * 8 = 96
100 * 10 = 1000
division by zero: You cannot divide by 0
12 / 0 = None
Протестировано на Python: 3.4.2