2014-02-25 170 views
1

我想讓用戶輸入到我的程序,但是當他們輸入一個字符串我的程序失敗。這是一個更大的計劃,但正在努力糾正這個問題,我至今:Python檢查整數輸入

data = raw_input('Enter a number: ') 
number = eval(data) 
if type(number) != int: 
    print"I am afraid",number,"is not a number" 
elif type(number) == int: 
    if data > 0: 
     print "The",number,"is a good number" 
    else: 
     print "Please enter a positive integer" 
當用戶輸入一個字符串

,它返回:

number = eval(data) 
    File "<string>", line 1, in <module> 
NameError: name 'hel' is not defined 

任何幫助將非常感激。

+0

[Python的整型值誤認](http://stackoverflow.com/questions/21969453/python-misidentification-of-int-values) –

+8

'的可能重複eval(raw_input(...))'是一個___very___壞主意 – lanzz

+1

'str.isdigit'存在於Python2中嗎? –

回答

8

您使用的是eval,它計算在當前上下文中作爲Python表達式傳遞的字符串。你想要做的只是

data = raw_input('Enter a number: ') 
try: 
    number = int(data) 
except ValueError: 
    print "I am afraid %s is not a number" % data 
else: 
    if number > 0: 
     print "%s is a good number" % number 
    else: 
     print "Please enter a positive integer" 

這將嘗試解析輸入爲整數,如果失敗,則顯示錯誤消息。

+0

你可以通過使用'''print'{:d}是一個很好的數字「.format(data) 'try'''分支 – wnnmaw

+0

@wnnmaw OP想要檢查數字是否爲正數後,所以最好將它存儲在變量中 –

+0

對,我編輯爲直接使用'''data'''。這消除了需要有第二個變量'''數字'''做比較 – wnnmaw

0

您可以使用int(raw_input())將輸入轉換爲int。

永遠不要使用eval評估不可信用戶輸入,這將允許惡意用戶接管您的程序!

+1

您不知道輸入是否爲int – stackErr

+1

是的,如果某人鍵入「零」或0xFAIL,並且Maxime Lorant的解決方案更加健壯,則會失敗。 –

0

爲什麼沒有人提到正則表達式?以下工作適合我,調整正則表達式以適應您的需求。

[[email protected] python-practice]$ cat n.py 
import re 

userNumber = '' 

while not re.match('^-?[0-9]*\.?[0-9]+$',userNumber): 
    userNumber = raw_input("Enter a number please: ") 

newNumber = float(userNumber) + 100 

print "Thank you!! Your number plus 100 is: " + str(newNumber) 

測試:

[[email protected] python-practice]$ python n.py 
Enter a number please: I want to make $200 an hour. 
Enter a number please: ok ok... 
Enter a number please: 200 
Thank you!! Your number plus 100 is: 300.0 
[[email protected] python-practice]$ python n.py 
Enter a number please: -50 
Thank you!! Your number plus 100 is: 50.0 
[[email protected] python-practice]$ python n.py 
Enter a number please: -25.25 
Thank you!! Your number plus 100 is: 74.75