user2762315
user2762315

Reputation: 555

function is not getting called in python

Hi i am new to Python programming . I am writing a python code which uses stack. There are two function in my python code isdesc() and poisonplant() When i have called the function poisonplant in there is another function but that function is not get called

Code is indented properly

Here is my code:

def isdesc(arr):
    if len(arr) == 0:
        return False
    for i in range(0,len(arr)):
        if arr[i+1] < arr[i]:
            return True
        else: 
            return False


def poisonplant(expr):
    count=0
    pdb.set_trace()
    while not isdesc(expr):
        s.push(expr[0])
        for i in range(0,len(expr)):
            if expr[i+1] < expr[i]:
                s.push(expr[i+1])

    count+=1
    del expr[:]

    for each_item in s.items:
        a=s.pop()
        expr.insert(0,a)

return count


input1=[6,5,8,4,7,10,9]
print(poisonplant(input1))

I have only called poisonplant and i think isdec is automatically get called inside poison function.

Can someone help me in this why isdesc is not get called here

Upvotes: 0

Views: 139

Answers (2)

chepner
chepner

Reputation: 531055

isdesc is returning too soon, without looking at all the adjacent elements. It should read

 def isdesc(arr):
     for i in range(len(arr)-1):
         if arr[i] < arr[i+1]:
             return False
     return True

(I've slightly modified the definition to treat empty lists as descending. If you treat an empty list as non-descending, you'll enter the loop, where you are assuming the list is not empty.)

Upvotes: 4

SuperBiasedMan
SuperBiasedMan

Reputation: 9969

Your main problem is that you're using return as if it will return each iteration, but you're actually just going to return on the very first one. You could instead return False if any of the sorts are wrong, but a better way to check if the lists are sorting in descending order is to check if the list is equal to a reverse sort of itself.

def isdesc(arr):
    if len(arr) == 0:
       return False

    return arr == sorted(arr, reverse=True)

Upvotes: 0

Related Questions