2009-10-22 10 views
1

J'utilise cette fonction simple:façon Pythonic pour imprimer une table

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 

et je ne sont pseudos en supposant plus de 15 caractères.
Je voudrais garder chaque "colonne" alignée, y a-t-il un peu de sucre syntaxique me permettant de faire la même chose mais en gardant la colonne des pseudonymes alignée à gauche au lieu de droite, sans casser la colonne à droite?

L'équivalent, plus laid, le code serait:

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 

Merci à tous, voici la version 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 

Répondre

2

Voyant que p semble être un dict, que diriez-vous:

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

à gauche-align au lieu de droite-align, utilisez %-15s à la place de %15s.

3

Ou si vous utilisez Python 2.6, vous pouvez utiliser la méthode format de la chaîne:

Ceci définit un dictionnaire de valeurs, et les utilise pour affiché au:

>>> 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' 
+0

Que signifie «** values»? J'ai vu '**' seulement dans la déclaration des paramètres (déclaration d'une fonction/méthode). –

+1

@Andrea: il transmet les paires clé/valeur d'un dictionnaire sous la forme d'une série d'arguments nommés à une fonction. Donc, si 'd = {'a': 1, 'b': 2}', alors 'f (** d)' est équivalent à 'f (a = 1, b = 1)'. – Stephan202

+0

Je ne le savais pas, merci beaucoup! –

4

légèrement hors sujet, mais vous pouvez éviter d'effectuer plus explicite sur l'utilisation totenumerate:

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