1.9. Entrada y salida

A menudo tenemos la necesidad de interactuar con los usuarios, ya sea para obtener datos o para proporcionar algún tipo de resultado. La mayoría de los programas de hoy en día utilizan un cuadro de diálogo como una forma de pedir al usuario que proporcione algún tipo de entrada. Aunque Python tiene una forma de crear cuadros de diálogo, hay una función mucho más sencilla que podemos usar. Python nos brinda una función que nos permite pedirle a un usuario que introduzca algunos datos y devuelve una referencia a ellos en forma de cadena. La función se llama input.

La función de entrada de Python toma un solo parámetro que es una cadena. Esta cadena a menudo se denomina prompt porque contiene algún texto útil que le pide al usuario que introduzca algo. Por ejemplo, usted puede invocar a input de la siguiente manera:

unNombre = input('Por favor ingrese su nombre: ')

Ahora todo lo que el usuario digite después del prompt se almacenará en la variable unNombre. Usando la función input, podemos escribir fácilmente instrucciones que le pedirán al usuario que ingrese datos y luego incorporarán esos datos a otro procesamiento. Por ejemplo, en las siguientes dos declaraciones, la primera pregunta al usuario por su nombre y la segunda imprime el resultado de algún procesamiento simple basado en la cadena que se proporciona.

Es importante tener en cuenta que el valor devuelto por la función input será una cadena que representa los caracteres exactos que se ingresaron después de la solicitud. Si usted desea que esta cadena sea interpretada como otro tipo, debe indicar la conversión de tipo de forma explícita. En las instrucciones siguientes, la cadena que es introducida por el usuario se convierte a flotante para que pueda utilizarse en otro procesamiento aritmético.

cadenaRadio = input("Por favor introduzca el radio del círculo ")
radio = float(cadenaRadio)
diametro = 2 * radio

1.9.1. Formato de cadenas

Ya hemos visto que la función print proporciona una forma muy sencilla de imprimir en pantalla los valores de un programa de Python. print toma cero o más parámetros y los muestra usando un espacio en blanco como el separador predeterminado. Es posible cambiar el carácter de separación mediante el ajuste del argumento sep. Además, cada impresión finaliza, por defecto, con un carácter de nueva línea. Este comportamiento se puede cambiar ajustando el argumento end. Estas variaciones se muestran en la siguiente sesión:

>>> print("Hola")
Hola
>>> print("Hola","Mundo")
Hola Mundo
>>> print("Hola","Mundo", sep="***")
Hola***Mundo
>>> print("Hola","Mundo", end="***")
Hola Mundo***>>>

A menudo es útil tener más control sobre la apariencia de su salida. Afortunadamente, Python nos proporciona una alternativa llamada cadenas formateadas. Una cadena formateada es una plantilla en la que las palabras o espacios que permanecen constantes se combinan con marcadores de posición para las variables que se insertarán en la cadena. Por ejemplo, la declaración

print(unNombre, "tiene", edad, "años de edad.")

Contiene las palabras tiene y años de edad, pero el nombre y la edad cambiarán dependiendo de los valores de las variables en el momento de la ejecución. Usando una cadena formateada, escribimos la declaración anterior como

print("%s tiene %d años de edad." % (unNombre, edad))

Este ejemplo sencillo ilustra una nueva expresión de cadenas. El operador % es un operador de cadena llamado operador de formato. El lado izquierdo de la expresión contiene la plantilla o cadena de formato y el lado derecho contiene una colección de valores que se sustituirá en la cadena de formato. Note que el número de valores en la colección del lado derecho corresponde con el número de caracteres % en la cadena de formato. Los valores se toman en orden, de izquierda a derecha de la colección y se insertan en la cadena de formato.

Demos un vistazo a ambos lados de esta expresión de formato con más detalle. La cadena de formato puede contener una o más especificaciones de conversión. Un carácter de conversión le dice al operador de formato qué tipo de valor va a ser insertado en esa posición en la cadena. En el ejemplo anterior, el %s especifica una cadena, mientras que el %d especifica un entero. Otras posibles especificaciones de tipo son i, u, f, e, g, c, o %. La Tabla 9 resume todas las especificaciones de los distintos tipos.

Tabla 9: Caracteres de conversión de formato de cadenas
Carácter Formato de salida
d, i Entero
u Entero sin signo
f Punto flotante como m.ddddd
e Punto flotante como m.ddddde+/-xx
E Punto flotante como m.dddddE+/-xx
g Usa %e para exponentes menores que \(-4\) o mayores que \(+5\), de lo contrario usa %f
c Carácter único
s Cadena o cualquier objeto de datos de Python que pueda convertirse a una cadena usando la función str.
% Inserta un carácter % literal

Además del carácter de formato, usted también puede incluir un modificador de formato entre el % y el carácter de formato. Los modificadores de formato se pueden utilizar para justificar el valor a la izquierda o a la derecha con un ancho de campo especificado. Los modificadores también se pueden utilizar para especificar el ancho del campo junto con un número de dígitos después del punto decimal. La Tabla 10 explica estos modificadores de formato.

Tabla 10: Opciones de formato adicionales
Modificador Ejemplo Descripción
número %20d Pone el valor en una anchura de campo de 20
- %-20d Pone el valor en un campo de 20 caracteres de ancho, justificado a la izquierda
+ %+20d Pone el valor en un campo de 20 caracteres de ancho, justificado a la derecha
0 %020d Pone el valor en un campo de 20 caracteres de ancho, rellenando con ceros a la izquierda
. %20.2f Pone el valor en un campo de 20 caracteres de ancho con 2 caracteres a la derecha del punto decimal
(nombre) %(nombre)d Obtiene el valor del diccionario suministrado usando nombre como clave

El lado derecho del operador de formato es una colección de valores que se insertarán en la cadena de formato. La colección será una tupla o un diccionario. Si la colección es una tupla, los valores se insertan en el orden de la posición. Es decir, el primer elemento de la tupla corresponde al primer carácter de formato en la cadena de formato. Si la colección es un diccionario, los valores se insertan de acuerdo con sus claves. En este caso, todos los caracteres de formato deben utilizar el modificador (nombre) para especificar el nombre de la clave.

>>> precio = 24
>>> item = "banano"
>>> print("El %s cuesta %d centavos"%(item,precio))
El banano cuesta 24 centavos
>>> print("El %+10s cuesta %5.2f centavos"%(item,precio))
El     banano cuesta 24.00 centavos
>>> print("El %+10s cuesta %10.2f centavos"%(item,precio))
El     banano cuesta      24.00 centavos
>>> diccitem = {"item":"banano","costo":24}
>>> print("El %(item)s cuesta %(costo)7.1f centavos"%diccitem)
El banano cuesta    24.0 centavos
>>>

Además de las cadenas de formato que utilizan caracteres de formato y modificadores de formato, las cadenas de Python también incluyen un método format que se puede usar junto con una nueva clase Formatter para implementar formateos complejos de cadenas. En el manual de referencia de la biblioteca de Python se puede encontrar más información sobre estas características.

Next Section - 1.10. Estructuras de control