我正在学习python并正在研究这个问题: Python - Prime Number exercise 这是我的问题: 当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
一个。它会是2%2吗?
湾如果数字是偶数,则会打印
A等于B x C
一旦条件为真,循环就会中断,还是会完成循环?
℃。循环外的其他东西?如果声明对应怎么办? (我知道它是if n % x == 0:
)但是看起来好像它在循环之外?
我试图运行它,并理解,但后来我感到困惑。
答案 0 :(得分:3)
您似乎对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
之后,代码的同一部分中不再执行任何代码(例如try
,finally
,上下文管理器等,但这与您的代码无关)。
答案 1 :(得分:1)
一个。不,range(2,2)
是Python中的空集。
湾一旦条件为真,包含循环的函数将返回,循环将不会完成。这是因为return
调用是if
语句的一个级别。
℃。我很确定您希望else
与for
对应。如果else
循环正常终止(即没有for
),Python就会使用... else语法来执行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
编辑:
当然,我可以解释整个循环。这个想法是这样的:对于两个和n之间的每个数字,检查该数字是否是x的因子。如果是,则n不是素数,我们杀死循环。但是,如果我们一直到循环结束,我们知道n是素数,因为它没有2和n之间的因子。然后,else子句启动,并打印出该数字为素数。
答案 2 :(得分:1)
看看这个功能:
def isPrime(n):
for i in range(2, int(n**0.5) + 1):
if n % i ==0:
return False
return True
迭代每个可能的选项并不一定是最好的选择;请记住,范围永远不会超过数字的平方根。
另外值得注意的是,您的输出只会打印第一组因子。