Неправильное возвращаемое значение, не вернул 'True', Python - PullRequest
0 голосов
/ 02 сентября 2018

Я ожидаю возвращения Истины, но получаю возвращение Нет.

Я добавил в код некоторые операторы print, чтобы помочь отладке. Он показывает, что оператор print ("Got True") выполнялся, поэтому я знаю, что код попал в правую ветвь кода непосредственно перед возвратом True, но по какой-то причине я получаю None. Однако «return False» отлично работает, когда я вставляю слово, которое не является палиндромом.

Спасибо за помощь.

def first(word):
    return word[0]

def last(word):
    return word[-1]

def middle(word):
    return word[1:-1]

def is_palindrome(word):
    print(word)
    if len(word) <= 1:
        print("Got True")
        return True
    else:
        print(len(word))
        if first(word) == last(word):
            is_palindrome(middle(word))
        else:
            print("Got False")
            return False

print(is_palindrome('allen'))
print("\n")
print(is_palindrome('redivider'))

Выход:

allen
5
Got False
False


redivider
9
edivide
7
divid
5
ivi
3
v
Got True
None

Ответы [ 3 ]

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

Вам необходимо вернуться в каждую ветку вашей функции, например ::10000

def is_palindrome(word):
    print(word)
    if len(word) <= 1:
        print("Got True")
        return True
    else:
        print(len(word))
        if first(word) == last(word):
            return is_palindrome(middle(word))  # **Added return**
        else:
            print("Got False")
            return False

Но вы можете упростить структуру, потому что если вы return, тогда вам не нужно предложение else:, потому что оно не может быть достигнуто, поэтому это можно записать:

def is_palindrome(word):
    print(word)
    if len(word) <= 1:
        print("Got True")
        return True

    print(len(word))
    if first(word) == last(word):
        return is_palindrome(middle(word))

    print("Got False")
    return False
0 голосов
/ 02 сентября 2018

Вы должны возвращать результат во всех возможных условных ветвях. Вы можете напрямую использовать оператор return или захватить результат функции is_palindrome в некоторой переменной и вернуть ее, если она сбивает с толку.

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

Даже в рекурсивной функции вы должны использовать оператор return для возврата значения:

   if first(word) == last(word):
        return is_palindrome(middle(word))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...