Как сделать да или нет в питоне

Хочешь узнать, как сделать да или нет в Питоне? Покажем на пальцах, без заумных терминов! Юзай input() и if, и твой код засияет.

Одна из самых популярных задач при работе с консолью, запросить у пользователя подтверждение в формате да/нет. На первый взгляд кажется простым, но за кулисами скрывается множество нюансов: регистр символов, пробелы, опечатки, «y/n» вместо «да/нет» и необходимость повторного запроса при ошибке. В этой статье мы разберёмся, как реализовать надёжный и удобный «да/нет»-ввод в Python, начиная с базового input и заканчивая готовыми библиотечными решениями.


Базовый способ: «велосипед» из input

Минимальный пример, который чаще всего показывают новичкам:


answer = input("Продолжить? (да/нет): ")
if answer.lower == "да":
 print("Поехали!")
else:
 print("Отменено.")

Плюсы: коротко и понятно.
Минусы: не проверяет пустой ввод, не обрабатывает «Yes», «y», «1» и т.д.


Улучшенная версия: цикл + проверки

Чтобы защититься от дурака, завернём запрос в бесконечный цикл и добавим «белый список» допустимых ответов:


def ask_yes_no(question: str) -> bool:
 """Возвращает True при ответе 'да' и False при ответе 'нет'."""
 YES = {"да", "д", "yes", "y", "1"}
 NO = {"нет", "н", "no", "n", "0"}

 while True:
 answer = input(f"{question} (да/нет): ").strip.lower
 if answer in YES:
 return True
 if answer in NO:
 return False
 print("Пожалуйста, введите 'да' или 'нет'.")

if ask_yes_no("Запустить процесс"):
 print("Стартуем...")

Что улучшили:

  • Игнорируем регистр и лишние пробелы (.strip.lower).
  • Понимаем сразу несколько вариантов («y», «1»).
  • Зацикливаемся до тех пор, пока не получим валидный ответ.

Форматирование и локализация

Если ваше приложение будет переводиться, храните допустимые ответы в словаре:


LOCALES = {
 "ru": {"yes": {"да", "д", "yes", "y"}, "no": {"нет", "н", "no", "n"}},
 "en": {"yes": {"yes", "y"}, "no": {"no", "n"}}
}

Такой подход позволяет легко расширять список языков без изменения логики.


Обработка Ctrl+C и EOF

Пользователь может закрыть терминал или нажать Ctrl+C. Добавим аккуратное завершение:


import sys

def safe_ask(prompt):
 try:
 return ask_yes_no(prompt)
 except (KeyboardInterrupt, EOFError):
 sys.exit("
Прервано пользователем")

Библиотечные «плюшки»

click

Установка: pip install click


import click
if click.confirm("Продолжить?", default=True):
 ...

PyInquirer / InquirerPy (TUI-режим)


from InquirerPy import prompt
question = {
 "type": "confirm",
 "message": "Подтвердить действие?",
 "default": True,
}
result = prompt(question) # True/False

Плюсы: стрелочки, подсветка, кроссплатформенность.
Минусы: дополнительная зависимость, 2–4 МБ к дистрибутиву.


Подводим итоги

  • Минимум: используйте input + цикл для простых сценариев.
  • Стандарт: вынесите логику в функцию ask_yes_no с множествами вариантов.
  • Максимум: подключите click или InquirerPy для продакшена.

Независимо от выбранного подхода, главное — не забывать обрабатывать неверный ввод и предоставлять пользователю понятную обратную связь. Тогда ваш «да/нет» будет работать как часы в любых руках.