You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中for循环与else搭配的逻辑疑问——质数代码解析

Python质数代码的逻辑解析

首先贴出原代码:

# Write a program to display all prime numbers within a range

start = 25
end = 50

for num in range(start, end + 1):
    if num > 1: # all prime #s are greater than 1
        for i in range(2,num):
            if (num % i) == 0:
                break
        else:
            print(num)

核心疑问解答

1. else语句的归属:属于第二个for循环,并非外部

这是Python独有的语法规则:for循环可以直接和else块配对。从缩进就能看出来,这个else和内层的for循环对齐,属于该循环的一部分,不是外层if或第一个for循环的附属。

2. 代码逻辑:遍历数字→循环内筛非质数→else处理质数

你的理解完全正确:

  • 外层for循环遍历25到50的每个数字num
  • 先过滤掉≤1的数(质数定义要求必须大于1)
  • 内层for循环从2到num-1逐个检查:如果num能被i整除,说明是合数,直接用break终止内层循环
  • 只有当内层循环从头到尾没触发过break(也就是num不能被任何2到num-1的数整除),才会执行else块,打印这个质数

3. break的作用:终止当前内层循环,且会阻止else执行

break只会终止它所在的当前内层for循环,不会影响外层循环的执行。但只要触发了break,内层循环就属于“被强制中断”,对应的else块就会被跳过——这正是区分质数和合数的核心逻辑:合数触发break跳过else,质数走完内层循环进入else打印。

运行流程示例

以num=29为例:

  1. 外层循环取到29,判断29>1,进入内层循环
  2. 内层循环i从2到28依次检查:29%2≠0、29%3≠0……直到29%28≠0
  3. 内层循环正常遍历完所有i,未触发break,执行else块,打印29

以num=26为例:

  1. 外层循环取到26,判断26>1,进入内层循环
  2. i=2时,26%2=0,触发break,直接终止内层循环
  3. 内层循环被中断,else块不执行,26不会被打印

内容的提问来源于stack exchange,提问作者Antonio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:10:40