Python素数检查器

时间:2015-05-03 18:17:43

标签: python primes

我最近开始学习python(我的意思是,35分钟前发布时...)我已经写了一些东西,例如平方根生成器,阶乘生成器,斐波那契数生成器,质量检查器等。在我写完主要检查器之后,我想我会尝试修改它,这样它就不会检查指定范围内的每个数字,而是接受输入和仔细检查一下。

免责声明:如果我在Python方面做得更好,那么我只检查数字到sqrt(p),我会添加一个选项来检查它是否是偶数而不是2然后它自动返回它不是素数但是在我跑之前让我走吧! :)

CODE:

{
    "version": "0.1.0",
    "command": "PowerShell.exe",
    "isShellCommand": true,
    "args": [
        "${file}"
    ],
    "tasks": [
        {
            "taskName": "Build",
            "isBuildCommand": true,
            "showOutput": "always"
        },
        {
            "taskName": "Test",
            "isTestCommand": true,
            "showOutput": "always"
        },
        {
            "taskName": "Build, Test",
            "showOutput": "always"
        }
    ]
}

它适用于p = 2,但它是......

注意 - 显然代码是相应缩进的,这里没有正确格式化。

1 个答案:

答案 0 :(得分: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循环运行到一个中断,那么它会像正常一样中断。如果没有中断,则将执行else:子句。因此,它将进行基本的试验分割,如果数字通过了测试,它将打印"是一个素数"只有一次。您发布的代码将打印"是一个素数"对于循环的每次迭代。

编辑:请尝试以下代码来处理后续问题。

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()