Проблема с функцией палиндрома в питоне - PullRequest
0 голосов
/ 26 июня 2018

У меня проблемы с онлайн-курсом по питону, в частности проблема с палиндромом Это инструкции , но функция должна быть без учета регистра и не видеть пробелов.Я думаю, что проблема в моих блоках возврата или моем потоке.Я думаю, что мне нужно использовать нижнюю функцию, но я, честно говоря, не уверен.

def student_func(x):
    for string in x:
        x.lower()
        y = x.replace(" ", "")
        if y[::-1]==y:
            return True
        else:
            return False

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Отказ от решения отрицает цель упражнения

ваш подход более или менее правильный.

  1. преобразование строки в стандартcase

  2. удалить пробел

  3. проверить, равен ли обратный результат исходной строке

Ошибка заключается в том, как вы используете Python API.

проверьте, что делает каждая из функций и что они возвращают.

хорошая идея - запустить help(function), чтобы увидеть, чтодокументация функции должна сказать об этом.

попробуйте help(x.lower) (примечание: не help(x.lower())) и посмотрите, что является возвращаемым значением.

0 голосов
/ 26 июня 2018

У вас на самом деле есть две отдельные проблемы в вашем коде - и вы правы, что одна из них с lower, а другая с обратным потоком.


Во-первых, x.lower()не изменяет x на месте.На самом деле, строки неизменны; Ничего изменяет их на месте.Если вы посмотрите интерактивные help или онлайн-документы , там написано:

Возвращает копию строки, в которой все символы в регистре [4] преобразованы в нижний регистр.

Итак, вам нужно сделать то же самое с lower, что вы делаете с replace: присвоить результат переменной и использовать это:

y = x.lower()
z = y.replace(" ", "")

Или вы можете повторно использовать одну и ту же переменную:

x = x.lower()

… или объединить два вызова вместе:

y = x.lower().replace(" ", "")

В качестве примечания, если вы не используете Python 2, вам следует подуматьхотите ли вы casefold вместо lower.Для английского это не имеет значения, но для других языков это может.


Между тем, вы делаете for string in x:, но затем игнорируете string.

Если xэто всего лишь одно слово, вы вообще не хотите его зацикливать.

Если x - это список слов, тогда for string in x: является правильным, но тогда вы должны использовать string внутри цикла, а не x.Кроме того, вы не можете просто return True или return False - это выйдет из функции, как только вы протестируете первое слово, то есть остальные из них никогда не пройдут проверку.Я не уверен, хотите ли вы вернуть True, если есть любые паллидромы, или если они все палиндромы, или если вы хотите вместо этого вернуть список логических значенийодного или чего, но вы не можете просто вернуть первое.

Вероятно, было бы намного яснее, если бы вы использовали более подходящие имена, например words вместо x и word вместо string.

В любом случае, я не могу сказать вам правильный способ исправить это, так как я не знаю, что вы пытаетесь сделать, но, надеюсь, это объясняет достаточно, что вы можете исправитьэто сам.

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