Obtener informaci贸n de 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 que se suministra y se obtiene del usuario.

    Python, aunque es relativamente lento en este sentido en comparaci贸n con otros lenguajes de programaci贸n como C o Java, contiene herramientas robustas para obtener, analizar y procesar datos obtenidos directamente del usuario final.

    Este art铆culo explica brevemente c贸mo se pueden usar diferentes funciones de Python para obtener informaci贸n del usuario a trav茅s del teclado, con la ayuda de algunos fragmentos de c贸digo que sirven como ejemplos.

    Entrada en Python

    Para recibir informaci贸n a trav茅s del teclado, Python usa el input() o raw_input() funciones (m谩s sobre la diferencia entre los dos en la siguiente secci贸n). Estas funciones tienen un par谩metro opcional, com煤nmente conocido como prompt, el cual es un String que se imprimir谩 en la pantalla siempre que se llame a la funci贸n.

    Cuando uno de los input() o raw_input() funciones, el flujo del programa se detiene hasta que el usuario ingresa la entrada a trav茅s de la l铆nea de comando. Para ingresar realmente los datos, el usuario debe presionar la tecla ENTER despu茅s de ingresar su cadena. Si bien presionar la tecla ENTER generalmente inserta un car谩cter de nueva l铆nea (” n”), no es as铆 en este caso. La cadena ingresada simplemente se enviar谩 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 raw_input(), explicado en la siguiente secci贸n.

    Comparaci贸n de las funciones input y raw_input

    La diferencia al usar estas funciones solo depende de la versi贸n de Python que se est茅 usando. Para Python 2, la funci贸n raw_input() se utiliza para obtener la entrada de cadena del usuario a trav茅s de la l铆nea de comando, mientras que el input() los retornos de funci贸n en realidad evaluar谩n la cadena de entrada e intentar谩n ejecutarla como c贸digo Python.

    En Python 3, raw_input() La funci贸n ha sido obsoleta y reemplazada por la input() funci贸n y se utiliza para obtener la cadena de un usuario a trav茅s del teclado. Y el input() La funci贸n de Python 2 se descontin煤a en la versi贸n 3. Para obtener la misma funcionalidad que proporcionaba Python 2 input() funci贸n, la declaraci贸n eval(input()) debe usarse en Python 3.

    Eche un vistazo a un ejemplo de raw_input funci贸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 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!
    

    A partir de aqu铆, este art铆culo utilizar谩 el input m茅todo de Python 3, a menos que se especifique lo contrario.

    Entrada num茅rica y de cadena

    los input() La funci贸n, por defecto, convertir谩 toda la informaci贸n que reciba 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 originalmente vienen como cadenas. El siguiente ejemplo demuestra 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 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 asegurarse de que el usuario ingrese informaci贸n v谩lida. Una de las formas es manejar todos los posibles errores que pueden ocurrir mientras el usuario ingresa los datos.

    En esta secci贸n, demostraremos algunos buenos m茅todos de manejo de errores al tomar entradas.

    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 el int() se llama a la funci贸n con la cadena “Tres”, se lanza una excepci贸n ValueError y el programa se detendr谩 y / o fallar谩.

    Ahora veamos c贸mo har铆amos este c贸digo 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, entonces el int() la funci贸n lo convertir谩 en un entero adecuado. De lo contrario, se generar谩 una excepci贸n, pero en lugar de bloquear la aplicaci贸n, se detectar谩 y la segunda print se ejecuta la declaraci贸n.

    A continuaci贸n, se muestra un ejemplo de este c贸digo que se ejecuta cuando se genera 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 las entradas 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谩lida 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 se pueden usar las utilidades integradas de Python para obtener la entrada del usuario en una variedad de formatos. Tambi茅n vimos c贸mo podemos manejar las excepciones y errores que pueden ocurrir al obtener la entrada del usuario.

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *