Python 向用户打印素数';s输入

Python 向用户打印素数';s输入,python,python-3.x,Python,Python 3.x,我正在制作一个快速程序,要求用户输入一个数字,然后输出该数字之前的所有素数: n=int(input("Enter a number: ")) a=2 if n<=1: n=int(input("Enter another number: ")) while a<n: for i in range(2,n): if a%i==0: break else: print (a)

我正在制作一个快速程序,要求用户输入一个数字,然后输出该数字之前的所有素数:

n=int(input("Enter a number: "))
a=2
if n<=1:
    n=int(input("Enter another number: "))
while a<n:
    for i in range(2,n):
        if a%i==0:
            break
        else:
            print (a)
            break
    a=a+1

可以从1开始循环

您的循环将从1开始,因此您将在输出中得到2

您有两个错误:

  • else
    缩进不正确,因此它与
    if
    而不是
    for
    (如果
    a
    下面的所有值都不是
    a
    的因素,而不是第一个不是
    a
    的因素,则要打印
    );及

  • 您的内部
    范围
    上升到
    n
    ,而不是
    a
    (因此始终包括
    a
    ,以及
    a%a==0

  • 这将有助于:

    for a in range(2, n):
        for i in range(2, a):
            if a % i == 0:
                break
        else:
            print(a)
    

    注意:我使用了一个
    for
    循环来替换外部
    while
    ,当您已经知道在哪里停止时,这通常会更好。您可以通过检查
    a
    的平方根,省去除
    2
    以外的偶数,使代码更高效,但我将把这些优化留给您

    您还有其他问题,9和15不是prime。在
    for
    循环中,您对
    if
    else
    都使用
    break
    ,这意味着您的
    for
    循环将只执行一次(
    for i=2
    )。简言之,您正在通过
    2
    检查可除性,奇数不会统计可除性。这就是为什么你会得到所有的奇数。
    for a in range(2, n):
        for i in range(2, a):
            if a % i == 0:
                break
        else:
            print(a)