Перевод статьи «How to Validate user input in Python».
Принимая пользовательский ввод, вы ожидаете получить данные определенного типа и вида. Например, целое число в некотором диапазоне или строку текста ограниченной длины. Но вы не можете быть уверены, что пользователь введет все правильно. Поэтому пользовательский ввод нужно проверять.
Содержание
Как проверять пользовательский ввод
Для валидации данных, вводимых пользователем:
- Используйте цикл
while
, который будет работать, пока пользователь не введет валидное значение. - На каждой итерации проверяйте, является ли введенное значение валидным.
- Если значение валидно, прервите цикл
while
при помощиbreak
.
# ✅ Validating integer user input num = 0 while True: try: num = int(input("Enter an integer 1-10: ")) except ValueError: print("Please enter a valid integer 1-10") continue if num >= 1 and num <= 10: print(f'You entered: {num}') break else: print('The integer must be in the range 1-10') # ---------------------------------------------- # ✅ Validating string user input password = '' while True: password = input('Enter your password: ') if len(password) < 5: print('Password too short') continue else: print(f'You entered {password}') break print(password)
Первый пример проверяет числовой пользовательский ввод в цикле while
.
Если блок try
отрабатывает успешно, значит, пользователь ввел целое число.
num = 0 while True: try: num = int(input("Enter an integer 1-10: ")) except ValueError: print("Please enter a valid integer 1-10") continue if num >= 1 and num <= 10: print(f'You entered: {num}') break else: print('The integer must be in the range 1-10')
Оператор if
проверяет, входит ли введенное число в диапазон 1-10. Если входит, мы прерываем цикл while
.
Если введенное пользователем число не входит в указанный диапазон, запускается блок else
, который выводит сообщение.
Если пользователь ввел вообще не число, запускается блок except
. В нем мы используем оператор continue
, чтобы снова запросить у пользователя валидные данные.
Оператор continue
переводит цикл на новую итерацию.
Примечание автора. При валидации пользовательского ввода при помощи цикла while
мы используем оператор continue
, если ввод невалиден, например, в блоке except
или if
. Если ввод валиден, мы используем оператор break
для выхода из цикла.
Функция input()
принимает опциональный аргумент prompt
, который попадает в стандартный вывод (на экран) без последующего перевода на новую строку.
Затем функция считывает стандартный ввод (с клавиатуры), преобразует его в строку и возвращает результат.
Примечание автора. Обратите внимание, что функция input()
всегда возвращает именно строку, даже если пользователь вводит число.
Тот же подход можно использовать при валидации текстового ввода.
Запрос ввода данных, пока input не будет валидным
Вот пример, как запрашивать у пользователя ввод, пока он не введет значение, имеющее как минимум 5 символов.
password = '' while True: password = input('Enter your password: ') if len(password) < 5: print('Password too short') continue else: print(f'You entered {password}') break print(password)
Цикл while
работает, пока пользователь не введет значение длиной хотя бы в 5 символов.
Примечание автора. Если значение слишком короткое, мы используем continue
, чтобы перейти к следующей итерации.
Для проверки нескольких условий можно использовать булевы операторы or
или and
.
Проверка input на соответствие нескольким условиям (or)
Давайте посмотрим, как проверить, что введенное пользователем значение имеет как минимум 5 символов или не входит в определенный список значений.
password = '' common_passwords = ['abcde', 'asdfg'] while True: password = input('Enter your password: ') if len(password) < 5 or password in common_passwords: print('Pick a strong password') continue else: print(f'You entered {password}') break print(password)
Предложение if
проверяет, не слишком ли короток пароль и не входит ли он в список распространенных паролей.
Мы используем булев оператор or
, так что блок if
запускается при соблюдении любого из двух условий.
Примечание автора. Если пароль меньше 5 символов или входит в список распространенных паролей, мы переходим к следующей итерации цикла при помощи continue
и снова запрашиваем у пользователя ввод.
Проверка input на соответствие нескольким условиям (and)
При помощи оператора and
можно проверить соблюдение всех указанных условий.
password = '' common_passwords = ['abcde', 'asdfg'] while True: password = input('Enter your password: ') if len(password) > 5 and password not in common_passwords: print(f'You entered {password}') break else: print('Pick a strong password') continue print(password)
Мы используем оператор and
, поэтому блок if
запускается только при соблюдении обоих условий. Он сработает, если пароль и длиннее 5 символов, и не входит в список распространенных паролей. В таком случае мы выходим из цикла при помощи break
.
Если указанные условия не соблюдаются, мы переходим к следующей итерации цикла при помощи continue
.
Запрос пользовательского ввода до нажатия Enter
Чтобы принимать ввод до нажатия Enter:
- Объявите переменную, которая будет хранить пустой список.
- Используйте цикл
while
для произвольного количества итераций. - Добавляйте каждое значение, введенное пользователем, в список.
- Выйдите из цикла
while
, когда пользователь нажмет Enter.
# ✅ When taking strings as input my_list = [] user_input = '' while True: user_input = input('Enter a string: ') # 👇️ Take input until Enter is pressed without value if user_input == '': print('User pressed enter') break my_list.append(user_input) print(my_list) # --------------------------------------------- # ✅ When taking integers as input my_list = [] user_input = '' while True: user_input = input('Enter a number: ') # 👇️ Take input until Enter is pressed without value if user_input == '': print('User pressed enter') break try: my_list.append(int(user_input)) except ValueError: print('Invalid number.') continue print(my_list)
Примечание автора. Примеры повторяют программу и запрашивают пользовательский ввод, пока пользователь не нажмет Enter, не вводя значение.
Условие выхода может быть любым. Например, итерации могут прекратиться, когда пользователь введет слово «done» или список будет содержать как минимум 3 значения.
Первый пример принимает в качестве input строковые значения.
my_list = [] user_input = '' while True: user_input = input('Enter a string: ') # 👇️ Take input until Enter is pressed without value if user_input == '': print('User pressed enter') break my_list.append(user_input) print(my_list)
Мы использовали цикл while
, чтобы принимать пользовательский ввод произвольное количество раз.
Примечание автора. Единственный способ выйти из цикла while True
— использовать оператор break
для поднятия исключения.
Если пользователь нажмет Enter без ввода значения, мы выходим из цикла. В противном случае мы продолжаем добавлять вводимые пользователем значения в список.
Метод list.append()
добавляет элементы в конец списка.
Вот пример повторения программы, запрашивающей у пользователя числовые значения.
my_list = [] user_input = '' while True: user_input = input('Enter a number: ') # 👇️ Take input until Enter is pressed without value if user_input == '': print('User pressed enter') break try: my_list.append(int(user_input)) except ValueError: print('Invalid number.') continue print(my_list)
Как вы помните, функция input()
конвертирует пользовательский ввод в строковые значения. Чтобы преобразовать их в целые числа, мы используем функцию int()
.
Предложения try/except
используются для обработки ValueError в случае, если в функцию int()
будет передано невалидное значение.
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]