Todas las Noticias en Películas, Avances de Películas y Reseñas.

Pidiendo al usuario una entrada hasta que dé una respuesta válida Python

Hemos trabajado en muchos problemas en Python, hasta ahora, ¿verdad? Pero, ¿alguna vez se ha preguntado cómo escribir programas para recibir entradas hasta que obtengan respuestas válidas? Por lo tanto, en este programa, veremos cómo escribir programas que siguen pidiéndole al usuario una entrada hasta que dé una respuesta válida en Python. Entonces, sin perder más tiempo, profundicemos en el tema.

Introducción

Sabemos cómo obtener entradas del usuario. Pero, puede haber casos en los que podemos solicitar entradas. Por ejemplo, solicite números enteros pero, por error, el usuario ingresa una cadena como entrada. Por lo tanto, debemos volver a solicitar una entrada válida hasta que el usuario ingrese la entrada correcta, ¿no es así?

Nota: En Pitón 2.7hacemos uso de Datos crudos() para solicitar la entrada del usuario mientras que en Python 3 y superior simplemente el aporte() La función se emplea para la entrada del usuario. El aporte() La función siempre convierte la entrada del usuario en una cadena, de forma predeterminada. Si queremos ingresar cualquier otro tipo de elemento, debemos encasillarlo en ese tipo de datos.

Echemos un vistazo a un ejemplo para entenderlo mejor.

age = int(input("What is your age ? :  "))
if age >= 18 :
print("You are eligible to vote ! ")
else:
print("You are not eligible to vote ! ")

# Output :
What is your age ? : 24
You are eligible to vote ! 

Este programa funciona bien, hemos ingresado la entrada correcta. Ahora, supongamos que por error hemos ingresado una entrada de tipo de datos incorrecto, entonces, el código no funciona. Más bien emite un mensaje de error.

# Output :
What is your age ? : Twenty Four

Traceback (most recent call last):
File "C:/Users/Shubham/Project/main.py", line 1, in
age = int(input("What is your age ? :  "))
ValueError: invalid literal for int() with base 10: 'Twenty Four"

Ahora, busquemos soluciones a nuestro problema.

Recomendado:  El chollo del día en Amazon es este reloj inteligente de Xiaomi por menos de 50 euros

Pidiendo al usuario una entrada hasta que dé una respuesta válida Python

Hay muchas maneras en que podemos hacer este trabajo. Veamos los muchos métodos que tenemos a nuestra disposición.

Usar el manejo de excepciones y el ciclo while para validar las entradas

La solución más fácil es simplemente aceptar la entrada del usuario con la ayuda de un ciclo while con manejo de excepciones.

Si la entrada del usuario no es válida, usamos la palabra clave continuar dentro del bloque excepto para pasar a la siguiente iteración. Otras validaciones a menudo se especifican dentro del bloque else, de modo que, cuando el usuario ingresa una entrada legítima, usamos la instrucción break para salir del ciclo; de lo contrario, si el usuario ingresa una entrada no válida, el ciclo while continúa y, por lo tanto, el usuario tiene para ingresar la entrada correcta nuevamente.

Echemos un vistazo al siguiente código para conocer este concepto:

while True :
      try :
           age = int(input("What is your age ? :  "))
     except ValueError :
           print("Invalid Input !! ")
           continue
     if age > 0 :
                break
     else:
          print("You have entered an invalid age")
     if age >= 18:
           print("You are eligible to vote ! ")
     else:
           print("You are not eligible to vote ! ")

# Output:
What is your age ? : Twenty Four
Invalid Input !! 

What is your age ? : -4
You have entered an invalid age

What is your age: 24
You are eligible to vote !

Usando recursividad

Otro método para pedirle al usuario que ingrese una entrada aceptable siempre que el usuario ingrese un valor no válido es usar la recursividad.

La recursividad le permite evitar la utilización de un bucle. Sin embargo, este método funciona bien la mayor parte del tiempo a menos que el usuario ingrese los datos no válidos demasiado repetidamente. Si ese es el caso, entonces el código terminará con un RuntimeError: se excedió la profundidad de recursión máxima.

def valid_input():
       try:
          age = int(input("Enter your Age :  "))
      except ValueError:
          print("Invalid input ! ")
return valid_input()
if age >= 18:
      print("You are eligible to vote ! ")
else:
      print("You are not eligible to vote ! ")

# Output :
Enter your Age : -1
Invalid input !

Enter your Age : Twenty Four
Invalid input !

Enter your Age : 24
You are eligible to vote !

¿Cómo puedo leer las entradas como números?

Recomendado:  Cómo personalizar el Centro de actividades en Windows 11

Uso de la función Lambda

Aunque este método no será el más simple en términos de complejidades de código, sería útil en situaciones en las que le gustaría usar una función. Además, este método muestra cuánto tiempo se minimizan los fragmentos de código, por lo tanto, este método hace una entrada valiosa en la lista de nuestras soluciones propuestas.

valid = lambda age: (age.isdigit() and int(age) > 0 and (
(int(age) >= 18 and "You are eligible to vote ! ") or "You can't vote ! ")) or \
valid(input(
"Invalid input ! \n Please enter your age: "))
print(valid(input("Please enter your age: ")))

# Output :
Please enter your age : -4
Invalid input !

Please enter your age : 0
Invalid input !

Please enter your age : Twenty Four
Invalid input !

Please enter your age: 17
You can't vote!

Please enter your age: 24
You are an eligible to vote!

TERMINANDO !!

Por lo tanto, la validación adecuada de la entrada del usuario es de suma importancia para un código libre de errores. Por lo tanto, los métodos mencionados anteriormente ayudan a lograr lo que nos propusimos. Yo, por ejemplo, prefiero usar el ciclo while con manejo de excepciones, como un método para solicitar una entrada válida del usuario. Además, se debe evitar la utilización de métodos recursivos a menos que esté seguro de sus requisitos, ya que requieren más espacio de memoria y, a veces, incluso generan excepciones. Espero que este artículo te sirva bien. Para más consultas, no dude, pero publíquelas en el cuadro de comentarios. ¡Hasta la proxima vez! Nos vemos 🙂