python 在循环内返回

问题描述 投票:0回答:4

如果我定义:

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 语句中没有返回任何内容,因为如果
False
不是字符串,它只返回
s
。那么,当 for 循环说“嘿,我没有看到
'x'
'X'
,所以我可以返回
True
?”时,它在“看”什么?”

python loops for-loop return
4个回答
2
投票

让我们只关注 if 语句

if c!='x' or c!='X':

这是一个包含两项的布尔表达式

  • c != 'x'
  • c != 'X'

当您使用

or
运算符时,如果任一术语的计算结果为 True,则整个表达式的计算结果为 True。如果表达式的计算结果为 True,则执行
if
语句的主体(在本例中为
return True
)。

这是

or
表达式(A 或 B)的标准真值表

 A or B     | A = False | A = True |
 ----------------------------------
| B = False | False     | True     |
| B = True  | True      | True     |

如您所见,如果两项均为 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
分支将始终被采用。

因此,当函数检查提供的字符串中的第一个字符时,它会

return True

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

  • 如果提供了
    str
    以外的其他内容
  • 如果提供空字符串 - 因为永远不会进入
    for
    循环。

1
投票

如果输入字符串中的所有字符不等于“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'))

0
投票

您在 for 循环中迭代字符串中的每个字符。所以它会关注每个角色。几乎你的循环正在寻找那些 if 语句何时为真。

但是,使用 or 如果其中一个为真,则整个条件评估为 true,因此使用 and 来确保这两个语句都为 true


0
投票

所以基本上你可以一次扫描一个字符串的字符,直到找到“x”或“X”,然后返回 false。如果您到达迭代字符串字符的循环末尾,那么这将是返回 True 的好机会,因为无论如何都没有找到“x”或“X”。

所以你的新代码看起来像这样:

def hasNoX_2(s): 如果类型!=str: 返回错误 对于 s 中的 c: 如果 c=='x' 或 c=='X': 返回错误 返回真

© www.soinside.com 2019 - 2024. All rights reserved.