如果我定义:
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
?"
答案 0 :(得分: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
让我们看看你的表达式如何评估每种输入类型
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 :(得分:1)
如果输入字符串中的所有字符都不等于'x'或'X',我建议您尝试实现True。
如果是这样,您只需使用以下代码:
{{1}}
答案 2 :(得分:0)
通过字符串中的每个字符迭代for循环。所以它正在看每个角色。当if语句为真时,你的循环正在寻找。
然而,使用或如果其中一个是真的,条件的整个条件评估为true,所以使用而不是确保两个语句都为真