Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: metalost en 21 Mayo 2017, 00:44 am



Título: Python, espacios para impresion en pantalla
Publicado por: metalost en 21 Mayo 2017, 00:44 am
Buenas, disculpen las molestias, alguien me podria indicar/ayudar sobre este tema de imprimir en pantalla? Si vemos el primer codigo que esta aqui abajo, vemos que si lo ejecutamos, este se desconfigura del espacio en el que se deberia imprimir

Código
  1. i = 1
  2. print "i\ti**2\ti**3\ti**5\ti**10\ti**20"
  3. while i <= 10:
  4.    print i, '\t', i**2, '\t', i**3, '\t', i**5, '\t', i**10, '\t', i**20
  5.    i += 1
  6.  
  7.  


Pero si corremos este segundo codigo, podemos apreciar que ese espacio ya esta corregido... Mi duda aqui es, que no entiendo muy bien como opera este segundo...

Código
  1. i = 1
  2. print "%-4s%-5s%-6s%-8s%-13s%-15s" % \
  3.      ('i', 'i**2', 'i**3', 'i**5', 'i**10', 'i**20')
  4. while i <= 10:
  5.    print "%-4d%-5d%-6d%-8d%-13d%-15d" % (i, i**2, i**3, i**5, i**10, i**20)
  6.    i += 1
  7.  

Por ejemplo, alguien me podria indicar/pasar algun documento, sobre como funciona el " % " No entiendo muy bien para que sirve... tampoco entendi muy bien para que sirve el " %-4d%" ese %, ese -4 y la d y otra vez el %

Basicamente el codigo es eso... ¿Alguien podria "iluminarme" por favor?


Título: Re: Python, espacios para impresion en pantalla
Publicado por: engel lex en 21 Mayo 2017, 01:08 am
la tabulación en consola usualmente es representada por 8 espacios

entonces los numeros que tengas menos de 8 cifras de largo estaràn dentro de la tabulaciòn (en estaos ejemplos la barra | estará en el espacio siguiente al multiplo de 8)
Código:
>>> print "123456789\n\t|"

Código:
123456789
        |

la tabulaciòn es el espacio justo tras esa barra y las tabulaciones siempre serán una posición multiplo de 8, así que cuando un numero tiene 8 cifras de largo, la tabulación queda en la posición 9 y como la tabulación representa en multiplos de 8, se moverá al espacio 16...

Código:
>>> print "1234567890123456789\n\t|1234567\t|\n12345678\t|

Código:
1234567890123456789
1234567 |
12345678        |

por eso se te descuadra...


tu segundo codigo formatéa los espacios a mano

el % es equivalente al uso de printf en C, %s imprimirá un string %d un digito, etc, pero el formato %-4s lo que le dice es "imprime un string y si no llega a 4 de llargo, rellena con espacios"

aqui hay unos ejemplo simples
http://interactivepython.org/runestone/static/pip/StringFormatting/interpolation.html
y aquì algo màs complejo
https://pyformat.info/ (https://pyformat.info/)