2

我正在尝试使用输入语句输入数字,一切都很好,唯一的问题是当我以“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)

4

3 回答 3

5

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

12345 八月 = 5349 十二月

于 2013-01-12T05:49:16.220 回答
2

在 Python 中,以 开头的数字0被识别为以 8 为基数(八进制)。您会注意到以 开头的数字08or9将引发异常。

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

a = raw_input('> ')
try:
    a = int(a, 10)
except ValueError:
    #do something
print a
于 2013-01-12T05:49:59.227 回答
0

input评估从流中读取的任何内容 - 因此它被读取一个数字并作为整数返回。

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

(所以input('> ')与 相同eval(raw_input('> '))

正如@Tim所说,整数值似乎出乎意料,因为python 将该值解释为八进制。

于 2013-01-12T05:48:37.340 回答