我写了一个函数isprime(n),如果一个数是质数,则返回True;如果不是质数,则返回false。 我可以循环函数一个定义的次数,但我不知道如何迭代,直到它找到x个素数。我觉得我对For和While循环有很好的理解,但是对于如何将布尔返回值集成到循环中感到困惑。以下是我当前的代码和错误:
错误结果:
input:100
Traceback (most recent call last):
File "euler7.py", line 25, in <module>
primeList += 1
TypeError: 'int' object is not iterable
代码:
^{pr2}$编辑(包括更新的和有效的代码):
from math import sqrt
def isprime(n):
x = 2
while x < (sqrt(n) + 1):
if n % x == 0:
return False
else:
x += 1
return True
userinput = int(raw_input('input:'))
primeList = []
primeList.append(2)
i = 2
while len(primeList) != userinput:
if isprime(i):
primeList.append(i)
i += 1
else:
i += 1
print 'result:', primeList[-1]
正如其他人指出的那样:
primesFound
,而不是primeList
。在isprime()
函数有一个bug——返回9的True
。你需要sqrt(n) + 1
。在此外:
while
循环之外初始化i
;否则,您只需构建一个2的列表primesFound
。只需检查len(primeList)
。在我最讨厌的是:
userinput = int(sys.argv[1])
。在不能将and
int
添加到pythonlist
。你应该做primesFound += 1
来达到你想要的结果。在另外,你的
isprime
函数是错误的。它将为9返回True
。您应该为您的isprime
函数的while
循环执行while x < sqrt(n) + 1
。在所以你应该有:
这条线:
应该是:
^{pr2}$相关问题 更多 >
编程相关推荐