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

如何在Python中验证变量是数字?,python,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:

我正在写一个关于工程主题的代码,它要求用户输入几个值,然后程序将处理这些值

目前,我有以下代码:

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

简单地说,我试图要求用户为straintx输入一个值,这是一个数字。如果用户输入的不是数字,则问题将重复,直到用户输入数字为止。但是,通过使用此方法,代码不接受小数,并且在某些情况下用户必须输入小数。有什么办法可以解决这个问题吗?

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

让我们在straintx不是数字时循环,然后检查最新输入是否是数字

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)

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

让我们在straintx不是数字时循环,然后检查最新输入是否是数字

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)

如果用户输入了无法转换的内容,请尝试转换为浮点并捕获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 a 1.123等


如果您不想接受零,您可以在强制转换后检查数字是否为零,我假设负数也无效,因此我们可以检查数字是否为非只要尝试强制转换为浮点数,并在用户输入无法强制转换的内容时捕获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 a 1.123等


如果你不想接受零,你可以在施法后检查数字是否为零,我认为负数也是无效的,因此我们可以检查数字是否不如果你坚持使用正则表达式,此模式似乎有效:

"^(\-)?[\d]*(\.[\d]*)?$"
匹配可选负号,匹配任意位数,可选小数与任意位数


提示:您可以在if语句中直接使用isnumber=boolre.matchnum_格式、straintx或后面的部分。

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

"^(\-)?[\d]*(\.[\d]*)?$"
匹配可选负号,匹配任意位数,可选小数与任意位数


提示:您可以在if语句中直接使用isnumber=boolre.matchnum_格式、strainx或后面的部分。

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

isinstance( variable_name, int )
try:
    number = float(variable_name)
    print "variable is number"
except ValueError:
    print "Not a number"
如果它返回True,那么变量是number,否则它是其他变量

但如果要检查字符值是否为number。eg-a=2 上面的脚本将返回False。 那么试试这个-

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

如果要查找整数检查,请尝试以下操作-

isinstance( variable_name, int )
try:
    number = float(variable_name)
    print "variable is number"
except ValueError:
    print "Not a number"
如果它返回True,那么变量是number,否则它是其他变量

但如果要检查字符值是否为number。eg-a=2 上面的脚本将返回False。 那么试试这个-

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

这可能会有帮助:这个问题可以重新表述为如何验证变量是一个数字吗?这个问题的可能重复可能会有帮助:这个问题可以重新表述为如何验证变量是一个数字吗?字符串如何成为浮点或int的实例的可能重复?Python 2.X中的输入将把输入转换为合理的数据类型,即“x”将是字符串,2将是int,2.2将是float。用户将如何在非字符串的对象上使用正则表达式?Input返回python 3中的字符串。没有理由假设程序员没有因预期使用正则表达式而出错。我之前在评论部分要求进一步澄清,看看他们是否问了他想问的问题。字符串如何成为float或int的实例?Python 2.X中的输入将把输入转换为合理的数据类型,即“X”将是string,2将是int,2.2将是float。用户将如何在非字符串的对象上使用正则表达式?Input返回python中的字符串3没有理由假设程序员没有因预期使用正则表达式而出错。我之前在评论部分要求进一步澄清,看看他们是否问了他想问的问题;请求原谅比得到允许容易。假设它是一个vaid数,然后抓住它不是的情况。好的,非常感谢,这很有效!我有几个这样的输入。对于其中一个,我想指定输入也不能等于零,有没有办法做到这一点?当然。尝试强制转换后,添加一个if检查,查看数字是否为零。如果是这样,请打印一条消息,然后使用“继续”将中断放在ifI之外。我一直试图将其写入程序,但我真的不明白如何将其写入。你能再给我一些指导吗?谢谢这是;请求原谅比得到允许容易。假设它是一个vaid数,然后抓住它不是的情况。好的,非常感谢,这很有效!我有几个这样的输入。对于其中一个,我想指定输入也不能等于零,有没有办法做到这一点?
当然尝试强制转换后,添加一个if检查,查看数字是否为零。如果是这样,请打印一条消息,然后使用“继续”将中断放在ifI之外。我一直试图将其写入程序,但我真的不明白如何将其写入。你能再给我一些指导吗?感谢使用Python 3,输入的返回值将始终是一个字符串,无论其内容如何,因此instanceof check在那里永远不会工作。假设使用Python 3,输入的返回值将始终是一个字符串,无论其内容如何,因此instanceof check在那里永远不起作用。您不需要将单个字符类转义序列\d放入单独的字符类[]。你也不需要逃避破折号。您可以将表达式缩短为^-?\d*\。\d*?$。如果使用re.match,实际上不需要插入符号^。不需要将单个字符类转义序列\d放入单独的字符类[]。你也不需要逃避破折号。您可以将表达式缩短为^-?\d*\。\d*?$。如果使用re.match,实际上不需要插入符号。