为什么 class 中的函数没有 return 任何东西?
Why does a function in a class does not return anything?
出于练习的原因,我正在尝试实现一个 class SSM
,它代表 Static Sorted Map 在 python 中以实施方法
min_value(self)
: 求最小值
max_value(self)
: 求最大值
search(self, key)
: 查找列表中的一个元素
假定列表已排序。
这是 class 的代码:
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)
returns 由 __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
where s != e
.
中添加条件语句
出于练习的原因,我正在尝试实现一个 class SSM
,它代表 Static Sorted Map 在 python 中以实施方法
min_value(self)
: 求最小值
max_value(self)
: 求最大值
search(self, key)
: 查找列表中的一个元素
假定列表已排序。
这是 class 的代码:
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)
returns 由 __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
where s != e
.