функция python ничего не возвращает - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь решить эту проблему: учитывая последовательность целых чисел в виде массива, определите, можно ли получить строго возрастающую последовательность, удалив не более одного элемента из массива. Я придумал этот код:

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

Проблема в том, что когда я даю ввод, функция ничего не делает. Например, в интерактивной оболочке:

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

и если я не использую печать:

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

ничего не возвращает, должно возвращать True для этой специальной последовательности.

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Ваш код имеет две проблемы:

1) В строке 11:

if count == len(seq):

следует заменить на

if count == len(seq) -1:

2) В цикле for вы перебираете seq, но в цикле меняете seq. Это смущает питона.

Я проверил ваш код после исправления, и он, кажется, работал нормально. Вы можете подумать о более эффективном алгоритме.

0 голосов
/ 01 сентября 2018

Ваша проблема связана с "если - еще". Если вы добавите печать, как показано ниже, вы можете увидеть свою ошибку:

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

Ваша функция возвращает True или False, когда число равно len (seq). Из выходных данных видно, что они не равны len (seq), поэтому ничего не возвращает. Вам нужно добавить «еще» с возвратом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...