为什么%r工作,而%d在某些情况下确实存在,即使有一个数字

时间:2015-08-12 01:37:08

标签: python python-2.7

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不会给我错误?

4 个答案:

答案 0 :(得分:1)

当您通过raw_input()进行输入时,它会返回一个字符串,因此xy是字符串,zx的串联和y,而不是它的补充。不确定这是不是你想要的。如果您希望它们为int,请使用int(raw_input(...))将它们转换为int。

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

%r表示接受任何类型对象的repr()的输出,因此它适用于第二种情况,尽管它会返回连接(而不是添加)。

答案 1 :(得分:0)

每个变量都有一个未声明的隐式类型。类型是数字或字符串(文本)。 raw_input始终返回一个字符串。

%d标志尝试将变量格式化为数字。当它找到文本时,会抛出错误。

答案 2 :(得分:0)

当你使用raw_input时,你必须将字符串转换为你想要的数据类型,例如我的例子1我正在使用int()函数将变量x和y转换为数据类型int。或者您可以只使用输入,Python会为您处理这个问题,例如,如果在输入时输入一个数字,Python将假设是一个整数,如果您键入一个字符串,那么它将假定是一个字符串。

##Example 1:
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 = int(x) + int(y)

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

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

z = x + y

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

答案 3 :(得分:0)

per https://docs.python.org/2/library/functions.html#raw_input raw_input接受您的输入并将其指定为字符串。

%d只能格式化数字。

per https://docs.python.org/2/library/string.html#format-specification-mini-language(很难找到,%r没有很好地记录)%r使用convert_field将变量转换为一个表示,如果被解析将获得相同的值。

我相信+会将两个字符串(x和y)强制转换为数字,以便添加它们。