为什么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