[英]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.