Cuando tenemos que combinar cadenas de caracteres e incorporarle valores almacenados en otras variables el lenguaje Python nos suministra una técnica para incrustar valores dentro de la cadena.

Veamos mediante ejemplos cual es la sintaxis para plantear estos formatos de cadenas:

x1=10
x2=5
x3=20
print 'El contenido de la primer variable es %d, de la segunda %d y la tercera %d' % (x1,x2,x3)

Si bien podemos utilizar el operador + para ir concatenando cadenas y variables esta técnica hace que nuestro programa sea más legible sobre todo cuando tenemos que sustituir varias variables dentro de una cadena.

Primero indicamos entre comillas la cadena y utilizamos el símbolo % para indicar el lugar donde se sustituirá el valor, debemos indicar luego del caracter % el tipo de dato (en nuestro ejemplo un valor decimal (d))

Luego de la cadena debemos indicar una tupla con los valores o variables de donde se obtendrán los datos. Entre la cadena de formato y la tupla debemos disponer el caracter % (aquí el caracter porcentaje tiene un objetivo distinto que dentro de la cadena de formato)

Se especifican distintos caracteres para cada tipo de dato a sustituir:

x=10
g=10.2
cadena='juan'
print 'El valor entero %d el valor real %f y la cadena %s' % (x,g,cadena)

En el ejemplo propuesto vemos que podemos utilizar los caracteres de formato d (decimal), f (float) y s (string).

Es importante el orden de los valores de la tupla ya que el lenguaje procesa los datos en forma secuencia, es decir cada vez que debe sustituir un valor en la cadena extrae de la tupla el siguiente valor.

Cuando damos formato a una variable real (con coma) podemos disponer dos valores previos al caracter f:

g=20.5498
print 'El valor real es %10.2f' % (g)

El primer valor indica el largo total a reservar y el segundo la cantidad de decimales.

Podemos convertir el valor decimal a tipo octal o hexadecimal:

x=255
print 'Decimal %d en hexadecimal es %x y en octal %o' % (x,x,x)
      #Decimal 255 en hexadecimal es ff y en octal 377  

No es obligatorio que el formato de cadena se utilice siempre en un print, podemos almacenar el resultado del formato en otra variable string (que podemos eventualmente almacenarla en una base de datos por ejemplo).

vx=10
vy=90
resultado='(%d,%d)' % (vx,vy)
print resultado # (10,90)

También podemos indicar un valor entero en el formato para los tipos de datos enteros y string:

x1=100
x2=1500
x3=5
print '<pre>'
print '%5d' % (x1)
print '%5d' % (x2)
print '%5d' % (x3)
print '</pre>'

El resultado por pantalla es:

  100
 1500
    5

Es decir reserva en este caso 5 espacios para el entero y hace la alineación a derecha.

Si indicamos un valor negativo los datos se alínean a izquierda:

animales=['perro','elefante','pez']
print '<pre>'
for elemento in animales:
    print '%20s' % elemento
for elemento in animales:
    print '%-20s' % elemento
print '</pre>'

El resultado de ejecutar el programa es:

               perro
            elefante
                 pez
perro               
elefante            
pez                 

Problema resuelto

Imprimir todos los números desde el 1 hasta el 255 en decimal, octal y hexadecimal.



Problema Propuesto

Almacenar en una lista los nombres de personas y en otra los sueldos que cobran cada uno. Hacer que para el índice cero de cada componente representen los datos de una persona y así sucesivamente.

Imprimir un nombre por línea de la pantalla y hacer que los sueldos aparezcan correctamente alineados las columnas de unidades, decenas, centenas etc.


nombres=['juan','ana','luis']
sueldos=[1500.55,2700.00,910.66]

print '<pre>'
for indice in range(0,len(nombres)):
    print '%-20s  %10.2f' % (nombres[indice],sueldos[indice])
print '</pre>'
    
Ver solución