简体   繁体   中英

Why does a function in a class does not return anything?

For exercising reasons, I am trying to implement a class SSM which stands for Static Sorted Map in python in order to implement the methods

min_value(self) : find the minimum value

max_value(self) : find the maximum value

search(self, key) : to find an element in the list

The list is assumed to be sorted.

Here is the code for the 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

As you can see from the code, for the method search (self, K) I have an inner function __Bin_Search(s, e, K) which goes recursive on the left or right of the list in order to find the element (it is based on the Binary Search Algorithm). And so, I expect that the methods search (self, K) returns the result given by __Bin_Search since it is called in the last line.

My problem is that by using search(self, K) nothing is returned.

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

ssm.search(33)

Where is the error in the code? How can I fix that?

Your list always has a length greater than 0 so s will never equal e and therefore never reach a return statement. You need to add a conditional statement in __Bin_Search where s != e .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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