如何在Python中验证变量是否为数字?

时间:2015-04-12 16:33:44

标签: python

我正在编写一个关于工程主题的代码,该代码要求用户输入程序随后可以使用的多个值。

目前我有以下代码:

while True:
    strainx =input("Please enter a value for strain in the x-direction: ")

    num_format = re.compile("^[1-9][0-9]*\.?[0-9]*")
    isnumber = re.match(num_format,strainx)
    if isnumber:

        break

简单来说,我试图要求用户为strainx输入一个值,这是一个数字。如果用户输入的数字不是数字,那么问题将重复进行,直到他们输入数字。但是,通过使用此方法,代码不接受小数,并且将存在用户必须输入小数的实例。有没有办法解决这个问题?

4 个答案:

答案 0 :(得分:4)

如果用户输入了无法转换的内容,只需尝试转换为浮点并捕获ValueError:

while True:
    strainx = input("Please enter a value for strain in the x-direction: ")  
    try:
       number = float(strainx)
       break # if valid entry we break the loop
    except ValueError:
        # or else we get here, print message and ask again
        print("Invalid entry")

print(number)

施放以浮动涵盖"1""1.123"等等。

如果你不想接受零,你可以在施法后检查数字是否为零,我推测负数也是无效的,所以我们可以检查数字是否不是<= 0。

while True:
    strainx = input("Please enter a value for strain in the x-direction: ")
    try:
        number = float(strainx)
        if number <= 0:
            print("Number must be greater than zero")
            continue  # input was either negative or 0
        break  # if valid entry we break the loop
    except ValueError:
        # or else we get here, print message and ask again
        print("Invalid entry")

print(number)

答案 1 :(得分:0)

如果您使用的是Python 2,而不是使用正则表达式,则可以在内置类型检查机制中使用Python。

当strainx不是数字时,让我们循环,然后检查最新输入是否为数字。

is_number = False
while not is_number:
    strainx =input("Please enter a value for strain in the x-direction: ")
    is_number = isinstance(strainx, float) or isinstance(strainx, int)

答案 2 :(得分:0)

如果您坚持使用正则表达式,则此模式似乎有效:

"^(\-)?[\d]*(\.[\d]*)?$"

匹配可选的负号,匹配任意数量的数字,可选的十进制数与任意位数。

提示:您可以将isnumber = bool(re.match(num_format,strainx)或后一部分直接用于if语句。

答案 3 :(得分:0)

如果您正在寻找整数检查,请尝试此操作 -

isinstance( variable_name, int )

如果它返回True,那么变量就是数字,否则它就是其他东西。

但是如果你想检查字符值是否为数字。例如 - a =“2” 上面的脚本将返回False。 试试这个 -

try:
    number = float(variable_name)
    print "variable is number"
except ValueError:
    print "Not a number"