Python INPUT给出了错误的结果

时间:2013-01-12 05:45:19

标签: python user-input

我试图用输入语句输入数字,一切都很好,唯一的问题是当我用'0'开始数字时。它给出了错误的结果。有人能解释我到底发生了什么,以及为什么会给出错误的结果。

这是一个小例子:

 >>> a = input("> ")
 > 12345
 >>> a
 12345
 >>> a = input("> ")
 > 012345
 >>> a
 5349
 >>> print a
 5349
 >>> if a == 012345: print "matched"

 matched

我不明白这一点。谢谢你的帮助! (Windows XP,Python 2.7.3)

3 个答案:

答案 0 :(得分:5)

在python 2中,以0开头的数字将其标记为八进制(基数为8)。

12345 oct = 5349 dec

答案 1 :(得分:2)

在Python中,以0开头的数字在基数8(八进制)中被识别。您会注意到以0开头且带有89的数字会引发异常。

作为旁注,您不应该在Python 2中使用input(),因为它会评估输入。请改用raw_input(),然后将其转换为int。如果你想摆脱基础8问题,那么将10作为第二个参数传递给int()(基数):

a = raw_input('> ')
try:
    a = int(a, 10)
except ValueError:
    #do something
print a

答案 2 :(得分:0)

input评估从流中读取的内容 - 因此它被读取一个数字并以整数形式返回。

听起来你正在寻找raw_input,它将从流中读取的内容作为字符串

(因此input('> ')eval(raw_input('> '))

相同

@Tim所述,整数值似乎是意外的,因为python将值解释为八进制。