为什么 python if 条件不适用于 "False" 的值?
Why is python if condition not working for values of "False"?
在下面的代码中,is_number
对于值 "foo"
是 False,但这仍然会为该字符串打印 is a number
。为什么?我该如何解决?
def string_is_number(a_string):
pattern = re.compile(r'[0-9]+')
if pattern.search(a_string):
return("True")
else:
return("False")
for value in 42, 0.5, "foo":
the_string = str(value)
is_number = string_is_number(the_string)
print(the_string, is_number)
if is_number:
print(the_string, "is a number")
输出:
42 True
42 is a number
0.5 True
0.5 is a number
foo False
foo is a number
Return一个bool
,不是一个str
:
if pattern.search(a_string):
return True
else:
return False
Python 中的任何非空字符串都被认为是真实的(或“真实的”),包括 "False"
:
>>> bool("False")
True
当然,您的号码检测正则表达式有点不对劲:
re.match("^\d+([.,]\d+)?$", a_string)
将是一个更严格的测试。
您正在尝试 return“True”和“False”作为字符串。您需要像这样 return 它们作为布尔值:
def string_is_number(a_string):
pattern = re.compile(r'[0-9]+')
return pattern.search(a_string) # Returns True or False
您的函数失败,因为您返回的非空字符串总是True
。一个更微妙的问题是,您将任何至少有一位数字的东西称为数字。所以“我不是第一”是一个数字。检查某物是否为“数字”的一个好方法是尝试转换它。在您的情况下,看起来您正在处理都可以转换为 float
的整数和浮点数。由于字符串文字中不允许使用逗号,因此需要将其分解,但您的函数可能是
def string_is_number(a_string):
try:
float(a_string.strip(','))
return True
except:
return False
在下面的代码中,is_number
对于值 "foo"
是 False,但这仍然会为该字符串打印 is a number
。为什么?我该如何解决?
def string_is_number(a_string):
pattern = re.compile(r'[0-9]+')
if pattern.search(a_string):
return("True")
else:
return("False")
for value in 42, 0.5, "foo":
the_string = str(value)
is_number = string_is_number(the_string)
print(the_string, is_number)
if is_number:
print(the_string, "is a number")
输出:
42 True
42 is a number
0.5 True
0.5 is a number
foo False
foo is a number
Return一个bool
,不是一个str
:
if pattern.search(a_string):
return True
else:
return False
Python 中的任何非空字符串都被认为是真实的(或“真实的”),包括 "False"
:
>>> bool("False")
True
当然,您的号码检测正则表达式有点不对劲:
re.match("^\d+([.,]\d+)?$", a_string)
将是一个更严格的测试。
您正在尝试 return“True”和“False”作为字符串。您需要像这样 return 它们作为布尔值:
def string_is_number(a_string):
pattern = re.compile(r'[0-9]+')
return pattern.search(a_string) # Returns True or False
您的函数失败,因为您返回的非空字符串总是True
。一个更微妙的问题是,您将任何至少有一位数字的东西称为数字。所以“我不是第一”是一个数字。检查某物是否为“数字”的一个好方法是尝试转换它。在您的情况下,看起来您正在处理都可以转换为 float
的整数和浮点数。由于字符串文字中不允许使用逗号,因此需要将其分解,但您的函数可能是
def string_is_number(a_string):
try:
float(a_string.strip(','))
return True
except:
return False