Почему код работает не корректно. При введении Лампочка/лампочка, цикл не останавливается

Рейтинг: 0Ответов: 2Опубликовано: 16.08.2023
print("Висит груша, нельзя скушать. Что это такое?") 
s = "" 
while s != "Лампочка" or s != "лампочка": 
    s = input("Введите ответ и нажмите Enter: ") 
print("Вы отгадали загадку!")

Ответы

▲ 0

Вот такой код работает:

print("Висит груша, нельзя скушать. Что это такое?")

while True:  # (1)
    s = input("Введите ответ и нажмите Enter: ")  # (2)

    if s in ("Лампочка", "лампочка"):  # (3)
        print("Вы отгадали загадку!")  # (4)
        break  # (5)
  1. Запускаем бесконечный цикл.
  2. Запрашиваем ответ
  3. Проверяем верен ли он
  4. Если ответ верен, выводим нужное сообщение и...
  5. ...выходим.

Также если нужно распознавание ответа в любом регистре, то вот код:

print("Висит груша, нельзя скушать. Что это такое?")

while True: 
    s = input("Введите ответ и нажмите Enter: ")

    if s.lower() == "лампочка":
        print("Вы отгадали загадку!")
        break
▲ 0

Мне просто не понятно почему цикл while не завершается, ведь условие ИЛИ ТО, ИЛИ ТО срабатывает, и должно вывести из цикла

В том то и дело, что в while пишется условие продолжения работы цикла. И условие s != x or s != y всегда будет истинным (в случае, если x не одинаковое с y), потому что s ведь не может быть одновременно равно двум разным вещам.

  • если s будет равно x, то не выполнится условие s != x, но выполнится условие s != y
  • если s будет равно y, то наоборот не сработает s != y, но сработает s != x
  • а если s будет равно некоему z (не равному ни x ни y), то сработают сразу оба условия и цикл опять же продолжит работу

Из-за того, что у вас два условия (из которых хотя бы одно будет истинным, как я показал выше) объединены через ИЛИ, у вас суммарное условие всегда будет выполняться и цикл будет продолжать работать.

Так что ваше условие продолжения работы цикла явно должно быть написано через И, а не через ИЛИ.