为何这段Python质数判断代码会重复输出相同质数?
质数重复输出的原因及修复方案
问题根源
你的代码逻辑错在每次内层循环检测到当前i不能整除number时,就立刻打印number,而不是等所有i都检测完毕,确认没有任何数能整除它之后再打印。
举个例子,拿数字5来说:
- 内层循环i从2到4(共3次循环)
- 每次i=2、3、4时,5%i都不等于0,所以每次都会执行
print(number),于是5被打印了3次 - 同理,7的内层循环i从2到6(共5次),每次都不能整除,所以打印5次7
另外要纠正一个错误:你预期里的9不是质数,它能被3整除。你的代码里9只打印了1次,是因为当i=3时,9%3=0触发了break,内层循环提前结束,所以只在i=2时打印了一次9。
修复代码
利用Python的for-else语法(else块会在for循环正常结束,没有被break中断时执行),就能实现每个质数只打印一次:
nums = range(1, 11) for number in nums: if number > 1: for i in range(2, number): if number % i == 0: break else: # 内层循环完整跑完,说明没有找到能整除number的数,是质数 print(number)
运行这段代码,输出会是:
3 5 7
这才是1到10之间的正确质数列表。
另一种写法(用标记变量)
如果你对for-else不太习惯,也可以用一个布尔变量标记是否为质数:
nums = range(1, 11) for number in nums: if number > 1: is_prime = True for i in range(2, number): if number % i == 0: is_prime = False break if is_prime: print(number)
效果和上面的代码完全一致。
内容的提问来源于stack exchange,提问作者tryingmybest
相关产品推荐
相关产品推荐

