Почему при вводе новых значений вне диапазона выводится «Нет»? Python 3 - PullRequest
0 голосов
/ 10 апреля 2020

Я пытался написать код, в котором, если пользовательский ввод находится за пределами диапазона, он снова запросит ввод у пользователя. Это сработало в первый раз, когда выполняется l oop, но после этого выводится «none». Как сохранить повторение l oop, пока не будет введен правильный ответ? Может кто-нибудь объяснить, пожалуйста, это для меня.

например, если я введу цифру 5 в код ниже, он должен попросить пользователя снова, пока пользователь не введет правильный ответ.

def find_letter(word):
    prompt = "Enter index: "
    index = int(input(prompt))
    length_of_word = len(word) - 1
    while (index >= 0 and index <= length_of_word):
        index_word = word[index]
        return index_word
    else:
        index = int(input(prompt))
print(find_letter("Cats"))

Ответы [ 3 ]

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

Вы получили логику c в обратном направлении. В настоящее время ваш код будет (пытаться) продолжать выполнять содержимое блока while до тех пор, пока ввод действителен, но не будет, поскольку в блоке while есть возврат. Между тем, блок else будет запускаться только один раз . Так что вы, вероятно, захотите

    while (index < 0 or index > word_length): #the 'invalid' input
        index = int(input(prompt)) #keep attempting to get new input
    else: #when we reach this block, the input is valid
        index_word = word[index] #so this is run once
        return index_word

Перечитайте ваш Python do c. Первый блок while l oop выполняется до тех пор, пока указанное условие истинно, а блок else (если есть) выполняется только один раз, когда условие больше не истинно, за исключением случаев, когда первый блок завершается с возвратом, перерыв или выбрасывание исключения. Вполне возможно, что условие уже ложно перед вводом while-else, поэтому в этом случае первый блок never run, тогда как блок else все еще выполняется один раз.

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

Относительно возвращенного None это происходит потому, что в else после ввода функция завершается, неявно возвращая None (т.е. ничего не возвращая).

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

Ваш while l oop бесконечен, поскольку вы не увеличиваете переменную index. Кроме того, оператор else должен иметь перед собой if. ( Полагаю, вы хотели написать if вместо while)

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