Python如何只接受数字作为输入

时间:2014-12-16 23:51:21

标签: python python-2.x

mark= eval(raw_input("What is your mark?"))
try:
    int(mark)
except ValueError:
    try:
        float(mark)
    except ValueError:
        print "This is not a number"

所以我需要创建一个python程序来查看你的标记,并根据它的不同给你不同的响应。

但是我还需要添加一种方法来阻止随机文本输入到程序中而不是数字。

我以为我找到了一个解决方案,但它不会让它超过故障安全代码的第一个声明,如果除了数字之外它就是捕获它。

所以,如果我输入hello而不是第一行失败的数字并且给我回错exceptions:NameError: name 'happy' is not defined错误,那么会发生什么。

如何更改它以便它可以使代码为他们提供输入数字所需的print语句?

6 个答案:

答案 0 :(得分:7)

删除eval并且您的代码是正确的:

mark = raw_input("What is your mark?")
try:
    int(mark)
except ValueError:
    try:
        float(mark)
    except ValueError:
        print "This is not a number"

只需检查浮动就可以了:

try:
    float(mark)
except ValueError:
    print "This is not a number"

答案 1 :(得分:1)

声明一个全局值比传递一个参数更容易吗? 就我而言,它也会出错。

def getInput():
    global value
    value = input()
    while not value.isnumeric():
        print("enter a number")
        value = input("enter again")
    return int(value)

getInput()
print(value)

#无法评论:)

答案 2 :(得分:0)

你可以简单地到floatint并捕获异常(如果有的话)。您使用的eval被认为很差,并且您添加了大量冗余语句。

try:
    mark= float(raw_input("What is your mark?"))
except ValueError:
    print "This is not a number"

"为什么不使用eval?"你问,好吧......试试用户的这个输入:[1 for i in range (100000000)]

答案 3 :(得分:0)

导入重新

pattern = re.compile(“^ [0-9] [0-9] * \。?[0-9] *”)

status = re.search(pattern,raw_input(“输入标记:”))

如果不是状态:

    print "Invalid Input"

答案 4 :(得分:0)

您可以使用称为isnumeric的String对象方法。它比try-except方法更有效。参见下面的代码。

def getInput(prompt):
    value = input(prompt)
    while not value.isnumeric():
        print("enter a number")
        value = input("enter again")
    return int(value)

答案 5 :(得分:-1)

实际上,如果您要使用 eval(),您必须定义更多内容。

acceptables=[1,2,3,4,5,6,7,8,9,0,"+","*","/","-"]
try:
    mark= eval(int(raw_input("What is your mark?")))
except ValueError:
    print ("It's not a number!")
if mark not in acceptables:
    print ("You cant do anything but arithmetical operations!")

它是 eval()的基本控制机制。