我正在尝试编写一个函数,该函数输出在以7结尾的某个范围内的所有质数。但是,当我运行该程序时,它给了我很多相同数字的输出。我认为这与循环有关,但我不知道要解决什么。
lower=int(input('enter lower bound: '))
upper=int(input('enter upper bound: '))
for i in range(lower, upper + 1):
if i > 1:
for x in range(2, i):
if (i % x) == 0:
break
elif i%10==7:
print(i)
答案 0 :(得分:0)
for i in range(min(lower,2), upper + 1):
if i % 10 == 7:
for x in range(2, i):
if (i % x) == 0:
break
else:
print(i)
答案 1 :(得分:0)
目前elif
与此if
相关,因此当您测试17
的所有数字而不是17
的除数时,您将放入elif
并打印
if (i % x) == 0:
break
elif i%10==7:
print(i)
for-else
使用for-else
,如果循环未遇到break
,则循环进入else
(如果存在),则可以在此处添加条件
for i in range(lower, upper + 1):
if i > 1:
for x in range(2, i):
if (i % x) == 0:
break
else:
if i % 10 == 7:
print(i)
然后您可以想象,仅检查..7
个数字的质数,这将避免大量的计算。另外,要删除很快失效的if i>1
,请在下限使用max
,如果您将其设置为负值,它将从2开始,没有空运行,并在以下位置结束测试循环sqrt(i)
,因为在除数的平方根之后找不到除数
from math import sqrt
for i in range(max(lower, 2), upper + 1):
if i % 10 == 7:
for x in range(2, int(sqrt(i))):
if (i % x) == 0:
break
else:
print(i)