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 *