Python,For循环计数器不更新?

时间:2015-07-31 19:02:08

标签: python python-2.7 python-3.x

我正在写一个简单的程序,它给出了所有素数的列表。不到一个给定的没有。 N. 我遇到一个问题,即函数check else子句中的for循环计数器primes_gen不会更新。但是,当我在没有函数的情况下使用相同的逻辑时,如第二个代码片段所述,一切正常。

应用逻辑: -

  1. n传递给函数<= 2时,会返回空白列表

  2. n> 2时,range(3,n,2)标识所有奇数。这是在第一个代码段中标记的第1步。

  3. 第二个for循环,标记为步骤2,检查是否为。可以被所有数字整除,小于i。如果是,则检查计数器增加+1,此循环以'继续'结束

  4. 如果检查保持为零直到for循环结束,则i将附加到列表中,并在返回完循环列表后最终返回。

  5. 问题: -

    - 我得到的结果是[2]这是错误的。所以我写了第3步,如第1段所示,我发现我的检查计数器在'continue'后没有更新,如输出中所示。如果在没有第二个代码片段中写入的函数的情况下应用相同的逻辑,则一切正常。 我无法解决此处出现的问题,为什么check continue之后没有更新?

    contents =['10']
    
    def prime_gen(n):
        num_list=[2]
        if n <=2:
            return []
        else:
            for i in range(3,n,2):    #step 1
                check=0
                for u in (2,i):       #step 2
                    if i%u == 0:
                        check += 1
                        continue
                print (check,i)     #step 3
                if check == 0:
                    num_list.append(i)
        return num_list
    
    if __name__== '__main__':
        for j in range(len(contents)):
                print (int(contents[j]))
                num_list = prime_gen(int(contents[j]))
                print (str(num_list).replace('[','').replace(']',''))
    

    输出

     10
     1 3
     1 5
     1 7
     1 9
     2
    

    预期ans是(当评论上面的第3步时)

    10
    2, 3, 5, 7
    

    没有功能的第二个代码

    contents = ['10']   #to-check
    
    
    for i in range(len(contents)):
        target = int(contents[i])
        num_list= [2]
        for j in range(3,target,2):
            check = 0
            for u in range(2,j):
            if j%u == 0:
                check +=1
                continue
        if check == 0:
            num_list.append(j)
    #print (num_list)
    print (str(num_list).replace('[','').replace(']',''))
    

    输出

    2, 3, 5, 7
    

1 个答案:

答案 0 :(得分:4)

您的问题需要一秒钟才能找到,但解决起来非常简单。问题出在你的第2步&#34;。你有一行

for u in (2,i):       #step 2

迭代u遍历您提供的元组中的所有变量,即2i。当然,i%i将为0,因此check将始终为真。你想要的是这个:

for u in range(2,i):       #step 2

根据您的意愿,这会在u2之间迭代i所有变量。

见这两个例子:

>>> i = 7
>>> for u in (2,i): print u,

2 7
>>> for u in range(2,i): print u,

2 3 4 5 6

基本上,您只是忘记在for循环中使用range,这会给您带来与您实际想要的截然不同的结果。