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

2 番目の print ステートメントが機能するように修正するにはどうすればよいですか?

もっと簡単な解決策があると思った

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

またはpython 3またはformat()を使用します。

明らかな何かが欠けていると感じる

4

3 に答える 3

5

タプルをネストしています。代わりに連結します:

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

ここで、3 つの要素のタプルを作成すると、文字列の書式設定が機能します。

デモ:

>>> 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}) を補間し、次に 2 番目の引数の最初の要素 ( {1[0]}、値を整数としてフォーマットする)、次に 2 番目の引数の 2 番目の要素 ( {1[1]}、値を 2 桁の整数としてフォーマットし、先頭にゼロを付ける)を補間します。 .

于 2013-07-25T20:55:25.153 に答える
1
print '%s %d:%02d' % ('hi',divmod(10,20)[0], divmod(10,20)[1])
                       ^         ^                 ^
                       1         2                 3

コンマ付きの括弧はタプルを示し、連結 (+) 付きの括弧は文字列を返します。

示されているように、3 つの入力に対して 3 タプルが必要です。

于 2013-07-25T20:55:02.140 に答える
0

文字列と 2 つの int ではなく、文字列とタプルを形式のタプルに渡しています。これは機能します:

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

タプル連結があります。

于 2013-07-25T20:57:27.397 に答える