Рубрики
Без рубрики

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

Резюме: Для приема действительных входов от пользователя либо используйте цикл с пользовательскими валидами, либо используйте модуль Pyinputplus, чтобы избежать утомительных определений валидации. Вы также можете использовать рекурсию, чтобы предложить пользователю ввести действительный ввод. Проблема обзора: учитывая пользовательский ввод; Примите вход только в том случае, если он действителен в противном случае … Как спросить пользователей для ввода, пока они не обеспечивают действительный ввод? Читать далее “

Автор оригинала: Shubham Sayon.

Резюме: Принять действительные входы от пользователя либо используйте Хотя петля с пользовательскими валидами или использовать Pyinputplus Модуль, чтобы избежать утомительных определений валидации. Вы также можете использовать Рекурсия Чтобы подсказать пользователю ввести действительный Вход.

Обзор

Проблема: Учитывая пользовательский ввод; Примите вход только в том случае, если он действителен в противном случае, попросите пользователя повторно ввести ввод в правильный формат.

Любой пользовательский ввод должен быть подтвержден перед обработкой, без надлежащей проверки ввода пользователей Код, безусловно, будет иметь ошибки или ошибки. Значения, которые вы хотите, чтобы пользователь ввести и значения, которые они обеспечивают в качестве ввода, могут быть совершенно разными. Например, вы хотите, чтобы пользователь вводил свой возраст в виде положительного действительного численного значения, в этом случае ваш код не должен принимать неверный ввод, как отрицательный номер или слова.

Примечание : В Python 2.7 RAW_INPUT () используется для получения пользовательского ввода, тогда как в Python 3 и выше вход () используется для получения пользовательского ввода. вход () всегда преобразует ввод пользователя в строку, поэтому вам нужно использовать его в другой тип данных, если вы хотите использовать вход в другой формат.

Давайте посмотрим на пример, чтобы понять нашу проблему.

Пример:

age = int(input("What is your age: "))
if age >= 18:
   print("You are an Adult!")
else:
   print("You are not an Adult!")

Выход:

What is your age: 25
You are an Adult!

Однако код не работает, когда пользователь вводит неверный ввод. (Это то, что мы хотим избегать. Вместо ошибки мы хотим, чтобы пользователь повторно ввести действительный вход.)

What is your age: twenty five
Traceback (most recent call last):
 File "C:/Users/Shubham-PC/PycharmProjects/pythonProject/main.py", line 1, in 
   age = int(input("What is your age: "))
ValueError: invalid literal for int() with base 10: 'twenty five'

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

Метод 1: внедрить проверку ввода, используя во время обработки цикла и исключения

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

  • Если ввод пользователя недействителен, мы используем Продолжить ключевое слово внутри кроме Блок для перехода к следующей итерации.
  • Другие проверки могут быть указаны в еще Блок, так что, когда пользователь вводит действительный ввод, мы используем Перерыв Заявление, чтобы выйти из цикла, в противном случае, если пользователь вводит неверный ввод, продолжается цикл While, и пользователь должен снова ввести правильный ввод.

Давайте посмотрим на следующий код, чтобы понять эту концепцию:

while True:
   try:
       age = int(input("What is your age: "))
   except ValueError:
       print("Please Enter a valid age.")
       continue
   else:
       if age > 0:
           break
       else:
           print("Age should be greater than 0!")
if age >= 18:
   print("You are an adult!")
else:
   print("You are not an adult!")

Выход:

What is your age: twenty five
Please Enter a valid age.
What is your age: -25
Age should be greater than 0!
What is your age: 25
You are an adult!

Способ 2: Использование модуля Pyinputplus Pyinputplus Pynputplus

Другой способ управления пользовательскими входами – использовать Pyinputplus Модуль, который содержит различные функции для принятия конкретных входов данных от пользовательских номеров, дат, адреса электронной почты и т. Д. Вы можете прочитать больше об этом модуле в официальной документации здесь Отказ

Функция принять целое число как вход от пользователя IS Infoint () Отказ

Используя Pyinputplus Модуль мы можем гарантировать, что пользовательский ввод действителен, потому что если пользователь вводит неверный ввод, Pyinputplus Подскажет пользователю повторно ввести действительный вход. Мы также можем указать другие проверки, используя аргументы в рамках функции.

