Saltar a contenido

Uso de variables en la entrada de datos y en la salida de resultados

Como hemos visto, podemos utilizar las funciones input() y print() para realizar determinadas tareas durante la ejecución del programa.

Sin embargo, estas dos funciones no pueden ser ejecutadas de manera eficiente sin considerar los datos que van a interactuar con ellas.

Debemos tener presente que, todos los datos que se ingresen al programa o la información que el programa produzca y tengan que ser recordados o utilizados más adelante obligatoriamente deberán ser almacenados en la Memoria Interna (MI) o memoria central (RAM).

Para que esto pueda llevarse a cabo existen dos opciones:

  1. Si el dato permanecerá inalterable, no cambiará de valor, entonces diremos que ese dato será una constante.

    Para referenciar a una constante en un programa simplemente la llamamos por su valor:

    • 2 : Es una constante numérica; y es el número 2
    • "Hola" : Es un texto constante, la palabra Hola
  2. Si por el contrario, un dato puede cambiar o variar su valor, será una variable.

    Para poder manipular datos variables utilizaremos un nombre (o identificador) que le pondremos al mismo para poder identificarlo y emplearlo. El nombre puede ser cualquier combinación de letras y números (tengamos presente que mayúsculas, minúsculas y acentuadas son letras diferentes).

¡Para recordar!

No se puede emplear el mismo nombre para dos datos diferentes; una variable puede referenciar un solo dato a la vez. Por lo tanto si se usa un mismo nombre para referencia un nuevo dato se perderá el dato anterior puesto que será reemplazado, pisado, por el dato nuevo.

¡Buena práctica sobre convención de nombres!

Para nombres de variables se suele emplear generalmente el tipo de casing snake_case, que es básicamente dejar todas las palabras en minúscula y unirlas con un guión bajo; además de emplear un nombre mnemotécnico, es decir que nos remita al significado que tendrá ese dato.

Es importante comprender que las variables pueden interpretarse como "cosas". Entonces sus nombres o identificadores deben definirse como sustantivos: nombre, numero, suma, resta, resultado, respuesta_usuario.

La única excepción son las variables booleanas (aquellas que pueden almacenar uno de dos posibles valores: verdadero o falso), que suelen tener nombres como: es_par, es_cero, es_entero, porque su valor es True o False.

A veces es útil alguna frase para identificar mejor el contenido: edad_mayor_hijo, apellido_conyuge

Por otra parte, las constantes suelen definirse con nombres escritos completamente en mayúsculas para diferenciarlas de las variables.

Hola, Mundo! - Parte 3: ¡con variables!

Si recordamos nuestro primer programa: "Hola, Mundo!":

hola_mundo.py

Obtuvimos la siguiente salida:

Terminal de VS Code ejecutando un programa

En este caso, La cadena de caracteres se pasaba como argumento literal, como valor constante, a la función print().

Otra manera de escribir el programa podría ser empleando una variable que almacene previamente la cadena de caracteres y luego utilizar dicha variable para pasarla como argumento:

Python
frase = "Hola, Mundo!"

print(frase)

Al ejecutar el programa obtendremos la siguiente salida:

Terminal (Entrada/Salida)
Hola, Mundo!

¡Mismo resultado!

Como puedes observar, muchas veces podremos alcanzar el resultado buscado a partir de algoritmos similares.

No te preocupes si no entiendes completamente el concepto de variable en este momento, lo veremos con más detalle en un instante.

Personalizando el saludo

Consideremos ahora cómo podríamos mejorar este programa, hacerlo un poco más interactivo y no simplemente asumir que todos querrán ser saludados de manera más genérica como "Hola, Mundo!". Por ejemplo, que el programa realice un saludo personalizado basado en el nombre del usuario que lo está utilizando.

hola_mundo.py

Aquí podemos ver que agregamos la función print() que imprime una pregunta para el usuario, con el objetivo de que este introduzca un dato relacionado, al programa. Y a continuación, agregamos la función input() que permitirá capturar el dato en cuestión desde el teclado. El usuario se dará cuenta de esto porque el cursor parpadeará esperando que escriba algo.

¡Para recordar!

Puede ocurrir que en algunos sistemas operativos no se muestre el cursor parpadeante, pero el usuario sabrá que debe escribir algo en ese momento.

Debemos observar que la función input() de la línea 2 no tiene un argumento que le permita mostrar un mensaje al usuario, por lo que el mensaje que se muestra es el que se pasa como argumento a la función print() en la línea 1.

