Python:素数与range()

0 投票
3 回答
2082 浏览
提问于 2025-04-18 04:55

我正在学习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 个回答

1

看看这个函数:

def isPrime(n):
    for i in range(2, int(n**0.5) + 1):
        if n % i ==0:
            return False
    return True

逐个检查每一个可能的选项并不一定是最好的方法;要记住,范围不会超过这个数字的平方根。

另外要注意的是,你的输出只会打印出第一组因子。

1

a. 不,range(2,2)在Python中是一个空集合。

b. 一旦条件成立,包含循环的函数就会返回,循环就不会完成。这是因为return调用是在if语句的下一层。

c. 我很确定你想让elsefor对应。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部分就会执行,打印出这个数字是质数。

3

for .. else 的困惑

你似乎对 elsefor 循环中的用法感到困惑。

其实你并不是唯一一个这样想的人。

在 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 之后,当前代码部分的其他代码不会被执行(有一些例外,比如 tryfinally、上下文管理器等,但这些和你的代码无关)。

撰写回答