我相对较新的Python,并试图构建一个函数来检查素数,因为我认为这将是一个很好的入门项目,但我的代码将所有内容作为素数返回,所以它显然出了问题。我觉得这是一种效率低下的方法,但我想先了解如何做到这一点。到目前为止,这是我的代码:
def Prime(n):
if n == 1 or n == 2 or n == 3:
print("This number is prime.")
else:
i = n - 1
while i > 0:
if n % i == 0:
break
print("This number is not prime.")
else:
i = i - 1
print("This number is prime.")
def Main():
n = int(input("What is the number you'd like to check?"))
Prime(n)
answer2 = input("Thank you for using the prime program.")
Main()
答案 0 :(得分:1)
从数学上讲,你可以只检查0和sqrt(n)之间的所有int来判断一个数字是否为素数或者不是逻辑,你缺少负数处理加上其他东西请看下面的代码:
def prime(n):
n = abs(n)
if n<4: return True
i = int(sqrt(n))
while i > 1:
if n % i == 0: return False
i -= 1
return True
另外你应该将它添加到你的导入
from math import sqrt
答案 1 :(得分:0)
解释逻辑缺陷并不容易,但您可以看到以下代码
def Prime(n):
if n == 1 or n == 2 or n == 3:
print("This number is prime.")
else:
i = n - 1
while i > 0:
if i == 1 or n == 2 or n == 3:
print("This number is prime.")
break
if n % i == 0:
print("This number is not prime.")
break
else:
i = i - 1
def Main():
n = int(input("What is the number you'd like to check? "))
Prime(n)
print("Thank you for using the prime program.")
Main()
答案 2 :(得分:0)
以下是您的计划,其中包含一些更改:
def Prime(n):
if n == 1 or n == 2 or n == 3:
print("This number is prime.")
else:
i = n - 1
while i > 1:
if n % i == 0:
print("This number is not prime.")
return
i = i - 1
print("This number is prime.")
return
def Main():
n = int(input("What is the number you'd like to check? "))
Prime(n)
print "Thank you for using the prime program."
Main()
首先,i
现在比较i > 1
而不是0,因为每个数字都可以被1整除,因此如果使用了原始条件,所有数字都将是素数。
其次,break
语句被return
替换。尽管break
可行,但该程序在这种情况下需要进行更多修改,因为素数的消息总是在末尾打印(而不是主要消息)。此外,在打印之后移动了return
语句以实际获得打印。更重要的是,数字是素数的消息被移到while
之外 - 否则消息将在每次迭代时打印。
我还删除了else
,并且i
在while
循环中正在递减,这对我来说是一个更具可读性的选择。
最后,我认为你的最后一句话应该是一个输出,它现在是。我还在用户提示消息中添加了一个空格,以便显示更好的数字。
答案 3 :(得分:0)
好的,首先,您的代码永远不会打印&#34;这个数字不是素数。&#34;因为你在它之前发表了一个休息声明。您可能希望将这两行反转为:
print("This number is not prime.")
break
此外,行i = n - 1
应更改为i = n
,以便您检查起始编号,而不仅仅是数字小于它。因此,如果您现在尝试代码,您会注意到您正在打印您检查的每个数字是否为素数,而不仅仅是输入值。要使用代码结构解决此问题,请使用标志。例如:
def Prime(n):
flag = true
if n == 1 or n == 2 or n == 3:
print("This number is prime.")
else:
i = n
while i > 0:
if n % i == 0:
print("This number is not prime.")
break
else:
i = i - 1
if flag == true:
print("This number is prime.")
标志检查应该在循环之外。