这个Python代码中的错误是什么?

时间:2015-06-06 05:24:03

标签: python python-2.7 object

这是计算阵列频率的程序。在这里,我收到了全局名称" 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()

1 个答案:

答案 0 :(得分:2)

您的代码中存在两个问题:

  1. 您似乎希望mod成为静态方法。非静态方法应始终以self作为第一个参数。

  2. 即使mod是静态方法,您也需要将其称为abc.mod

  3. 解决问题的两种方法:

    1. 使mod成为一个全局函数而不是一个方法(只是在左边定义4个空格)
      1. 使用@staticmethod作为静态方法,并将其称为abc.mod
      2. ...
            tempr=abc.mod(self.a[i])
        ...    
        
        @staticmethod
        def mod(y):
            if y>=0:
                return y
            else:
                return y
        

        另请注意,如果mod

        -y可能会返回y < 0