有人可以向我解释这个功能是如何工作的吗?在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行发生了什么。
答案 0 :(得分:1)
简而言之 if
n
在x
可分割时被if <expr>:
pass
点击。
<强>背景强>:
如果你写的东西:
not
True
关键字还会评估真实性,如果表达式的真实性为not expression
,则False
为<expr>
,反之亦然。
Python检查True
的{{3}}。真实性是与对象关联的布尔值。
False
和True
分别具有False
和None
的真实性,而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__
是否大于零。
因此,如果n
和x
是整数,那么我们会计算n % x
,因此执行模数检查,n % x
为零{且仅当n
可以x
分割时。{/ p>
现在not
运算符将评估真实性。如果n
可x
可分割,则not n % x
为True
,否则not n % x
为False
。
如果if
被n
分割,则会x
被触发。因此,主要测试检查n
和2
之间的所有数字是否可以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
}只能分支布尔值True
或False
现在python在True
函数中评估除0到bool(number)
之外的所有数字。所以基本上if not n%x
与if 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
,其n
和2
之间或n-1
之间的因子不是素数,所以您的函数返回false,否则您的函数将评估为2 and n/2
。