我最近开始学习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,但它是......
注意 - 显然代码是相应缩进的,这里没有正确格式化。
答案 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()