我试图用输入语句输入数字,一切都很好,唯一的问题是当我用'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)
答案 0 :(得分:5)
在python 2中,以0
开头的数字将其标记为八进制(基数为8)。
12345 oct = 5349 dec
答案 1 :(得分:2)
在Python中,以0
开头的数字在基数8(八进制)中被识别。您会注意到以0
开头且带有8
或9
的数字会引发异常。
作为旁注,您不应该在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)