赋值前引用局部变量“ y”

时间:2019-07-16 21:40:52

标签: python python-3.x

我正在尝试查找2D列表的质数,但遇到此错误: “分配前已引用局部变量'y'” 我该如何解决?

在编写此代码之前,我试图解决不带功能的问题,但是还有另一个问题要问。

a=[[1,2,3],[4,7]]
###
def prime_detection (n):
    for i in range(2,n):
        y=False
        if n%i==0:
            break
        else:
            y=True

    return y
###
d=[]
for i in a:
    g=[]
    for j in i:
        if prime_detection(j)==True:
            g.append(j)

    d.append(g)

我希望在“如果prime_detection(j)== True”中显示结果,但是我却遇到“在分配之前引用了局部变量'y'”

3 个答案:

答案 0 :(得分:1)

n <= 2时,序列range(2, n)为空,因此没有执行分配给y的行。

我怀疑你的意思是这样的

def prime_detection(n):
    for i in range(2, n):
        if n%i==0:
            return False
    return True

或更简单:

def prime_detection(n):
    return all(n%i for i in range(2, n))

答案 1 :(得分:0)

在函数开始时定义y = False
这样,它将是整个函数都可以访问的变量,除非在循环中更改其值,否则它将作为False返回。

您可能还希望将if语句用于具有自己的return值的1和2,这是因为它们的数学行为是质数(前者由于棘手而不是一个-很快放,后者很奇怪)。即:

if n==1:
    return False
if n==2:
    return True
#rest of script should be fine...

答案 2 :(得分:-2)

您要在for循环中定义y,然后从循环外部将其返回。您需要在功能范围内对其进行定义,以使其可见。