Si recordamos la documentación de la función input(), en realidad necesita un argumento que le permita mostrar un mensaje al usuario. Por lo tanto, podemos simplificar este código incluso antes de usarlo. Podemos tomar la cadena de print() y ponerla como argumento para la función input(), eliminando print() por completo. Además, la función print() habría agregado una nueva línea de todos modos.

hola_mundo.py

Al ejecutar este programa, obtendremos la siguiente salida:

Terminal de VS Code ejecutando un programa con input() sin espacio en el prompt

Podemos observar que el nombre introducido por el usuario está pegado el signo de interrogación, lo que no es muy estético. Para solucionar esto, podemos agregar un espacio al argumento pasado a la función input() para que dicho nombre no esté pegado al signo de interrogación en cuestión:

Terminal de VS Code ejecutando un programa con input() con espacio en el prompt

Ahora si, el nombre introducido por el usuario está separado del signo de interrogación, lo que mejora la presentación del programa.

Ahora bien, el programa está solicitando al usuario que ingrese su nombre, pero luego no hace nada con el nombre ingresado y sigue saludando como "Hola, Mundo!".

Hardcode vs. variables

Podríamos cambiar la palabra "Mundo" por "Pablo" o cualquier otro nombre, pero eso no sería muy útil, ya que el programa seguiría saludando a la misma persona sin importar el nombre que se introduzca.

Definición

Hardcode es un término que se utiliza para describir la práctica de codificar valores directamente en el código fuente de un programa en lugar de almacenarlos en variables. Esto puede hacer que el código sea menos flexible y más difícil de mantener, ya que los valores "hardcodeados" deben modificarse manualmente si es necesario cambiarlos.

Para hacer que el programa sea más interactivo y personalizado, podemos almacenar el nombre introducido por el usuario en una variable y luego utilizar esa variable para saludar al usuario por su nombre.

Así que ahora necesitamos alguna manera de recuperar la entrada del usuario y hacer algo con ella en última instancia. Y para esto vamos a aprovechar otra característica de la programación que poseen algunas funciones, que es que también pueden tener valores de retorno.

Esto significa que necesitamos que la función input(), que se utiliza para aceptar la entrada del usuario (generalmente por teclado), obtenga dicha entrada y luego que nos la devuelva para que nosotros, los programadores, podamos hacer algo con ella.

Si recordamos el siguiente programa:

Python
print("Hola", input("Introduce tu nombre: "))

Al ejecutar este código, el programa mostraba el mensaje "Introduce tu nombre: ", esperaba a que el usuario introdujera el dato por teclado y luego mostraba "Hola, ", seguido del dato que el usuario había introducido. Pero el dato ingresado por el usuario no era almacenado en ningún lugar, simplemente se perdía al concluir la línea de código en ejecución sin poder ser utilizado posteriormente.

Almacenamiento de un dato ingresado por teclado en una variable

Como bien sabemos, los datos no pueden quedar flotando en el aire, deben ser almacenados en algún lugar para poder ser utilizados posteriormente. Y para ello vamos a utilizar una variable que almacene el valor devuelto (la entrada) por la función input() y luego utilizar esa variable para pasarla como argumento a la función print().

Recordemos un poco de teoría

Dijimos que los datos no pueden quedar flotando en el aire, deben ser almacenados en algún lugar para poder ser utilizados posteriormente. Necesitaremos una característica más de la programación: las variables.

Es muy probable es que casi todo el mundo esté familiarizado con las variables que se utilizan en las clases de matemáticas: x, y, z y similares.

La programación tiene la misma capacidad de crear una variable, en la memoria de la computadora, y esta variable puede almacenar un valor: un número, algún texto, incluso una imagen o un video o más.

Dicho así, una variable es solo un contenedor de algún valor dentro de una computadora, dentro de su propio programa.

Entonces, si queremos almacenar el dato introducido por el usuario en una variable para su posterior uso durante la ejecución del programa, podemos hacerlo de la siguiente manera:

hola_mundo.py

Introducimos una variable cuyo nombre sea descriptivo, semántico, del valor que va a almacenar: nombre. ¿Por qué? Bueno, como tengo un teclado completo de letras, números y símbolos, puedo usar términos más descriptivos para identificar lo que la variable va a almacenar.estoy escribiendo

Y aquí, en la línea 1, podemos aprovechar para recordar otro aspecto clave de la sintaxis en la programación: este signo igual que está entre la función de entrada input(), a la derecha, y el nombre de la variable, a la izquierda, es realmente muy importante tanto en su función como en su definición. Y es que técnicamente no es un signo igual en sí mismo: no significa igualdad sino asignación.

En Python como en muchos lenguajes de programación, un único signo igual es el operador de asignación y lo que eso significa específicamente es que deseamos asignar de derecha a izquierda cualquiera que sea la entrada del usuario.

