Python获取2-10素数集合的代码错误排查及修正请求
问题分析与代码修正
你的代码问题出在else的缩进位置,以及遗漏了对素数2的处理:
- 原代码中else和
if (i%j==0)绑定,意味着只要存在一个j不能整除i,就会把i加入集合,这会误把9这类数加进去(比如9%2≠0时就被添加了) - 当i=2时,内层
range(2,2)是空迭代器,循环不会执行,导致2没有被加入集合
修正后的代码(标记位方式)
prime = set() for i in range(2, 10): is_prime = True for j in range(2, i): if i % j == 0: is_prime = False break if is_prime: prime.add(i) print(prime) # 输出 {2, 3, 5, 7}
修正后的代码(for-else结构,贴合原逻辑)
prime = set() for i in range(2, 10): for j in range(2, i): if i % j == 0: break # 内层循环未被break中断时,说明i是素数 else: prime.add(i) print(prime) # 输出 {2, 3, 5, 7}
关键说明
- for-else结构的核心逻辑:当for循环完整遍历完所有元素、未被break中断时,才执行else块代码,完美匹配素数判断逻辑——找不到能整除i的j,说明i是素数
- 修正后既排除了9这类非素数,也补上了被遗漏的素数2,得到2到10之间的正确素数集合
内容的提问来源于stack exchange,提问作者Siddarth Iyer
相关产品推荐
相关产品推荐

