Основной вложенный, если в Python - PullRequest
1 голос
/ 27 мая 2019

Я начинаю с python и сталкиваюсь с основной проблемой в этом упражнении со вложением:

bird_names="eagle", "pigeon", "colibri", "seagull"

bird_guess=input("Guess the bird: ")

if bird_guess in bird_names == False:
    print("Try again")
    bird_guess2=input("Guess the Bird: ")   

    if bird_guess2 in birds == False:
        print("Try again")
        bird_guess3=input("Guess the Bird: ") 

        if bird_guess3 in birds == False:
            print("Sorry out of tries")     
        else:
            print("Yes 3rd try")
    else:
        print("Yes 2rd try")
else:
    print("Great, 1st try")

Когда я запускаю его и, например, набираю bird_guess значение d, код выводит напрямую Great, 1st try вместо прохождения всех других if состояний.

Есть идеи, где моя ошибка?

Ответы [ 2 ]

3 голосов
/ 27 мая 2019

Это:

if bird_guess in bird_names == False:

- это то же самое, что и

if bird_guess in bird_names and bird_names == False:

Вместо этого вы должны сделать следующее:

if bird_guess not in bird_names:

, чтобы проверить, не является ли предметв списке.

Причиной, по которой ваше оригинальное выражение не сработало, является цепочка сравнения .В Python сравнения могут быть произвольно объединены в цепочки, например, x < y <= z эквивалентно x < y and y <= z.И таким образом a in b == False станет a in b and b == False.

2 голосов
/ 27 мая 2019

Начиная с нового языка - это здорово! Помимо изучения деталей языка, узнайте, как писать расширяемый код.

Что произойдет, если вы захотите дать пользователю 5, а не 3 догадки? Вы получите 5 уровней if с. Альтернативой вложенному ifs является цикл:

max_tries = 3
bird_names = ["eagle", "pigeon", "colibri", "seagull"]

for current_try in range(max_tries):
    guess = input("Guess the bird: ")
    if guess in bird_names:
        print(f"Yes, {current_try+1}. try!")
        break
    elif current_try < max_tries-1:
        print("Try again")
    else:
        print("Sorry, out of tries")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...