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

问题描述 投票:0回答:5
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语句?

python python-2.x
5个回答
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"

0
投票

你可以简单地cae到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)]


0
投票

进口重新

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

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

如果没有状态:

    print "Invalid Input"

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)

-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()的基本控制机制。

© www.soinside.com 2019 - 2024. All rights reserved.