我正在学习Python并正在研究这个问题: Python - 素数练习 这是我的问题: 当 n=2 时,范围将为 (2,n),换句话说,范围在 2 和 2-1=1 之间。
for x in range(2, n):
if n % x == 0:
print("{} equals {} x {}".format(n, x, n // x))
return False
else:
print(n, "is a prime number")
return True
a.会是2%2吗?
b.如果数字是偶数,则会打印
A 等于 B x C
一旦条件为真,循环会中断还是会完成循环?
c. else 是在循环之外吗? if 语句是否对应呢? (我知道它是
if n % x == 0:
)但为什么它看起来像是在循环之外?
我尝试运行它并理解,但后来我感到困惑。
您似乎对
else
感到困惑,它是 for
循环的一部分。
你不是唯一一个。
在Python中,
for
循环可能在最后的else
部分,除非有break
语句,否则在所有循环完成后执行。是的,这不是很直观。
因此,您应该将
else
部分阅读为 for
循环的最后一部分。
def looptest(loops=5):
for i in range(loops):
print "i", i
if i == 3:
print "in if"
return
else:
print "in else of the loop"
并尝试循环== 5:
>>> looptest(5)
i 0
i 1
i 2
i 3
in if
对于循环数 2,我们不期望返回,我们将运行循环的
else
:
>>> looptest(2)
i 0
i 1
in else of the loop
注意,
return
必须在函数内,尝试在控制台返回会导致错误。
在Python控制台上尝试:
>>> range(2, 2)
[]
return 结束当前函数或在整个模块中运行。因此,在
return
之后,代码同一部分中不再执行任何代码(除了 try
、finally
、上下文管理器等例外,但这与您的代码无关)。
看一下这个函数:
def isPrime(n):
for i in range(2, int(n**0.5) + 1):
if n % i ==0:
return False
return True
迭代每一个可能的选项并不一定是最好的选择;请记住,范围永远不会大于数字的平方根。
还值得注意的是,您的输出将仅打印第一组因子。
a.不。
range(2,2)
在 Python 中是一个空集。
b.一旦条件为真,包含循环的函数就会返回,并且循环不会结束。 这是因为
return
调用比 if
语句低一级。
c.我很确定您希望
else
与 for
相对应。 Python 有这个 for...else 语法,如果 else
循环正常终止(即没有 for
),则执行 break
子句的内容。
换句话说,我想你想要这个:
for x in range(2, n):
if n % x == 0:
print("{} equals {} x {}".format(n, x, n // x))
return False
else:
print(n, "is a prime number")
return True
编辑:
当然,我可以解释整个循环。 这个想法是这样的:对于 2 到 n 之间的每个数字,检查该数字是否是 x 的因子。 如果是,那么 n 不是素数,我们就终止循环。 然而,如果我们一直到循环结束,我们就知道 n 是素数,因为它没有 2 和 n 之间的因数。 然后 else 子句启动,并打印该数字是质数。
fermets 公式是最简单的一种,但由于使用幂计算,可能会存在内存效率问题(除平方根法和 AKS 法外)
def prime(n):
# you can replace the 2 with any coprime number
if (n < 2): return False;
if 2**(n-1)%(n) == 1: return True;
return False
def range_primes(r):
p = [2];
for i in range(1, r):
if prime(i) == True:
p.append(i);
return p;