Python:为什么不接受01或02或03的月份输入?
问题描述:
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.7Python:为什么不接受01或02或03的月份输入?
答
在python2.x,0
是八进制数前缀......
>>> 010
8
所以,有些数字是无效的......例如08
(因为它超出了八进制数的范围)。
如果更改代码以使用int(raw_input('...'))
,它应该工作,因为int
总是以10为基数,除非另有说明。
>>> int('08')
8
答
您正在使用input()
了其中根据文档您的号码是
Equivalent to eval(raw_input(prompt)).
“8”是有效的蟒蛇,但“08”则不是。
将您的呼叫更改为raw_input()
,它将按预期工作。
请不要在Python 2中使用'input()',因为它在任意用户输入上调用'eval()',这是一个_huge_安全缺陷。请参阅SO成员Ned Batchelder的[Eval really dangerous](http://edbatchelder.com/blog/201206/eval_really_is_dangerous.html)。 – 2015-02-24 03:32:20