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不会给我错误?
答案 0 :(得分:1)
当您通过raw_input()
进行输入时,它会返回一个字符串,因此x
和y
是字符串,z
是x
的串联和y
,而不是它的补充。不确定这是不是你想要的。如果您希望它们为int
,请使用int(raw_input(...))
将它们转换为int。
您得到的错误是因为%d期望x
,y
和z
(用于替换%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)强制转换为数字,以便添加它们。