我正在尝试查找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'”
答案 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,然后从循环外部将其返回。您需要在功能范围内对其进行定义,以使其可见。