#python #python-3.x
#python #python-3.x
Вопрос:
Я создаю небольшой калькулятор командной строки, который принимает входные данные от пользователя и выводит ответ. Есть пара «команд», которые может использовать пользователь, таких как «добавить» и «минус». Основной цикл выглядит следующим образом:
on = True
while on:
in = input("Type your command -> ")
if(in == "add")
n1 = input("What is the first number -> ")
n2 = input("What is the second number -> ")
print("{} {} = {}".format(n1, n2, n1 n2))
...
else:
print("Please enter a valid operation.")
Я хочу добавить «команду» cancel
, которая отменит любую команду, которую пользователь выполняет в данный момент. Например, если они выполняют сложение и вводят ввод «отмена», то он возвращается в основной цикл. Как я мог это сделать?
Комментарии:
1. Вам нужно будет вручную проверить и обработать этот случай. Вы можете использовать
continue
though, чтобы пропустить оставшуюся часть текущей итерации и начать с начала цикла.2. Вы также должны использовать
int
.n1 = int(input("What is the first number -> "))
потому что вы используете математические операции3. Ваш вопрос должен оставаться строго вопросом. Тем не менее, вы можете опубликовать свой собственный ответ (и даже принять его, если хотите).
Ответ №1:
Хороший способ обработки нелокальных выходов — исключение.
class CancelException(Exception):
"Exception raised when the calculator user presses C"
pass
def getNumber(prompt):
number = input(prompt)
if number in ("C", "cancel"):
raise CancelException("User selected cancel")
return float(number)
on = True
while on:
try:
in = input("Type your command -> ")
if(in == "add")
n1 = get_number("What is the first number -> ")
n2 = get_number("What is the second number -> ")
print("{} {} = {}".format(n1, n2, n1 n2))
...
else:
print("Please enter a valid operation.")
except CancelException:
pass
Как только вы начнете играть с этим, вы поймете, что вам также нужно перехватывать исключение при попытке преобразовать входные данные, которые не являются числом, в число. На самом деле это будет очень похоже на сценарий отмены.
Ответ №2:
Может быть, попробуйте что-то вроде:
if(in == "add")
n1 = input("What is the first number -> ")
n2 = input("What is the second number -> ")
if(n1 == "cancel" or n2 == "cancel")
print("cancelling")
else:
print("{} {} = {}".format(n1, n2, n1 n2))
Комментарии:
1. Я думал о чем-то подобном, но это отменит команду только в том случае, если были введены оба n1 и n2, поэтому, если пользователь отменяет ввод первого числа, ему все равно будет предложено ввести второе.
Ответ №3:
вы можете получить другой ввод от пользователя. добавьте эти строки в конце вашего цикла:
'''
ask = input('do you want to continue? (yes / no):')
if ask == 'yes':
on = True
else:
on = False
»’