Python初学者在这里。想问你一个非常简单的问题。

这是第一个示例代码:

print "I will \"Add\" any two number that you type."
x = raw_input("What is the first number?")
y = raw_input("What is the second number?")

z = x + y

print "So, %d plus %d equals to %d" % (x, y, z)


在最后一行中使用%d会给我错误:

   TypeError: %d format: a number is required, not str


这是第二个示例代码:

print "I will \"Add\" any two number that you type."
x = raw_input("What is the first number?")
y = raw_input("What is the second number?")

z = x + y

print "So, %r plus %r equals to %r" % (x, y, z)


这不会产生第一个代码所给出的错误。

所以我的问题是为什么使用%d会给我错误,但使用%r却不会给我错误?

最佳答案

当您通过raw_input()输入时,它返回一个字符串,因此xy是字符串,而zxy的串联,而不是其加法。不确定这是否是您想要的。如果希望将它们用作int,请使用int(raw_input(...))将它们转换为int。

您得到的错误是因为%d期望xyz(用于替换%d)是整数(但是它们实际上是字符串,因此是错误的)。

%r表示repr()的输出,它接受任何类型的对象,因此在第二种情况下都可以使用,尽管它将返回串联(而不是加法)。

关于python - 为什么在某些情况下%r可以工作而%d可以工作,即使有很多,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31954658/

10-11 04:40