我正在写一个简单的程序,它给出了小于给定的N的所有素数的列表。
我面临的问题是函数primes_genelse子句中的for循环计数器check没有更新。不过,当我使用相同的逻辑而不使用函数时,就像第二个代码片段中提到的那样,一切都是正确的。在
逻辑适用范围:-在当传递给函数的n是<= 2时,返回空白列表
当n是> 2,range(3,n,2)标识所有奇数。这是第一个代码段中标记的步骤1。
第二个for循环用步骤2标记,检查no.是否可以被小于i的所有no整除。如果是,则检查计数器递增+1,并且此循环以“continue”结束
如果check在for循环结束前保持为零,那么i将追加到列表中,并返回循环完成后的finally after。
在问题:-在
-我得到的结果是[2],这是错误的ans。所以我写了第3步,正如第一个片段中所标记的,我发现我的检查计数器在“continue”之后没有更新,如输出所示。当在第二个代码片段中没有函数的情况下应用相同的逻辑,则一切正常。
我不知道这里出了什么问题,为什么check在^{之后不更新?在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(']',''))
输出
^{pr2}$
预期的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