2015-02-24 34 views
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.7Python:爲什麼不接受01或02或03的月份輸入?

+1

請不要在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

回答

6

在python2.x,0是八進制數前綴......

>>> 010 
8 

所以,有些數字是無效的......例如08(因爲它超出了八進制數的範圍)。

如果更改代碼以使用int(raw_input('...')),它應該工作,因爲int總是以10爲基數,除非另有說明。

>>> int('08') 
8 
3

您正在使用input()了其中根據文檔您的號碼是

Equivalent to eval(raw_input(prompt)). 

「8」是有效的蟒蛇,但「08」則不是。

將您的呼叫更改爲raw_input(),它將按預期工作。

相關問題