Python检查整数输入

时间:2014-02-25 20:44:18

标签: python input types

我正在尝试允许用户输入我的程序,但是当他们输入字符串时我的程序失败了。这是一个更大的计划,但我试图纠正这个问题,我到目前为止:

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

非常感谢任何帮助。

3 个答案:

答案 0 :(得分: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"

这将尝试将输入解析为整数,如果失败,则显示错误消息。

答案 1 :(得分:0)

您可以使用int(raw_input())将输入转换为int。

永远不要使用eval评估不受信任的用户输入,这将允许恶意用户接管您的程序!

答案 2 :(得分:0)

为什么没有人提到正则表达式?以下适用于我,调整正则表达式以满足您的需求。

[aesteban@localhost 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)

试验:

[aesteban@localhost 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
[aesteban@localhost python-practice]$ python n.py 
Enter a number please: -50
Thank you!! Your number plus 100 is: 50.0
[aesteban@localhost python-practice]$ python n.py 
Enter a number please: -25.25
Thank you!! Your number plus 100 is: 74.75