Python素数函数问题
我对python非常陌生;我两天前才开始。在网上查看了一些设计之后,我尝试使用此函数来确定一个数字是否为素数:Python素数函数问题,python,function,Python,Function,我对python非常陌生;我两天前才开始。在网上查看了一些设计之后,我尝试使用此函数来确定一个数字是否为素数: def isprime(n): if n == 1: print("1 is not a prime.") if n == 2: print("2 is a prime number.") for x in range(2, int(n)): if n%x == 0: print(n, "i
def isprime(n):
if n == 1:
print("1 is not a prime.")
if n == 2:
print("2 is a prime number.")
for x in range(2, int(n)):
if n%x == 0:
print(n, "is a composite number.")
break
else:
print(n, "is a prime number.")
break
isprime(int(input("Enter a number.")))
isprime(int(输入(“输入一个数字”))
是这样我就可以以.py格式运行文件了。
但是,虽然它运行时没有任何错误,但它返回的是误报。例如,它声明45是一个素数。我做错了什么?问题在于代码的逻辑。缩进在Python中起着重要的作用。如果按以下方式更改代码,则代码工作正常:
def isprime(n):
if n == 1:
print("1 is not a prime.")
if n == 2:
print("2 is a prime number.")
prime = True
for x in range(2, int(n)):
if n%x == 0:
print(n, "is a composite number.")
prime = False
break
if prime:
print(n, "is a prime number.")
在第一次迭代后,您将中止
for x in range
循环的迭代,因为if
-语句的两个分支都包含break
删除else
-分支并使用构造:
def isprime(n):
if n == 1:
print("1 is not a prime.")
if n == 2:
print("2 is a prime number.")
for x in range(2, int(n)):
if n%x == 0:
print(n, "is a composite number.")
break
else:
print(n, "is a prime number.")
您的
else
缩进不正确(并且有一个错误的break
),因此函数返回得太早。看看您实际在做什么。最后测试余数的唯一数字是2
。可以使用range(2,n)
而不是range(3,int(n**0.5)+1)
;您已经测试了n==2
,并且没有必要尝试高于floor(sqrt(n))
。