Python: 为什么不能输入01、02或03表示月份?

3
print "What is your name?",
name = len(raw_input())
print name
print "How old are you?",
age = int(input())
print "What month were you born in? ",
month = int(input())
if (month>12) or (0>month):
    print "That does not exist"
else:
    all = (name+age+month)
    print "Your name length plus your age plus",
    print "the month you were born is equal to:", 
    print all

如果您运行代码,它可以正常工作,但是当提示输入月份数字时,如果输入8,则可以正常工作,但如果输入08,则无法正常工作。请问有人能告诉我为什么吗?我正在使用Python 2.7。


1
请勿在Python 2中使用input()。因为它会对任意用户输入调用eval(),这是一个非常严重的安全漏洞。请参阅SO成员Ned Batchelder的文章Eval really is dangerous - PM 2Ring
2个回答

6
在Python2.x中,0是八进制数的前缀...
>>> 010
8

所以,某些数字将无效...例如 08 (因为它超出了八进制数的范围)。
如果您更改代码以使用int(raw_input('...')),则应该可以正常工作,因为int总是假定基数为10,除非您另有说明。
>>> int('08')
8

3
你正在使用 input() 来输入数字,根据文档说明:
Equivalent to eval(raw_input(prompt)).

"

8"是有效的Python代码,但是"08"不是。

将您的输入调用更改为raw_input(),它将按预期工作。

"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接