Как базовый оператор if работает в Python?

Я начинаю с 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 операторы.

Любая идея, где моя ошибка?

Напишите условия так: if bird_guess not in bird_names:. И что такое птицы?

CristiFati 27.05.2019 16:45
x in y == False неверно и действительно проверено x not in y
Igle 27.05.2019 16:45
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
3
365
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Этот:

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.

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

Что произойдет, если вы захотите дать пользователю 5 предположений вместо 3? Вы получите 5 уровней ifs. Альтернативой вложенным 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")
# [ ] Create the "Guess the bird" program 

# [ ] nested conditionals
# if
   # if
       # if
       # else
    #else
#else



bird_guess = input()
bird_name = "eagle, falcon, crow, dove, pigeon," 

bird_guess in bird_name

if bird_guess == "eagle":
    print("1st Try!: ", bird_guess in bird_name)
    bird_guess = input() # added variable to continue the code

if bird_guess = = "crow":
    print("2nd Try!: ", bird_guess in bird_name)
    bird_guess = input()
# [ ] added if conditions is to continue the bird_guess game option 
if bird_guess = = "falcon":
    print("3rd Try!: ", bird_guess in bird_name)
    bird_guess = input()

if bird_guess = = "dove":
    print("4th Try!: ", bird_guess in bird_name)
    bird_guess = input()

if bird_guess = = "pigeon":
    print("5th Try!: ", bird_guess in bird_name)
    bird_guess = input()

# [ ]  the added else & if is to continue code if the nested if answer is incorrect 
else:
    print("Try Again!: ")
    bird_guess = input()
if bird_guess = = "crow":
    print("2nd Try!: ", bird_guess in bird_name)
    bird_guess = input()



else:
    print("2 Try Again!: ")
    bird_guess = input()
if bird_guess = = "falcon":
    print("3nd Try!: ", bird_guess in bird_name)
    print("Sorry Out turn: ") # [ ]last else & if will not need variable  given there won't be any option or guess after words
else:
    print("game over")

Добро пожаловать в Stack Overflow! Спасибо за этот фрагмент кода, который может предоставить некоторую ограниченную краткосрочную помощь. Правильное объяснение значительно улучшится его долгосрочного значения, показывающее Зачем, является хорошим решением проблемы и сделает его более полезным для будущих читателей с другими подобными вопросами. Пожалуйста, редактировать ваш ответ, чтобы добавить некоторые пояснения, включая сделанные вами предположения.

Toby Speight 12.02.2020 16:24

вы должны редактировать ответить, чтобы включить объяснение, а не писать его в комментарии!

Toby Speight 13.02.2020 17:25

Другие вопросы по теме