Obtener información de usuario en Python

O

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.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con tus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad