问题:输出素数(缩进与循环)

python学习

输出前1000的素数

具体代码如下:

n = eval(input("请输入需要的素数:"))
l = []
for num in range(1,n+1):
    for i in range(1,num+1):
        if (num % i) == 0:
            l.append(i)
    if len(l) == 2:
        print(num)
    l = []

先来输出前10的素数表示我遇到的问题

刚开始我的想法是:

for num in range(1,11):         #一个循环表示质数
    for i in range(2,num):      #第二个循环做表示因数
        if num % i == 0:        #判断
            break               #结束循环
        else:
            print(num)          #输出质数

然而输出结果为:

3
5
5
5
7
7
7
7
7
9

出现了多个输出,最后通过研究发现是缩进出现了问题

for num in range(1,11):
    if num > 1:
        for i in range(2,num):
             if num % i == 0:
                 break
        else:                  #这里else缩进改变了
             print(num)

这样就使else与第二个for循环位于同级,使一个质数不会因为循环而不断输出。

但在找到缩进错误前,我尝试了另一种方法,就是使用列表,来统计数字的因数个数,列表长度为2,即因数个数为2,从而实现了对质数的判断,具体如下:

l = []                          #创建一个空列表
for num in range(1,100):        #循环
    for i in range(1,num+1):    
        if (num % i) == 0:    
            l.append(i)         #将因数加入列表
    if len(l) == 2:             #判断列表元素个数
        print(num)    

但是结果输出却只有一个数

最后我发现了错误:

l = []
for num in range(1,100):
    for i in range(1,num+1):
        if (num % i) == 0:
            l.append(i)
    if len(l) == 2:
        print(num)
    l = []                      #这里再将列表清空

与上一条代码相比,多了一个清空列表的操作,使列表l继续在循环中使用。

通过以上错误分析:

应当注意代码的缩进和循环中归0的操作。

posted @ 2022-09-29 15:12  牛鱼针  阅读(87)  评论(0)    收藏  举报