这是计算阵列频率的程序。在这里,我收到了全局名称" mod"没有定义。看看:: tempr = mod(self.a [i]),我正在使用它并且函数mod已经用不同的函数编写。请帮我纠正这个功能。
class abc:
def __init__(self):
self.n=0
self.a=[]
def read(self):
self.n=input()
for i in range(0,self.n):
temp=input()
self.a.append(temp)
def freq(self):
max=self.a[0]
for i in range(0,self.n):
tempr=mod(self.a[i])
if tempr>max:
max=tempr
tempa=[0]*(2*(max)+1)
bb=[0]*self.n
for j in range(0,self.n):
if(self.a[j]>=0):
tempa[self.a[j]]=tempa[self.a[j]]+1
else:
tempa[max-self.a[j]]=tempa[max-self.a[j]]+1
for i in range(0,self.n):
if bb[self.a[i]]==0:
if self.a[i]>=0:
print "%d : %d " % (self.a[i],tempa[self.a[i]])
bb[self.a[i]]=bb[self.a[i]]+1
else:
print "%d : %d " % (self.a[i],tempa[max-self.a[i]])
bb[self.a[i]]=bb[self.a[i]]+1
def mod(y):
if y>=0:
return y
else:
return y
k=abc()
k.read()
k.freq()
答案 0 :(得分:2)
您的代码中存在两个问题:
您似乎希望mod
成为静态方法。非静态方法应始终以self
作为第一个参数。
即使mod
是静态方法,您也需要将其称为abc.mod
。
解决问题的两种方法:
mod
成为一个全局函数而不是一个方法(只是在左边定义4个空格)或
@staticmethod
作为静态方法,并将其称为abc.mod
:...
tempr=abc.mod(self.a[i])
...
@staticmethod
def mod(y):
if y>=0:
return y
else:
return y
另请注意,如果mod
-y
可能会返回y < 0