Используя цикл while, чтобы проверить, принадлежит ли ввод пользователя (строка) списку? - PullRequest
0 голосов
/ 17 января 2019

Я новичок в Python, с небольшим фоном в C. Я хотел бы настроить цикл while с помощью try - кроме - else. Я успешно сделал это при попытке проверить тип данных (используя кроме: ValueError), например, запросив у пользователя целое число. Однако для этой программы пользователь вводит строку, и программе необходимо проверить эту строку по списку строк, и, если ее там нет, снова спросить пользователя. Мой код до сих пор выполняется, но независимо от ввода пользователя цикл прерывается. Вот оно сейчас:

senses = ["touch", "smell", "sight", "hearing", "taste"]


while True:
    try:
        choice = input("What is your favorite sense? ")

    except: 
        if choice not in senses:
            print("Sorry, I don't think that's a sense")
            #try again, return to start of loop
            continue 
    else:
        break 

Первоначально мой код выглядел следующим образом, и он работал, но существует проблема избыточности с методом ввода:

senses = ["touch", "smell", "sight", "hearing", "taste"]
choice = input("What is your favorite of the 5 human senses:")

while choice not in senses:

    choice =input("What is your favorite of the 5 human senses")

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Я бы написал так:

senses = {"touch", "smell", "sight", "hearing", "taste"}

while True:
    choice = input("What is your favorite of the 5 human senses? ")
    if choice in senses:
        break

Таким образом, вы задаете вопрос только в одном месте. while True означает «делать это навсегда», а break останавливает цикл при выполнении условия.

0 голосов
/ 17 января 2019

Вопрос о личных предпочтениях / проблемности, но я склонен использовать что-то вроде этого

senses = ["touch", "smell", "sight", "hearing", "taste"]
choice = ""

while choice not in senses:
    choice =input("What is your favorite of the 5 human senses")

Это инициализирует choice как что-то не в senses, таким образом вызывая первый цикл

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...