使用for循环返回最多为n的素数列表

Pav*_*dau 3 python algorithm primes list

我刚刚学习了learing python,我正在尝试创建一个接受整数的简单函数,并返回从2到该整数的所有素数的列表.

我已经创建了函数,但代码似乎不起作用.我已经找到了解决方案,只针对更有效(和复杂)的方法(比如这个使用list comprehention查找素数)来解决这个问题,但这并不能帮助我找到错误.

def list_of_primes(n):
    primes = []
    for y in range (2, n):
        for z in range(2, y):
            if y % x == 0:
                continue
            else:
                primes.append(y)
        primes.sort()
        return primes
Run Code Online (Sandbox Code Playgroud)

代码有什么问题?

jpp*_*jpp 6

您的代码中存在多个错误.下面是您的算法的工作实现.

def list_of_primes(n):
    primes = []
    for y in range (2, n):
        for z in range(2, y):
            if y % z == 0:
                break
        else:
            primes.append(y)
    primes.sort()
    return primes

list_of_primes(20)

# [2, 3, 5, 7, 11, 13, 17, 19]
Run Code Online (Sandbox Code Playgroud)

说明

  • 缩进在Python中至关重要.
  • 您需要测试是否可y被整除z,而不是通过x尚未定义的变量.
  • 排序列表并在最后返回,两者都外部for循环之外.
  • 用于break在发现非素数时跳过数字.
  • else在内for循环上应用语句,而不是if/ else子句的一部分.

  • @jpp:我不能让那个传递:)只是`for z in range(2,int(y**0.5)+1)`否则你在浪费CPU能力寻找不存在的除数. (3认同)