python在循环内返回

时间:2017-09-13 00:25:16

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

3 个答案:

答案 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,所以使用而不是确保两个语句都为真