错误:类中没有定义递归函数的名称

2024-09-28 03:22:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我仍在学习Python,目前收到的大多数错误都是语法错误,尽管我现在收到的错误是

NameError: name 'mergeSort' is not defined

我似乎不明白为什么当在类外调用该方法时,该方法仍然有效,尽管一旦我将其包含在类中,该函数就会中断。在

class MergeStringList(list):

    def add(self, item):
        self.append(item)

    def mergeSort(self):
        print("Splitting ",self)
        if len(self)>1:
            mid = len(self)//2
            lefthalf = self[:mid]
            righthalf = self[mid:]

            mergeSort(lefthalf)
            mergeSort(righthalf)

            i=0
            j=0
            k=0

            while i < len(lefthalf) and j < len(righthalf):
                if lefthalf[i] < righthalf[j]:
                    self[k]=lefthalf[i]
                    i=i+1
                else:
                    self[k]=righthalf[j]
                    j=j+1
                    k=k+1

            while i < len(lefthalf):
                self[k]=lefthalf[i]
                i=i+1
                k=k+1

            while j < len(righthalf):
                self[k]=righthalf[j]
                j=j+1
                k=k+1
        print("Merging ",self)

    def printList(self):
        print(self)

mergeList = MergeStringList()
mergeList.add("stitch")
mergeList.add("daily")
mergeList.add("blade")
mergeList.printList()
mergeList.mergeSort()
mergeList.printList()

Tags: 方法selfaddlendef错误printmid
1条回答
网友
1楼 · 发布于 2024-09-28 03:22:15

递归调用需要在对象上调用,即self.mergeSort。更改这两行:

mergeSort(lefthalf) mergeSort(righthalf)

更新:

为了使代码起作用,您还应该更改方法签名,因为它现在不接受参数。也就是说

def mergeSort(self, input)

相关问题 更多 >

    热门问题