Условия при работе с input: практические сценарии

Раздел: Управляющие конструкции -> Условные операторы при вводе

Основные принципы связки input и if else

Наиболее эффективное решение для обработки пользовательского ввода с условиями заключается в использовании цикла while True совместно с конструкцией try-except и if-elif-else. Такой подход позволяет гарантировать получение корректных данных без прерывания программы.

while True:
    user_input = input("Введите число от 1 до 10: ")
    try:
        num = int(user_input)
        if 1 <= num <= 10:
            print(f"Вы ввели {num}, спасибо!")
            break
        else:
            print("Число вне диапазона. Попробуйте снова.")
    except ValueError:
        print("Ошибка: необходимо ввести целое число.")

Python input if else (ввод с условием if else в python)

Введите число от 1 до 10: abc
Ошибка: необходимо ввести целое число.
Введите число от 1 до 10: 15
Число вне диапазона. Попробуйте снова.
Введите число от 1 до 10: 7
Вы ввели 7, спасибо!

В данном примере try-except перехватывает ошибку преобразования, а if-else проверяет диапазон. Цикл повторяется, пока break не прервёт его при успехе.

Типичная ошибка:

Забыть про try-except при преобразовании строки в число. Если пользователь введёт текст, программа упадёт с ValueError. Решение - всегда оборачивать преобразование в блок try.

Как сравнить введённую строку с эталоном?

Простая проверка на совпадение строк без учёта регистра и лишних пробелов.

answer = input("Какой язык программирования вы изучаете? ").strip().lower()
if answer == "python":
    print("Отличный выбор!")
else:
    print("Тоже хороший вариант.")
Какой язык программирования вы изучаете? Python
Отличный выбор!

Проблема:

Сравнение без strip() и lower() может не сработать из-за лишних пробелов или разного регистра. Решение - нормализовать строку.

Как проверить, что введённое число попадает в диапазон?

После преобразования в int используется цепочка сравнений.

age = int(input("Сколько вам лет? "))
if 0 < age < 120:
    print("Возраст корректен.")
else:
    print("Нереалистичный возраст.")

Ошибка:

Не обработано исключение, если ввод не число. Рекомендуется объединять с try-except.

Как обработать несколько вариантов ответа с помощью elif?

Конструкция elif удобна для меню или команд.

command = input("Введите команду (start, stop, exit): ").strip().lower()
if command == "start":
    print("Запуск процесса...")
elif command == "stop":
    print("Остановка процесса...")
elif command == "exit":
    print("Выход из программы...")
else:
    print("Неизвестная команда.")
Введите команду (start, stop, exit): Start
Запуск процесса...

Проблема:

Избыточное количество elif ухудшает читаемость. Для большого числа вариантов лучше использовать словарь.

Как компактно записать простое условие с помощью тернарного оператора?

Тернарный оператор подходит для присваивания значения в одну строку.

x = int(input("Введите число: "))
result = "положительное" if x > 0 else "неположительное"
print(result)

Ошибка:

Тернарный оператор нельзя использовать для сложной логики. Вложенные тернарные операторы делают код нечитаемым.

Как выполнить несколько проверок последовательно (вложенные if)?

Вложенные if применяются, когда второе условие зависит от первого.

user_input = input("Введите пароль: ")
if len(user_input) >= 8:
    if any(ch.isdigit() for ch in user_input):
        print("Пароль подходит.")
    else:
        print("Нужна хотя бы одна цифра.")
else:
    print("Пароль слишком короткий.")

Проблема:

Чрезмерная вложенность усложняет чтение. Можно объединить условия через and.

Как определить, что пользователь ничего не ввёл?

Пустая строка оценивается как False в логическом контексте.

name = input("Введите имя: ").strip()
if not name:
    print("Имя не может быть пустым.")
else:
    print(f"Привет, {name}!")

Ошибка:

Забыть про strip() - строка из одних пробелов не считается пустой.

Как преобразовать ввод в число и проверить его тип без исключения?

Методы isdigit() или replace() для чисел с плавающей точкой.

value = input("Введите целое число: ").strip()
if value.isdigit():
    num = int(value)
    print(f"Квадрат числа: {num**2}")
else:
    print("Это не целое число.")

Ограничение:

isdigit() не работает для отрицательных чисел и чисел с плавающей точкой. Для универсальной проверки лучше try-except.

Как защититься от ошибки при преобразовании в int с помощью try-except?

Блок try перехватывает ValueError и даёт второй шанс.

try:
    num = int(input("Число: "))
    if num % 2 == 0:
        print("Чётное")
    else:
        print("Нечётное")
