两段质数判断代码看似相同却输出不同,我的代码问题出在哪?
质数判断代码的Bug分析
你的代码和朋友的代码核心差异在于else语句的缩进位置,这直接导致了逻辑错误:
代码对比
朋友的代码
#my friend's num = int(input()) if num > 1: for i in range(2,num): if (num % i) == 0: print(num,"is not a prime number") print(i,"times",num//i,"is",num) break else: print(num,"is a prime number") else: print(num,"is not a prime number")
你的代码
#mine num = int(input()) if num > 1: for i in range(2,num): if (num % i) == 0: print(num,"is not a prime number") print(i,"times",num//i,"is",num) break else: print(num,"is a prime number") else: print(num,"is not a prime number")
问题原因
- 朋友的代码用了Python特有的
for-else语法:else块和for循环对齐,只有当for循环完整遍历完所有元素、没有被break中断时,才会执行else里的代码。也就是说,只有确认所有2到num-1的数都不能整除num时,才会打印一次"是质数"。 - 你的代码里,
else块和循环内部的if对齐:每一次循环中,只要当前的i不能整除num,就会执行else里的打印语句。输入121时,i从2到10都无法整除121,所以会重复打印"121 is a prime number",直到i=11时触发if条件,才会打印非质数信息并终止循环。
修正后的代码
把else块移到和for循环同一缩进级别即可:
#修正后的代码 num = int(input()) if num > 1: for i in range(2,num): if (num % i) == 0: print(num,"is not a prime number") print(i,"times",num//i,"is",num) break else: print(num,"is a prime number") else: print(num,"is not a prime number")
此时输入121,输出就会和朋友的代码一致:
121 121 is not a prime number 11 times 11 is 121
内容的提问来源于stack exchange,提问作者najma
相关产品推荐
相关产品推荐

