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

我对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, "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))