迭代,直到函数返回True用户定义的次数

2024-05-15 01:22:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个函数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]

Tags: 函数代码trueinputreturnif错误sqrt
3条回答

正如其他人指出的那样:

  • 您应该增加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。在

所以你应该有:

def isprime(n):
    x=2
    while x < sqrt(n) +1:
        if n % x == 0:
            return False
        else:
            x += 1
    return True

这条线:

primeList += 1

应该是:

^{pr2}$

相关问题 更多 >

    热门问题