【问题标题】:python tuple print issuepython元组打印问题
【发布时间】:2013-07-25 20:53:58
【问题描述】:
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()。

我觉得我错过了一些明显的东西

【问题讨论】:

  • 来自:stackoverflow.com/questions/1455602/… print "这是一个元组:%s" % (divmod(10,20),)
  • 我认为这是一个好问题。没有什么明显的!在我看来,相当微妙。信息量很大。

标签: python tuples string-formatting


【解决方案1】:

你正在嵌套元组;改为连接:

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 位数字和前导零的整数)。

【讨论】:

  • ((('hi',) + divmod(10,20))) 也有效。所以元组必须解开自己或其他东西......
【解决方案2】:
print '%s %d:%02d' % ('hi',divmod(10,20)[0], divmod(10,20)[1])
                       ^         ^                 ^
                       1         2                 3

带逗号的括号表示元组,带连接(+)的括号将返回字符串。

如图所示,您需要一个用于 3 个输入的 3 元组

【讨论】:

  • @MartijnPieters 你比我快,等等
  • 您发帖的速度有点过快,所以先不试。 :-)
  • 'hi' + divmod(10,20) -> TypeError: cannot concatenate 'str' and 'tuple' objects
  • @RussW 我知道,我说的并不矛盾
  • @Jim 在 MP 发布答案时放弃是明智之举,但我以一个独特且不太理想的答案大步向前!
【解决方案3】:

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

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

有一个元组连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多