循环输出多次打印

时间:2020-03-29 17:07:41

标签: python

我正在尝试编写一个函数,该函数输出在以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)

2 个答案:

答案 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)