UnboundLocalError:赋值之前引用了局部变量“素数”

时间:2018-11-17 16:40:24

标签: python

我收到此错误

  

UnboundLocalError:赋值之前引用了本地变量'prime'

使用此代码查看数字是否为质数时。我该如何解决?

import math 

def is_prime(n):
    if n == 2:
        prime = 1
    if n % 2 == 0 or n <= 1:
        prime = 0

    sqr = int(math.sqrt(n)) + 1

    for divisor in range(3, sqr, 2):
        if n % divisor == 0:
            prime = 0

    if prime != 0:
        print("Prime")
    if prime == 0:
        print("Not prime")


is_prime(int(input("Number? ")))

1 个答案:

答案 0 :(得分:0)

如果所有条件均不成功,则永远不要设置prime。找到除数时,可以跳出for循环,如果从未发生过,可以使用else:来设置prime

此外,您将为2输入错误的答案。首先,您设置prime = 1,但随后n % 2 == 0将成功,因此您将在此处将其设置为0。使用elif进行第二次测试,因此在这种情况下将被跳过。另外,您可以使用else:进行其余操作,这样就不会在循环中浪费时间来获取较小的数字。

def is_prime(n):
    if n == 2:
        prime = True
    elif n % 2 == 0 or n <= 1:
        prime = False
    else:
        sqr = int(math.sqrt(n)) + 1

        for divisor in range(3, sqr, 2):
            if n % divisor == 0:
                prime = False
                break
        else: 
            prime = True

    if prime:
        print("Prime")
    else:
        print("Not prime")