Python查找第N个质数

4
我正在尝试找出第n个质数,不查看其他解决方案,我正在构建这个函数。
def Nth_Prime(Target):

    Primes = [2,3,5,7,11,13,17,19]
    Num = 20
    N=8
    Count=0

    while(N<Target):
        for i in Primes:
            if Num%i==0:
                Num+=1
                i=2
            else Num%i!=0:
                Count+=1
                if Count==len(Primes):
                    i=2
                    Primes.append(Num)
                    N+=1
                    print(Primes)
                    Num+=1
                    print(Count)

Nth_Prime(10002)

现在,虽然这可能不是最有效的方法,但我想要理解的是为什么我不能在每个循环中将变量I重置为数组的开头?该函数正确地找到23作为下一个质数,然后出现错误。
希望得到帮助。
编辑:我明白了!感谢所有人,现在需要稍微整理一下并使其更加美观。
def Nth_Prime(Target):

    Primes = [2,3,5,7,11,13,17,19]
    Num = 20
    N=8
    Count=0
    x=0

    while(N<Target):
        i = Primes[x]
        if Num%i==0:
            Num+=1
            x = 0
        elif Num%i!=0:
            Count+=1
            x+=1
            if Count==len(Primes):
                Primes.append(Num)
                N+=1
                Num+=1
                Count = 0
                x=0
    print(Primes[10000])

Nth_Prime(10002)

for循环在开始循环之前覆盖了变量的值。 - Vineeth Sai
你正在遍历一个列表,所以在下一次迭代中,你的 i 将是列表中的下一个值,无论之前你对它做了什么,最好使用 while 循环和索引来实现。 - Netwave
因为这就是Python中for循环的工作方式。你可以在循环内部对i进行任何操作,但当回到循环顶部时,它将被设置为range(或其他你正在迭代的对象)的下一个值。 - PM 2Ring
哦,那我在使用质数数组的同时如何使用 while 循环呢? - 78282219
顺便提一下,else Num%i!=0: 是无效的语法。你不能给 else 加条件。如果需要这样做,请使用 elif。但是,在那里没有必要加条件。如果 Num%i==0 的条件为假,则 Num%i!=0 必定为真,反之亦然。 - PM 2Ring
显示剩余2条评论
1个回答

3
无论你在循环中如何使用变量for循环都会重新初始化它并使用primes列表中的下一个值。这就是for循环的工作方式。
因此,你可以将for循环的第一行想象成:
for loop:
    i = Primes[x] # initialize
    ... # do stuff
    x+=1
    i = 'something' # HAS NO EFFECT for next iteration

1
最好把它作为评论发布,就像你已经做过的那样 ;) - Sheldore
2
这似乎是一个对于“为什么我不能在每次循环中将变量I重置到数组的开头”问题的恰当回答。我本来考虑写一个非常类似于这个答案的回复。 - Rory Daulton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接