Domanda

Sto usando questa semplice funzione:

def print_players(players):
    tot = 1
    for p in players:
        print '%2d: %15s \t (%d|%d) \t was: %s' % (tot, p['nick'], p['x'], p['y'], p['oldnick'])
        tot += 1

e suppongo che i nick non siano più lunghi di 15 caratteri.
Vorrei mantenere ogni "colonna" allineato, c'è un po 'di zucchero sintattico che mi permette di fare lo stesso ma mantenendo la colonna dei nickname allineata a sinistra anziché allineata a destra, senza rompere la colonna a destra?

Il codice equivalente, più brutto, sarebbe:

def print_players(players):
    tot = 1
    for p in players:
        print '%2d: %s \t (%d|%d) \t was: %s' % (tot, p['nick']+' '*(15-len(p['nick'])), p['x'], p['y'], p['oldnick'])
        tot += 1

Grazie a tutti, ecco la versione finale:

def print_players(players):
    for tot, p in enumerate(players, start=1):
        print '%2d:'%tot, '%(nick)-12s (%(x)d|%(y)d) \t was %(oldnick)s'%p
È stato utile?

Soluzione

Visto che p sembra essere un dict, che ne dici di:

print '%2d' % tot + ': %(nick)-15s \t (%(x)d|%(y)d) \t was: %(oldnick)15s' % p

Altri suggerimenti

Per allineare a sinistra anziché allineare a destra, usa % -15s anziché % 15s .

Argomento leggermente fuori tema, ma puoi evitare di eseguire esplicite aggiunte su tot usando enumerate :

for tot, p in enumerate(players, start=1):
    print '...'

O se usi python 2.6 puoi usare il format metodo della stringa:

Definisce un dizionario di valori e li utilizza per dipslay:

>>> values = {'total':93, 'name':'john', 'x':33, 'y':993, 'oldname':'rodger'}
>>> '{total:2}: {name:15} \t ({x}|{y}\t was: {oldname}'.format(**values)
'93: john            \t (33|993\t was: rodger'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top