except ValueError:
    print("Ошибка: требуется целое число.")
Число: 12
Чётное

Проблема:

Однократный try-except не повторяет запрос. Для повторного ввода нужен цикл.

Как организовать повторный запрос до получения корректного ввода с while?

Цикл while True с условием выхода при успехе.

while True:
    try:
        n = int(input("Введите положительное число: "))
        if n > 0:
            print(f"Вы ввели {n}")
            break
        else:
            print("Число должно быть положительным.")
    except ValueError:
        print("Некорректный ввод.")

Ошибка:

Отсутствие break приводит к бесконечному циклу.

Как проверить, что ввод присутствует в списке разрешённых значений?

Оператор in позволяет компактно проверить принадлежность.

colors = ["красный", "зелёный", "синий"]
choice = input("Выберите цвет: ").strip().lower()
if choice in colors:
    print("Цвет доступен.")
else:
    print("Цвет не найден.")

Проблема:

Список может быть большим - тогда лучше использовать множество (set) для ускорения.

Ниже приведены расширенные примеры использования input и if else для решения практических задач.

Пример 1. Валидация пароля

Пример
password = input("Придумайте пароль: ")
if len(password) < 8:
    print("Пароль слишком короткий.")
elif not any(ch.isupper() for ch in password):
    print("Пароль должен содержать заглавную букву.")
elif not any(ch.islower() for ch in password):
    print("Пароль должен содержать строчную букву.")
elif not any(ch.isdigit() for ch in password):
    print("Пароль должен содержать цифру.")
else:
    print("Пароль принят.")
Придумайте пароль: qwerty1
Пароль слишком короткий.
Придумайте пароль: Qwerty123
Пароль принят.

Здесь сочетаются проверка длины, регистр и наличие цифр. Каждое условие в elif срабатывает только если предыдущие не выполнены.

Пример 2. Определение возраста и категории билета

Пример
while True:
    try:
        age = int(input("Введите возраст: "))
        if age < 0:
            print("Возраст не может быть отрицательным.")
        elif age <= 3:
            print("Бесплатный вход.")
        elif age <= 12:
            print("Детский билет.")
        elif age <= 18:
            print("Подростковый билет.")
        elif age <= 65:
            print("Взрослый билет.")
        else:
            print("Льготный билет для пенсионеров.")
        break
    except ValueError:
        print("Введите корректное число.")
Введите возраст: -5
Возраст не может быть отрицательным.
Введите возраст: 20
Взрослый билет.

Пример показывает использование цепочки elif для разбиения на диапазоны.

Пример 3. Проверка ввода с плавающей точкой

Пример
def is_float(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

input_str = input("Введите число с плавающей точкой: ").strip()
if is_float(input_str):
    num = float(input_str)
    if num > 0:
        print("Положительное число.")
    elif num < 0:
        print("Отрицательное число.")
    else:
        print("Ноль.")
else:
    print("Некорректный ввод.")
Введите число с плавающей точкой: -3.14
Отрицательное число.

Собственная функция is_float упрощает проверку без повторного написания try-except.

Пример 4. Меню с повторным показом до выбора выхода

Пример
while True:
    print("\nМеню:")
    print("1. Показать справку")
    print("2. Настройки")
    print("3. Выход")
    choice = input("Выберите пункт: ").strip()
    if choice == "1":
        print("Это справка.")
    elif choice == "2":
        print("Переход в настройки...")
    elif choice == "3":
        print("Выход из меню.")
        break
    else:
        print("Неверный пункт, попробуйте снова.")
Меню:
1. Показать справку
2. Настройки
3. Выход
Выберите пункт: 1
Это справка.
...
Выберите пункт: 3
Выход из меню.

Цикл while True с условием выхода при выборе "3" обеспечивает повторный показ меню.

Пример 5. Ввод нескольких значений и проверка суммы

Пример
numbers = []
for i in range(3):
    while True:
        try:
            val = int(input(f"Введите число {i+1}: "))
            numbers.append(val)
            break
        except ValueError:
            print("Требуется целое число.")

if sum(numbers) > 100:
    print("Сумма больше 100.")
elif sum(numbers) < 0:
    print("Сумма отрицательная.")
else:
    print("Сумма в пределах от 0 до 100.")
Введите число 1: 50
Введите число 2: 30
Введите число 3: 25
Сумма больше 100.

Комбинация цикла для сбора данных и условного оператора для анализа.

Ввод с условием if else в Python - comments

En
Python input if else (python)