Una vez que se asigna el dato ingresado por el usuario a la variable nombre, en la siguiente línea utilizamos la variable nombre como argumento para la función print() en la línea 2 para saludar al usuario por su nombre.

¿Qué ocurrirá cuando se ejecute el programa?

Haz clic aquí para ver la solución propuesta

Terminal de VS Code ejecutando un programa con input() y variable

Cuando se ejecuta este código, el programa muestra el mensaje "¿Cuál es tu nombre? " y espera a que el usuario introduzca el dato por teclado presione ENTER.

A continuación, almacena (asigna) el dato ingresado en la variable nombre.
De esta manera, el dato introducido por el usuario se almacena en la variable nombre y puede ser utilizado posteriormente en el programa.

Luego, imprime en pantalla "Hola, " seguido del dato almacenado en la variable nombre, seguido del símbolo de exclamación cerrado.

Como podemos intuir, el signo igual copia desde la derecha (cualquiera que sea el valor de retorno de la función de la derecha) hacia la izquierda (en la dirección de memoria asignada al nombre de variable indicado). De nuevo, la función de entrada claramente recibe información del usuario.

Es por eso que, al escribir Pablo, la función input() devuelve ese valor de retorno, al programa. Y si usamos un signo igual y una variable, no importa cómo la llame, podremos almacenar esa entrada en esa variable para reutilizarla más adelante en el programa, como en este caso, para saludar al usuario por su nombre.

Así que ahora, en algún lugar de la memoria de la computadora, hay un contenedor que está almacenando "Pablo", entre comillas, así como podría estar almacenado lo que sea que el usuario haya escrito.

Errores comunes al usar variables en cadenas de caracteres

Veamos un ejemplo de un error común al usar variables en cadenas de caracteres:

Error al usar variables en cadenas de caracteres

Aquí es fácil cometer un error. ¿Qué ocurrirá cuando ejecutemos este programa?

??? Haz clic aquí para ver la respuesta" El programa pedirá mi nombre. Escribiré Pablo. Y al presionar ENTER, esperando que diga "Hola, Pablo!" en su lugar dirá literalmente "Hola, nombre!".

Casting de datos

Veamos otro ejemplo: ¿Qué ocurre si el usuario ingresa 45?

Python
edad = input("Introduce tu edad: ") 
print(edad)

Cuando se ejecuta este código, el programa muestra el mensaje "Introduce tu edad: ", espera a que el usuario introduzca el dato por teclado y luego muestra el dato que el usuario introdujo.

Pero cuidado, el dato introducido por el usuario se almacena en la variable edad como una cadena de caracteres, no como un número.

¡Para recordar!

Es importante tener en cuenta que input() siempre devuelve una cadena de caracteres.

La salida del programa será:

Terminal (Entrada/Salida)
Introduce tu edad: 45
45

Hay que estar atentos a este detalle, ya que si necesitamos realizar operaciones matemáticas con la variable edad, no podremos hacerlo directamente, ya que la variable edad almacena el número 45 como una cadena de caracteres, no como un número. Y aunque en la salida del programa se vea 45, internamente es una cadena de caracteres ("45").

Por lo tanto, si necesitas que el usuario introduzca un número, tendrás que convertir la cadena ingresada a un número utilizando las funciones int() o float(). Esta conversión se conoce como casting.

Python
edad = int(input("Introduce tu edad: "))
print(edad)

La salida del programa será:

Terminal (Entrada/Salida)
Introduce tu edad: 45
45

A simple vista, ambos programas imprimirán 45, pero en el primer caso, la variable edad almacena el número 45 como una cadena de caracteres, mientras que en el segundo caso, la variable edad almacena el número 45 como un entero.

¿Cómo podemos comprobarlo? Lo veremos más adelante, pero presta especial atención a lo siguiente:

En este segundo programa, si el usuario introduce un dato que no puede convertirse en un número, el programa generará un error.

Por ejemplo, si el usuario ingresa cuarenta y cinco:

Python
edad = int(input("Introduce tu edad: "))
print(edad)
Terminal (Entrada/Salida)
1
2
3
4
5
6
7
Introduce tu edad: cuarenta y cinco
Traceback (most recent call last):
File "programa.py", line 1, in <module>
    edad = int(input("Introduce tu edad: "))
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: invalid literal for int() with base 10: 'cuarenta y cinco'
_

En este caso, el programa generará un error, ya que no puede convertir la cadena "cuarenta y cinco" a un número entero.

Ejercicios

Puedes acceder a la ejercitación combinada de entrada y salida propuesta para esta unidad haciendo clic aquí.