Python 素数检查器

Python prime checker

我最近开始学习 python(我的意思是,发帖时是 35 分钟前...)并且我写了一些东西,例如平方根生成器、阶乘生成器、斐波那契数生成器、素数检查器等。在我编写素数检查器之后,我想我会尝试修改它,而不是检查指定范围内的每个数字,它会接受输入并检查一个具体的。

免责声明:如果我在 Python 方面做得更好,那么我只会检查最大为 sqrt(p) 的数字,并且我会添加一个选项来检查它是否为偶数而不是 2 然后它会自动 returns 这不是素数,但让我走在我 运行 之前! :)

代码:

p = input("Enter a potential prime.")

for n in range (2,p):
    if p % n == 0:
        print(p, "equals", n, "x", p//n, "so it isn't a prime number")
        break
else:
    print(p, "is a prime number.")

它适用于 p = 2 但仅此而已...

注意 - 显然代码相应地缩进了,只是这里的格式不正确。

我看到了一些错误:您需要将用户输入转换为 int,此外您还需要将 else: 子句移至 for 循环下方而不是 if 语句下方。以下代码可满足您的需求:

p = int(input("Enter a potential prime."))
for n in range (2,p):
    if p % n == 0:
        print(p, "equals", n, "x", p//n, "so it isn't a prime number")
        break
else:
    print(p, "is a prime number.")

是的,这是正确的 - else: 不是 if 语句的一部分,它是 for 循环的一部分。此语法意味着如果您的 for 循环运行到中断,那么它会像往常一样中断。如果没有 break,则执行 else: 子句。因此,它将进行基本的试验除法,如果数字通过测试,它将只打印一次 "is a prime number"。您发布的代码将为循环的每次迭代打印 "is a prime number"。


编辑:针对您的后续问题尝试使用以下代码。

def primeChecker():
    # Function that keeps prompting for input, and checks if it's prime. Enter "quit"
    # to exit:
    user_input = input("Enter a potential prime (or type 'quit' to exit): ")
    if user_input == 'quit':
        return
    else:
        p = int(user_input)

    # Trial division algorithm:
    for n in range (2,p):
        if p % n == 0:
            print(p, "equals", n, "x", p//n, "so it isn't a prime number")
            break
    else:
        print(p, "is a prime number.")

    # Recursive function call:
    primeChecker()

# Start by calling the main function:   
primeChecker()