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]

或使用 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}),然后插入第二个参数的第一个元素 ( {1[0]},将值格式化为整数),然后插入第二个参数的第二个元素 ( {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

您将一个字符串和一个元组传递给格式的元组,而不是一个字符串和两个整数。这有效:

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

有一个元组连接。

于 2013-07-25T20:57:27.397 回答