Как добавить прерывание в программу командной строки

#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
  

»’