Python查询区间质数代码重复输出相同数字的问题求助
解决区间质数查询代码的重复输出问题
你的代码出现重复输出的核心原因是:在内部循环的else分支里直接打印数字。对于一个质数来说,内部循环会遍历从2到该数减一的所有整数,每一次遇到不能整除的数都会触发一次打印,所以质数会被重复打印多次;甚至像15这种非质数,也会在i=2时因为15%2≠0而被打印一次,直到i=3时才break。
修改方案1:使用标志位判断
设置一个布尔变量标记当前数是否为质数,遍历完所有可能的因数后,再根据标志位决定是否打印:
number1 = int(input("Enter The First Number ")) number2 = int(input("Enter The Second Number: ")) for number in range(number1, number2 + 1): 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)
修改方案2:利用Python的for-else语法
Python中for循环的else分支会在循环没有被break中断时执行,刚好符合质数的判断逻辑(遍历完所有因数都没找到能整除的数):
number1 = int(input("Enter The First Number ")) number2 = int(input("Enter The Second Number: ")) for number in range(number1, number2 + 1): if number > 1: for i in range(2, number): if (number % i) == 0: break else: # 只有当循环正常结束(未触发break)时才执行 print(number)
优化建议(可选)
其实遍历因数时不需要到number-1,只需要到sqrt(number)即可,因为如果一个数有大于其平方根的因数,必然对应一个小于平方根的因数,这样能提升效率:
import math number1 = int(input("Enter The First Number ")) number2 = int(input("Enter The Second Number: ")) for number in range(number1, number2 + 1): if number > 1: is_prime = True for i in range(2, int(math.sqrt(number)) + 1): if (number % i) == 0: is_prime = False break if is_prime: print(number)
内容的提问来源于stack exchange,提问作者fatiheren
相关产品推荐
相关产品推荐

