Python if语句没有==运算符

时间:2018-02-08 22:25:29

标签: python if-statement modulo

有人可以向我解释这个功能是如何工作的吗?在if语句之后有return False时,我不知道for循环如何继续,我也不清楚。

def IsPrime(n):
    for x in range(2, int(n/2+1)):
        if not n % x:
            return False;
    return True

我不明白这段代码的第3行发生了什么。

3 个答案:

答案 0 :(得分:1)

简而言之 if nx 可分割时被if <expr>: pass 点击。

<强>背景

如果你写的东西:

not

True关键字还会评估真实性,如果表达式的真实性为not expression,则False<expr>,反之亦然。

Python检查True的{​​{3}}。真实性是与对象关联的布尔值。

FalseTrue分别具有FalseNone的真实性,而False具有真实性if someobject(因此我们可以检查{{} 1}}通常要进行隐式None检查。

list s,set s,dict s,tuple s等集合通常具有真实性True if和 only < / em>如果这些集合包含至少一个元素。所以空集合具有真实性False。这些集合包含的内容对于集合本身的真实性并不重要。

然后还有数字类型。通常,一个数字具有真实性False当且仅当它等于零时,所以负数且严格正数的数字具有真实性True

通用对象默认具有真实性True,但您可以覆盖__bool__魔术功能以返回不同的真实性,或者覆盖__len__(而不是__bool__ ),它将检查__len__是否大于零。

因此,如果nx是整数,那么我们会计算n % x,因此执行模数检查,n % x为零{且仅当n可以x分割时。{/ p>

现在not运算符将评估真实性。如果nx可分割,则not n % xTrue,否则not n % xFalse

如果ifn分割,则会x被触发。因此,主要测试检查n2之间的所有数字是否可以n/2+1分割,如果不是,则返回True,从可分割的那一刻起,它返回False

然而,我们可以通过迭代到n平方根来加速计算,并使两跳:

from math import sqrt

def IsPrime(n):
    if not n % 2:
        return False
    for x in range(3, int(sqrt(n)), 2):
        if not n % x:
            return False
    return True

答案 1 :(得分:0)

if之后的内容将被转换为bool类型,即使你输入一个整数,python也必须将其强制转换为bool,因为if }只能分支布尔值TrueFalse 现在python在True函数中评估除0到bool(number)之外的所有数字。所以基本上if not n%xif not ((n%x) != 0)是一样的。

示例x=2:循环内的代码将针对n的偶数值执行。

答案 2 :(得分:0)

在第3行中,您将n除以2 to n/2之间的整数,现在让我们看一下if not n%x:,如果x完全除n,则n%x返回0这被解释为False。现在not的{​​{1}}为False因此条件评估为True,而True函数返回IsPrime(n)。所以,任何数字False,其n2之间或n-1之间的因子不是素数,所以您的函数返回false,否则您的函数将评估为2 and n/2