Перехват значения цифры c вне диапазона целочисленного ввода с помощью блока исключений - PullRequest
0 голосов
/ 23 апреля 2020

меня зовут Ана Бэйрд, и я пишу программу с блоком try и исключением. Я должен попросить пользователя ввести число от 1 до 12, но что если пользователь введет число 0 или 13? Или любое число больше 12? Какую ошибку я должен набрать в блоке исключений, чтобы перехватить эту ошибку?

Кроме того, в новой функции def я должен поместить меню и распечатать его, так как мне сначала распечатать меню так, чтобы что пользователь может увидеть его, прежде чем он сможет выбрать номер из этого меню? Это меню должно быть внутри функции?

Так, например, это моя попытка со вторым вопросом:

userInp = int(input("Please enter a number between 1 and 12 from the menu: ")

    def printMenu()
        menu = print("\t\t1)Category\n\t\t2)Item\n\t\t3)Serving Size\n\t\t4)Calories")

Третий вопрос: как попросить пользователя ввести число от 1 до 12 и постоянно просить этого пользователя продолжать ввод, пока он не введет «готово»? Я пытался с помощью l oop, но он продолжает бесконечно l oop оператора печати, например

"you selected Item
you selected Item
You selected Item
..."

и т. Д.

Есть идеи? Я ценю помощь, спасибо! Кроме того, пожалуйста, сделайте это простой программой, не слишком сложной, я просто новичок, спасибо.

С уважением, Ана Бэйрд

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Относительно вашей первой проблемы: вы можете определить пользовательское исключение и повысить его.

class IncorrectInput(Exception):
    pass

def enter_number():
    try:
        userInp = int(input("Please enter a number between 1 and 12 from the menu: "))
        if userInp < 1 or userInp > 12:
            raise IncorrectInput
        return userInp
    except IncorrectInput as e:
        # Handle the exception.
        print("Number should be between 1 and 12.")
        return None

if __name__ == '__main__':
    my_number = enter_number()
    print('Output of enter_number(): {}'.format(my_number))

Относительно вашей второй проблемы: Нет смысла определять переменную menu = print(...). Это то, что вы ищете?

def printMenu():
    print("\t\t1)Category\n\t\t2)Item\n\t\t3)Serving Size\n\t\t4)Calories")

printMenu()
userInp = int(input("Please enter a number between 1 and 12 from the menu: ")

По поводу вашего третьего вопроса: попробуйте while True: l oop и включите проверку, которая может сломать бесконечное l oop:

if userInp == 'done':
    break
0 голосов
/ 23 апреля 2020

здесь:

if userInp >= 1 and userInp <= 12:
    # 1 - 12
else:
    # error msg
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...