质数判断代码输出重复矛盾结果,请求排查错误原因
质数判断代码的错误分析
我正在实现判断给定数字是否为质数的功能,例如输入5时,应输出“5 is a prime”。但运行代码后得到了多次相互矛盾的输出。
我的代码如下:
num = int(input("Enter the number: ")) 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") # if input number is less than # or equal to 1, it is not prime else: print(num,"is not a prime number")
输入5后的输出为:
Enter the number: 5 5 is a prime number 5 is a prime number 5 is a prime number 5 is not a prime number
上述输出显示5被三次判定为质数、一次判定为非质数,请问我的代码存在什么错误?
错误原因分析
- 循环内的else分支频繁触发打印:你写的
else是和if (num % i) == 0绑定的,每次循环中只要当前i无法整除num,就会执行一次质数判定的打印。输入5时,循环会遍历i=2、3、4,这三个数都不能整除5,所以会连续打印三次“5 is a prime number”。 - for...else的逻辑完全颠倒:Python里
for...else结构中,else分支会在循环**正常结束(没有被break打断)**时执行,这说明遍历完所有可能的因数都没找到能整除num的数,num应该是质数,但你这里却打印了“is not a prime number”,逻辑完全搞反了。
修正后的代码
方案一:用标志位判断
num = int(input("Enter the number: ")) if num > 1: is_prime = True for i in range(2, num): if num % i == 0: print(num, "is not a prime number") is_prime = False break if is_prime: print(num, "is a prime number") else: print(num, "is not a prime number")
方案二:正确利用for...else结构
num = int(input("Enter the number: ")) if num > 1: for i in range(2, num): if num % i == 0: print(num, "is not a prime number") break else: # 循环正常结束,无因数,是质数 print(num, "is a prime number") else: print(num, "is not a prime number")
内容的提问来源于stack exchange,提问作者Anusha_Wilson
相关产品推荐
相关产品推荐

