Breaking

Post Top Ad

Your Ad Spot

martes, 9 de julio de 2019

Obteniendo la entrada del usuario en Python

Introducción

La forma en que se obtiene y maneja la información es uno de los aspectos más importantes en la ética de cualquier lenguaje de programación, más aún para la información suministrada y obtenida del usuario.
Python, aunque es comparativamente lento en este aspecto en comparación con otros lenguajes de programación como C o Java, contiene herramientas sólidas para obtener, analizar y procesar datos obtenidos directamente del usuario final.
Este artículo explica brevemente cómo se pueden usar las diferentes funciones de Python para obtener información del usuario a través del teclado, con la ayuda de algunos fragmentos de código como ejemplos.

Entrada en Python

Para recibir información a través del teclado, Python usa cualquiera de las funciones input()raw_input()(más acerca de la diferencia entre las dos en la siguiente sección). Estas funciones tienen un parámetro opcional, comúnmente conocido como prompt, que es una cadena que se imprimirá en la pantalla cada vez que se llame a la función.
Cuando se llama a una de las funciones input()raw_input(), el flujo del programa se detiene hasta que el usuario ingresa la entrada a través de la línea de comando. Para ingresar los datos, el usuario debe presionar la tecla ENTRAR después de ingresar su cadena. Mientras se presiona la tecla ENTRAR,generalmente se inserta un carácter de nueva línea ("\ n"), pero en este caso no lo hace. La cadena introducida simplemente será enviada a la aplicación.
En una nota curiosa, poco ha cambiado en cómo funciona esta función entre las versiones 2 y 3 de Python, lo que se refleja en el funcionamiento de input()y se raw_input()explica en la siguiente sección.

Comparando las funciones input y raw_input

La diferencia al usar estas funciones solo depende de la versión de Python que se está utilizando. Para Python 2, la función raw_input()se usa para obtener la entrada de la cadena del usuario a través de la línea de comandos, mientras que la input()función devuelve la evaluación de la cadena de entrada y trata de ejecutarlo como código de Python.
En Python 3, la raw_input()función ha sido desaprobada y reemplazada por la input()función y se utiliza para obtener una cadena de usuario a través del teclado. Y la input()función de Python 2 se suspende en la versión 3. Para obtener la misma funcionalidad que fue proporcionada por la input()función de Python 2 , la declaración eval(input())debe usarse en Python 3.
Eche un vistazo a un ejemplo de raw_inputfunción en Python 2.
# Python 2

txt = raw_input("Type something to test this out: ")  
print "Is this what you just said?", txt  
Salida
Type something to test this out: Let the Code be with you!

Is this what you just said? Let the Code be with you!  
Del mismo modo, eche un vistazo a un ejemplo de la función de entrada en Python 3.
# Python 3

txt = input("Type something to test this out: ")

# Note that in version 3, the print() function
# requires the use of parenthesis.
print("Is this what you just said? ", txt)  
Salida
Type something to test this out: Let the Code be with you!  
Is this what you just said? Let the Code be with you!  
De aquí en adelante, este artículo utilizará el inputmétodo de Python 3, a menos que se especifique lo contrario.

Cadena y entrada numérica

La input()función, por defecto, convertirá toda la información que recibe en una cadena. El ejemplo anterior que mostramos demuestra este comportamiento.
Los números, por otro lado, deben manejarse explícitamente como tales ya que vienen originalmente como cadenas. El siguiente ejemplo muestra cómo se recibe la información de tipo numérico:
# An input is requested and stored in a variable
test_text = input ("Enter a number: ")

# Converts the string into a integer. If you need
# to convert the user input into decimal format,
# the float() function is used instead of int()
test_number = int(test_text)

# Prints in the console the variable as requested
print ("The number you entered is: ", test_number)  
Salida
Enter a number: 13  
The number you entered is: 13  
Otra forma de hacer lo mismo es la siguiente:
test_number = int(input("Enter a number: "))  
Aquí guardamos directamente la entrada, después de la conversión inmediata, en una variable.
Tenga en cuenta que si el usuario no ingresa realmente un número entero, este código generará una excepción, incluso si la cadena ingresada es un número de punto flotante.

Manejo de excepciones de entrada

Hay varias formas de asegurar que el usuario ingrese información válida. Una de las formas es manejar todos los errores posibles que pueden ocurrir mientras el usuario ingresa los datos.
En esta sección, demostraremos algunos buenos métodos de manejo de errores al tomar información.
Pero primero, aquí hay un código inseguro:
test2word = input("Tell me your age: ")  
test2num = int(test2word)  
print("Wow! Your age is ", test2num)  
Al ejecutar este código, digamos que ingresa lo siguiente:
Tell me your age: Three  
Aquí, cuando int()se llama a la función con la cadena "Tres", se lanza una excepción ValueError y el programa se detiene y / o se bloquea.
Ahora veamos cómo haríamos que este código sea más seguro para manejar la entrada del usuario:
test3word = input("Tell me your lucky number: ")

try:  
    test3num = int(test3word)
    print("This is a valid number! Your lucky number is: ", test3num)
except ValueError:  
    print("This is not a valid number. It isn't a number at all! This is a string, go and try again. Better luck next time!")
Este bloque de código evaluará la nueva entrada. Si la entrada es un número entero representado como una cadena, la int()función lo convertirá en un número entero adecuado. Si no, se generará una excepción, pero en lugar de bloquear la aplicación, se detectará y printse ejecutará la segunda instrucción.
Este es un ejemplo de este código que se ejecuta cuando se produce una excepción:
Tell me your lucky number: Seven  
This is not a valid number. It isn't a number at all! This is a string, go and try again. Better luck next time!  
Así es como se pueden manejar los errores relacionados con la entrada en Python. Puede combinar este código con otra construcción, como un bucle while para asegurarse de que el código se ejecute repetidamente hasta que reciba la entrada de entero válido que requiere su programa.

Un ejemplo completo

# Makes a function that will contain the
# desired program.
def example():

    # Calls for an infinite loop that keeps executing
    # until an exception occurs
    while True:
        test4word = input("What's your name? ")

        try:
            test4num = int(input("From 1 to 7, how many hours do you play in your mobile?" ))

        # If something else that is not the string
        # version of a number is introduced, the
        # ValueError exception will be called.
        except ValueError:
            # The cycle will go on until validation
            print("Error! This is not a number. Try again.")

        # When successfully converted to an integer,
        # the loop will end.
        else:
            print("Impressive, ", test4word, "! You spent", test4num*60, "minutes or", test4num*60*60, "seconds in your mobile!")
            break

# The function is called
example()  
La salida será:
What's your name? Francis  
From 1 to 7, how many hours do you play in your mobile? 3  
Impressive, Francis! You spent 180 minutes or 10800 seconds on your mobile!  

Conclusión

En este artículo, vimos cómo las utilidades Python integradas se pueden usar para obtener la entrada del usuario en una variedad de formatos. También vimos cómo podemos manejar las excepciones y los errores que posiblemente puedan ocurrir al obtener la entrada del usuario.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas