簡體   English   中英

While循環在Python中無法正常工作

[英]While loop not working properly in Python

所以我試圖找到第六個質數,而getPrime中的while循環無法正常工作。 它應該在count大於num時結束,但不是。 如果您能幫助我找出原因,那就太好了。

import math

def isPrime(num):
    if num == 1:
        return False
    if num % 2 == 0 and num > 2:
        return False
    for i in range(3, int(math.sqrt(num))+1, 2):
        if num % i == 0:
            return False
    return True

def getPrime(num):
    count = 1
    while count < num:
        for i in range(1, 20):
            #print "check"
            if isPrime(i):
                print "prime", i
                count += 1
                print "count", count
            else:
                continue
    print i
    return i

getPrime(6)

getPrime()函數中,當getPrime() isPrime(i)返回False ,您無需增加count變量。 因此, while count < num循環在此時卡住了。

更新:嗯,那是我看代碼的第一印象。 但是后來我注意到了嵌套循環。 所以我可能會誤讀發生了什么。

我現在建議的是逐步調試程序中的代碼,以便您可以自己查看發生了什么。 您是否有可用的Python調試器?

如果您有一個好的調試器並且知道如何使用它,則可以自己回答幾乎任何這樣的問題。 然后,您不必等待Stack Overflow上的朋友來猜測發生了什么問題! :-)

原因是因為您的range語句在while語句的主體內。 在另一種語言中,您可以使用do ...直到語句,但是在Python中,該方法只是添加條件break語句,例如,我已將您的代碼更正為:

def getPrime(num):
    count = 1
    for i in range(1, 20):
        if count > num: break
        if isPrime(i):
            highestPrime = i
            count += 1
    return highestPrime

簡化getPrime,不需要while循環:

def getPrime(num, r):
    gen = (i for i in r if isPrime(i))
    primes = zip(*zip(range(num), gen))[1]
    return primes[num-1] if len(primes) >= num else None

>>> print getPrime(6, xrange(1, 20))
13
>>> print getPrime(6, xrange(100, 500))
127

您只需要在for循環的末尾檢查count的值,這樣就總是可以得到1-20的完整范圍。 為什么范圍限制為20?

您根本不需要for循環。 使用while循環不斷發現的素數,直到你num他們。

嘗試類似:

def getPrime(num):
    count = 0 
    i = 1 
    highPrime = None 
    while count < num:
        if isPrime(i):
            count += 1
            highPrime = i 
        i += 1
    return highPrime

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM