我正在编写一个关于工程主题的代码,该代码要求用户输入程序随后可以使用的多个值。
目前我有以下代码:
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输入一个值,这是一个数字。如果用户输入的数字不是数字,那么问题将重复进行,直到他们输入数字。但是,通过使用此方法,代码不接受小数,并且将存在用户必须输入小数的实例。有没有办法解决这个问题?
答案 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"