2013-07-25 4 views
1
print '%d:%02d' % divmod(10,20) 

결과 :파이썬 튜플 인쇄 문제

0:10 

그러나에

print '%s %d:%02d' % ('hi', divmod(10,20)) 

결과 :

Traceback (most recent call last): 
    File "<pyshell#6>", line 1, in <module> 
    print '%s %d:%02d' % ('hi', divmod(10,20)) 
TypeError: %d format: a number is required, not tuple 

어떻게 그렇게 두 번째 인쇄 문을 고정 할 그것은 작동합니까?

나는

m = divmod(10,20) 
print m[0], m[1] 

또는 파이썬 3 형식을 사용하여()보다 간단한 해결책이 생각했다.

나는 문자열을 반환합니다 연결 (+)와 함께 괄호, 내가 쉼표로 괄호

+0

: % (divmod (10 : http://stackoverflow.com/questions/1455602/printing-tuple-with-string-formatting-in-python 인쇄는 "%의이 튜플이다" 20),) – sihrc

+0

좋은 질문이라고 생각합니다. 그것에 대해 명백한 아무것도! 내 의견으로는 꽤 미묘하다. 매우 유익한. – Jiminion

답변

5

을 같이

당신은 3 개 입력에 대한 3 튜플이 필요합니다; 대신 연결하십시오 :

print '%s %d:%02d' % (('hi',) + divmod(10,20)) 

이제 세 요소의 튜플을 만들고 문자열 서식이 작동합니다.

데모 :

>>> print '%s %d:%02d' % (('hi',) + divmod(10,20)) 
hi 0:10 

과 차이 설명하기 : 또는

>>> ('hi', divmod(10,20)) 
('hi', (0, 10)) 
>>> (('hi',) + divmod(10,20)) 
('hi', 0, 10) 

str.format() 사용 여기

>>> print '{0} {1[0]:d}:{1[1]:02d}'.format('hi', divmod(10, 20)) 
hi 0:10 

우리는 첫 번째 인수 ( {0})를 보간 한 후 두 번째 인수의 첫 번째 요소 ( {1[0]}, 값을 정수로 서식 지정), 두 번째 인수의 두 번째 요소 ( {1[1]}, 2 자리 숫자 및 선행 0이있는 값으로 서식을 지정)

+0

+1보기'.format'이 이전의'%'메소드보다 훨씬 뛰어 났기 때문에, 당신의 예제와 다른 이유로 바로 여기에. – SethMMorton

+1

오. 제자.'.format' 대답은 방금 내 학교 – Stephan

+0

((('hi', + divmod (10,20)))도 작동합니다. 그래서 튜플은 자신이나 무언가를 풀어야합니다 .... – Jiminion

1
print '%s %d:%02d' % ('hi',divmod(10,20)[0], divmod(10,20)[1]) 
        ^  ^    ^
         1   2     3 

분명 뭔가를 누락 튜플을 나타냅니다 생각합니다. 당신은 중첩 튜플이다

+0

@MartijnPieters 너는 나보다 빠르다. – Stephan

+0

너는 너무 빨리 게시하고 먼저 해보지 않았다.:-) –

+0

' 'hi'+ divmod (10,20)'->'TypeError : 'str'과 'tuple'객체를 연결할 수 없습니다. – RussW

0

문자열과 튜플을 형식의 튜플에 전달하며 문자열 및 두 개의 int는 전달하지 않습니다. 작동 방식 :

print '%s %d:%02d' % (('hi',) + divmod(10,20)) 

터플 연결이 있습니다. 에서