Условия при работе с 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.
Комбинация цикла для сбора данных и условного оператора для анализа.