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
如何修复第二个print语句以使其有效?
我认为有一个比
更简单的解决方案m = divmod(10,20)
print m[0], m[1]
或使用python 3或format()。
我觉得我错过了一些明显的东西
答案 0 :(得分: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}},将值格式化为2位且前导零的整数。
答案 1 :(得分:1)
print '%s %d:%02d' % ('hi',divmod(10,20)[0], divmod(10,20)[1])
^ ^ ^
1 2 3
带逗号的括号表示元组,带连接的parens(+)将返回字符串。
如图所示,您需要3个输入的3元组
答案 2 :(得分:0)
您将字符串和元组传递给格式的元组,而不是字符串和两个整数。这有效:
print '%s %d:%02d' % (('hi',) + divmod(10,20))
有一个元组串联。