为什么python if条件不适用于";假;?

为什么python if条件不适用于";假;?,python,if-statement,boolean,boolean-expression,Python,If Statement,Boolean,Boolean Expression,在下面的代码中,是值“foo”的\u number是False,但这仍然会打印该字符串的是一个数字。为什么?我该如何修复它 def string_is_number(a_string): pattern = re.compile(r'[0-9]+') if pattern.search(a_string): return("True") else: return("False") for valu

在下面的代码中,
是值
“foo”
的\u number
False,但这仍然会打印该字符串的
是一个数字。为什么?我该如何修复它

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正确
42是一个数字
0.5对
0.5是一个数字
福假
福是一个数字

返回一个
bool
,而不是
str

if pattern.search(a_string):
    return True
else:
    return False 
Python中的任何非空字符串都被视为true(或“truthy”),包括
“False”

当然,用于数字检测的正则表达式有点不合适:

re.match("^\d+([.,]\d+)?$", a_string)
这将是一个更严格的测试。

您试图将“True”和“False”作为字符串返回。您需要将它们作为布尔值返回,如下所示:

def string_is_number(a_string):
    
    pattern = re.compile(r'[0-9]+')
    
    return pattern.search(a_string) # Returns True or False

函数失败,因为您返回了非空字符串,这些字符串总是
True
。一个更微妙的问题是,你把任何至少有一个数字的东西称为数字。所以“我不是数字1”是一个数字。检查某个东西是否是“数字”的一个好方法是尝试转换它。在您的例子中,看起来您正在处理整数和浮点,它们都可以转换为
float
。因为字符串文本中不允许使用逗号,所以需要将其分解,但函数可以是

def string_is_number(a_string):
    try:
        float(a_string.strip(','))
        return True
    except:
        return False
    

该函数返回一个字符串,而不是BooLangeReX也匹配“LKJH45 6UZT”,而不是<代码> String,ISSO编号,如果字符串中有任何数字,则返回“true”,考虑完全倾倒该函数,只使用<代码> Tig.String,ISDigiE()/代码>。6381是写数字的正常方式。但是6,33,1呢?那是电话号码吗?12:22?我们可以尝试很多,但你介意解释一下它是否有效以及为什么有效吗?我喜欢你的答案,但部分解决方法是完全抛弃正则表达式,因为它只测试字符串是否有数字,而不是数字
str.isdigit()
是一个很好的替代品。但这并不是问题的一部分。我认为“1,23”或“1.23”应该被视为数字,所以
str.isdigit
不够……除非可能不够。刚意识到里面有逗号。
def string_is_number(a_string):
    try:
        float(a_string.strip(','))
        return True
    except:
        return False