мин : Аргумент, используемый нами, чтобы обеспечить, чтобы возраст в нашем примере больше 1 Отказ

Давайте посмотрим на код, приведенный ниже, чтобы получить лучшее сцепление на использование Pyinputplus Для проверки пользовательского ввода.

Отказ от ответственности: Pyinputplus не является частью стандартной библиотеки Python. Таким образом, вы должны установить его отдельно, используя PIP.

import pyinputplus as pyip

# User is prompted to enter the age and the min argument ensures minimum age is 1
age = pyip.inputInt(prompt="Please enter your age: ", min=1)
if age >= 18:
   print("You are an Adult!")
else:
   print("You are not an Adult!")

Выход:

Please enter your age: -1
Number must be at minimum 1.
Please enter your age: twenty five
'twenty five' is not an integer.
Please enter your age: 25
You are an Adult!

Метод 3: Реализация рекурсии

Еще один способ подсказывать пользователю вводить действительный ввод каждый раз, когда пользователь вводит неверное значение – использовать рекурсия. Рекурсия позволяет избежать использования A петля Отказ Однако этот метод работает нормально большую часть времени, если пользователь не вступает в недействительные данные слишком много раз. В этом случае код прекратится с помощью RunTimeError: максимальная глубина рекурсии превысила Отказ

Решение:

def valid_input():
   try:
       age = int(input("Enter your Age: "))
   except ValueError:
       print("Please Enter a valid age. The Age must be a numerical value!")
       return valid_input()
   if age <= 0:
       print("Your Age must be a positive numerical value!")
       return valid_input()
   else:
       return age

x = valid_input()
if x >= 18:
   print("You are an Adult!")
else:
   print("You are not an Adult!")

Выход:

Enter your Age: -1
Your Age must be a positive numerical value!
Enter your Age: twenty five
Please Enter a valid age. The Age must be a numerical value!
Enter your Age: 25
You are an Adult!

Метод 4: быстрый взлом с помощью функции лямбда

Хотя этот метод может быть не лучшим с точки зрения сложности кода, однако, он может пригодиться в ситуациях, когда вы хотите использовать функцию один раз, а затем выбросить ее после того, как сдается. Кроме того, этот метод отображает, как длинные кусочки кодов могут быть минимизированы, поэтому этот метод делает достойный вход в список наших предложенных решений.

Давайте посмотрим на этот трюк в программе, приведенной ниже:

valid = lambda age: (age.isdigit() and int(age) > 0 and (
           (int(age) >= 18 and "You are an Adult!") or "You are not an Adult")) or \
                   valid(input(
                       "Invalid input.Please make sure your Age is a valid numerical vaule!\nPlease enter your age: "))
print(valid(input("Please enter your age: ")))

Выход:

Please enter your age: -1
Invalid input. Please make sure your Age is a valid numerical vaule!
Please enter your age: 0
Invalid input. Please make sure your Age is a valid numerical vaule!
Please enter your age: twenty five
Invalid input. Please make sure your Age is a valid numerical vaule!
Please enter your age: 25
You are an Adult!

Заключение

Таким образом, правильное валидация пользовательского ввода имеет первостепенное значение для того, чтобы код без ошибок, и предполагаемые выше методы могут оказаться инструментальными для достижения нашей причины. Я предпочитаю использование Pyinputplus Модуль с момента определения пользовательских валидаций может быть утомительным в случае сложных требований. Кроме того, использование рекурсивных методов следует избегать, если вы не уверены в ваших требованиях, поскольку они требуют большего пространства памяти и часто бросают Исключения переполнения стека Когда операции слишком велики.

Я надеюсь, что вы нашли эту статью полезную, и она поможет вам принять действительные пользовательские входы с легкостью. Пожалуйста, подпишитесь и оставайтесь настроенными для более интересных вещей в будущем!

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Я профессиональный Python Blogger и Content Creator. Я опубликовал многочисленные статьи и создал курсы в течение определенного периода времени. В настоящее время я работаю полный рабочий день, и у меня есть опыт в областях, таких как Python, AWS, DevOps и Networking.

Вы можете связаться со мной @: