python循环内返回

python循环内返回,python,loops,for-loop,return,Python,Loops,For Loop,Return,如果我定义: def hasNoX_2(s): if type(s)!=str: return False for c in s: if c!='x' or c!='X': return True return False 然后输入hasNoX_2('Xenon'),返回True,我不确定原因。在第一个If语句中不返回任何内容,因为如果s不是字符串,它只返回FalseIf。所以,当for循环说“嘿,我没有看到'x'或'

如果我定义:

def hasNoX_2(s):
    if type(s)!=str:
       return False
    for c in s:
        if c!='x' or c!='X':
           return True
    return False

然后输入
hasNoX_2('Xenon')
,返回
True
,我不确定原因。在第一个If语句中不返回任何内容,因为如果
s
不是字符串,它只返回
False
If。所以,当for循环说“嘿,我没有看到
'x'
'x'
,所以我可以返回
True
”,它“看”的是什么?

如果输入字符串中的所有字符都不等于'x'或'x',我支持您尝试实现True

如果是这样,您可以简单地使用以下代码:

def hasNoX_2(s):

    if isinstance(s, str):
        return 'x' not in s.lower()

    return False

print(hasNoX_2('Xenon'))
print(hasNoX_2('eenon'))

如果输入字符串中的所有字符不等于“x”或“x”,我支持您尝试实现True

如果是这样,您可以简单地使用以下代码:

def hasNoX_2(s):

    if isinstance(s, str):
        return 'x' not in s.lower()

    return False

print(hasNoX_2('Xenon'))
print(hasNoX_2('eenon'))

在for循环中遍历字符串中的每个字符。所以它是在看每个角色。当这些if语句为真时,您的循环正在寻找的几乎就是


但是,使用或如果其中一个为true,则整个事件的条件计算结果为true,因此使用并确保这两个语句都为true

在for循环中遍历字符串中的每个字符。所以它是在看每个角色。当这些if语句为真时,您的循环正在寻找的几乎就是


但是,使用或如果其中一个为真,则整个事件的条件计算结果为真,因此使用并确保这两个语句都为真

if c!='x' or c!='X':
这是一个带有两个术语的布尔表达式

  • c!='x'
  • c!='X'
在使用
运算符时,如果任一项的计算结果为True,则整个表达式的计算结果为True。如果表达式的计算结果为True,则执行
If
语句的主体(在本例中为
return True

以下是
表达式(A或B)的标准真值表

如您所见,如果两个术语都为False,则结果为
False

让我们看看表达式对每种输入类型的计算方式

c                   | c != 'x' | c != 'X' | or expression |
----------------------------------------------------------
'x'                 | False    | True     | True          |
'X'                 | True     | False    | True          |
any other character | True     | True     | True          |
简而言之,表达式的计算结果将始终为True,并且始终采用
if
分支

因此,当函数检查所提供字符串中的第一个字符时,它将
返回True

此函数返回False的唯一方法是

  • 如果提供的不是
    str
  • 如果提供了空字符串-因为从未输入
循环的


    让我们只关注if语句

    if c!='x' or c!='X':
    
    这是一个带有两个术语的布尔表达式

    • c!='x'
    • c!='X'
    在使用
    运算符时,如果任一项的计算结果为True,则整个表达式的计算结果为True。如果表达式的计算结果为True,则执行
    If
    语句的主体(在本例中为
    return True

    以下是
    表达式(A或B)的标准真值表

    如您所见,如果两个术语都为False,则结果为
    False

    让我们看看表达式对每种输入类型的计算方式

    c                   | c != 'x' | c != 'X' | or expression |
    ----------------------------------------------------------
    'x'                 | False    | True     | True          |
    'X'                 | True     | False    | True          |
    any other character | True     | True     | True          |
    
    简而言之,表达式的计算结果将始终为True,并且始终采用
    if
    分支

    因此,当函数检查所提供字符串中的第一个字符时,它将
    返回True

    此函数返回False的唯一方法是

    • 如果提供的不是
      str
    • 如果提供了空字符串-因为从未输入
    循环的
    
    

因为您的逻辑测试是否至少有一个字母不是x。只要手动运行您的代码,您就会明白原因。它会在第一次写入时返回,因为对
if
语句的求值为True或False,这显然是真的。我已经修复了缩进。如果字符串中的任何字符不是“x”或“x”,代码将返回True。实际上,它将始终返回True-即使对于字符串“xxxxx”。它将返回False的唯一字符串是空字符串
“”
,因为您的逻辑测试是否至少有一个字母不是x。只要手动运行您的代码,您就会明白原因。它会在第一次写入时返回,因为对
if
语句的求值为True或False,这显然是真的。我已经修复了缩进。如果字符串中的任何字符不是“x”或“x”,代码将返回True。实际上,它将始终返回True-即使对于字符串“xxxxx”。它将返回False的唯一字符串是空字符串
”,如果您正确解释了OP的意图,则此字符串有效。然而,他们实际上在问为什么他们的代码总是返回True。见我的回答如果你正确解释了OP的意图,这是有效的。然而,他们实际上在问为什么他们的代码总是返回True。查看我的答案查看我的答案-if语句对所有字符的计算结果均为true。现在我看到,此人很可能必须使用并获得这两种情况。。但是函数名没有帮助。如果“字符串中没有X”或“字符串中有X以外的内容”,函数是否返回True?这就是为什么我要集中精力解释他们看到的结果。请看我的答案-if语句对所有字符的计算结果都是真的。现在我明白了,这个人很可能必须使用和获得这两种情况。。但是函数名没有帮助。如果“字符串中没有X”或“字符串中有X以外的内容”,函数是否返回True?这就是为什么我要集中精力解释他们看到的结果。谢谢你花时间做这件事!这是非常有用的。谢谢你花时间做这件事!这很有帮助。