python—为什么类中的函数不返回任何内容?

bvpmtnay  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(312)

出于锻炼的原因,我正在尝试实现一个类 SSM 它代表python中的静态排序Map,用于实现这些方法 min_value(self) :查找最小值 max_value(self) :查找最大值 search(self, key) :查找列表中的元素
假定列表已排序。
下面是该类的代码:

class SSM:
    def __init__(self, A):
        self.sorted_list = A[:] #the list, assume A is sorted

    def min_value(self):
        return self.sorted_list[0]

    def max_value(self):
        return self.sorted_list[-1]

    def search(self, K): 

        def __Bin_Search(s, e, K): # local function # implementation pseudocode
            if s == e:
                if self.sorted_list[s] == K:
                    return True, s # return True and position
                else:
                    return False

                x =  math.ceil((s+e)/2)
                if self.sorted_map[x] == K:
                    return  True, x # return True and position

                if self.sorted_list[x] > K:
                    return __Bin_Search(s, x-1, K) # go recursive
                else:
                    return __Bin_Search(x+1, e, K) # go recursive

        return __Bin_Search(0, len(self.sorted_list), K) # call __Bin_Search

正如您从代码中看到的,对于方法 search (self, K) 我有一个内在的功能 __Bin_Search(s, e, K) 它在列表的左侧或右侧递归以查找元素(它基于二进制搜索算法)。因此,我希望这些方法 search (self, K) 返回由给定的结果 __Bin_Search 因为它是在最后一行调用的。
我的问题是通过使用 search(self, K) 一无所获。

A = [45, 33, 36, 30, 27, 40, 16, 27]
A.sort()
ssm = SSM(A)

ssm.search(33)

代码中的错误在哪里?我怎样才能解决这个问题?

h4cxqtbf

h4cxqtbf1#

您的列表长度始终大于 0 因此s永远不会等于e,因此永远不会到达返回语句。您需要在中添加条件语句 __Bin_Search 哪里 s != e .

相关问题