python函数不返回任何内容

时间:2018-09-01 11:31:29

标签: python python-3.x function loops

我正在尝试解决这个问题:给定整数序列作为数组,确定是否可以通过从数组中删除不超过一个元素来获得严格递增的序列。 我想到了以下代码:

def almostIncreasingSequence(seq):
    count_2 = 0
    for element in seq:
        count = 0
        seq.remove(element)
        for i in range(len(seq)-1):
            if seq[i] < seq[i+1]:
                count += 1
            else:
                break
        if count == len(seq):
            return True
        else:
            seq = [element]+ seq
            count_2 += 1
    if count_2 == len(seq):
        return False

问题在于,当我输入内容时,该功能无法执行任何操作,例如在交互式shell中:

>>>print(almostIncreasingSequence([10,1,2,3,4,5]))
>>None

如果我不使用打印:

>>>almostIncreasingSequence([10,1,2,3,4,5])
>>>

它什么也不返回,对于这个特殊序列应该返回True。

2 个答案:

答案 0 :(得分:0)

您的问题与“ if-else”有关。如果您添加如下所示的打印,则会看到错误:

def almostIncreasingSequence(seq):
count_2 = 0
for element in seq:
    count = 0
    seq.remove(element)
    for i in range(len(seq)-1):
        if seq[i] < seq[i+1]:
            count += 1
            print("count1",count, len(seq))
        else:
            break
    if count == len(seq):
        return True
    else:
        seq = [element]+ seq
        count_2 += 1
        print("count2",count_2, len(seq))
if count_2 == len(seq):
    return False

例如,使用[1、2、3]调用函数,您将获得以下输出:

count1 1 2
count2 1 3
count1 1 2
count2 2 3

当计数等于len(seq)时,您的函数将返回True或False。您可以从输出计数中看到不等于len(seq),因此不返回任何内容。您需要在返回值中添加“ else”。

答案 1 :(得分:0)

您的代码有两个问题:

1)在第11行:

if count == len(seq):

应替换为

if count == len(seq) -1:

2)在for循环中,您遍历seq,但在循环中更改seq。这使python感到困惑。

我在更正后测试了您的代码,它似乎工作正常。 不过,您可能会考虑一种更有效的算法。