2009-10-22 2 views
1

나는이 간단한 기능을 사용하고 인쇄 :파이썬 방법은 테이블

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 

을 나는 흠이 더 이상 15 자보다 랬없는거야.
각각의 "열"을 정렬 상태로 유지하고 싶습니다. 구문론적인 설탕을 사용하여 동일한 작업을 수행 할 수 있지만 별칭 열을 오른쪽 정렬 대신 왼쪽 정렬하거나 오른쪽 정렬 열없이 유지할 수 있습니까?

등가, 이보다 코드는 다음과 같습니다 모든

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 

감사합니다, 여기에 최종 버전입니다 :

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 

답변

2

방법에 대해, p는 딕셔너리 것 같다보고 :

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

가 대신 오른쪽 정렬의 왼쪽 정렬 대신 %-15s를 사용하려면 %15s입니다.

3

또는 경우 당신이 문자열의 format 방법을 사용할 수 있습니다 파이썬 2.6을 사용하여이 값의 사전을 정의

을, 약간

>>> 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

** 값은 무엇을 의미합니까? 나는 파라미터 선언 (function/method 선언)에서만'**'을 보았습니다. –

+1

@Andrea : 사전의 키/값 쌍을 일련의 명명 된 인수로 함수에 전달합니다. 그래서'd = { 'a': 1, 'b': 2}'이면'f (** d)'는'f (a = 1, b = 1)'과 동일하다. – Stephan202

+0

나는 그것을 몰랐다, 대단히 감사합니다! –

4

주제 끄기,하지만 당신은 tot 01을 사용하여 명시 적으로 추가를 수행 방지 할 수 있습니다 및 dipslay 그들을 사용:

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