我正在写一个简单的程序,它给出了所有素数的列表。不到一个给定的没有。 N.
我遇到一个问题,即函数check
else子句中的for循环计数器primes_gen
不会更新。但是,当我在没有函数的情况下使用相同的逻辑时,如第二个代码片段所述,一切正常。
应用逻辑: -
当n
传递给函数<= 2
时,会返回空白列表
当n
为> 2
时,range(3,n,2)
标识所有奇数。这是在第一个代码段中标记的第1步。
第二个for循环,标记为步骤2,检查是否为。可以被所有数字整除,小于i
。如果是,则检查计数器增加+1
,此循环以'继续'结束
如果检查保持为零直到for循环结束,则i
将附加到列表中,并在返回完循环列表后最终返回。
问题: -
- 我得到的结果是[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
答案 0 :(得分:4)
您的问题需要一秒钟才能找到,但解决起来非常简单。问题出在你的第2步&#34;。你有一行
for u in (2,i): #step 2
迭代u
遍历您提供的元组中的所有变量,即2
和i
。当然,i%i
将为0,因此check
将始终为真。你想要的是这个:
for u in range(2,i): #step 2
根据您的意愿,这会在u
和2
之间迭代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
,这会给您带来与您实际想要的截然不同的结果。