Python:素数与range()
我正在学习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乘以C
当条件成立时,循环会停止吗,还是会继续执行完所有的循环?
c. else是在循环外面吗?它对应哪个if语句?(我知道是if n % x == 0:
)但为什么看起来它好像在循环外面?我试着运行代码并理解,但后来我就搞糊涂了。
3 个回答
看看这个函数:
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
的语法,如果for
循环正常结束(也就是说没有遇到break
),就会执行else
部分的内容。
换句话说,我觉得你想要的是这个:
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
部分就会执行,打印出这个数字是质数。
for .. else 的困惑
你似乎对 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
必须在函数内部使用,如果在控制台上使用 return
会导致错误。
range(2, 2) == []
在 Python 控制台上试试:
>>> range(2, 2)
[]
return
return
会结束当前的函数或整个模块的运行。所以在 return
之后,当前代码部分的其他代码不会被执行(有一些例外,比如 try
、finally
、上下文管理器等,但这些和你的代码无关)。