繁体   English   中英

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

[英]Why does a function in a class does not return anything?

出于锻炼的原因,我正在尝试实现一个SSM ,它代表 Python 中的静态排序映射,以实现这些方法

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)

代码中的错误在哪里? 我该如何解决?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM