函数没有在python中调用

时间:2015-10-02 11:45:24

标签: python

您好我是Python编程的新手。我正在编写一个使用堆栈的python代码。 我的python代码中有两个函数isdesc()和poisonplant() 当我调用函数poisonplant时,还有另一个函数,但该函数未被调用

代码正确缩进

这是我的代码:

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))

我只叫毒药,我认为isdec会在毒药功能中被自动调用。

有人可以帮助我,为什么isdesc不会被称为

2 个答案:

答案 0 :(得分:4)

isdesc过早返回,没有查看所有相邻元素。它应该读

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

(我稍微修改了定义以将空列表视为降序。如果将空列表视为非降序,则您将进入循环,您假设列表为为空。)

答案 1 :(得分:0)

你的主要问题是你正在使用return,好像它会返回每次迭代,但实际上你只是在第一次返回时返回。如果任何排序错误,您可以改为return False,但检查列表是否按降序排序的更好方法是检查列表是否等于反向排序。

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

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