У вас на самом деле есть две отдельные проблемы в вашем коде - и вы правы, что одна из них с 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
.
В любом случае, я не могу сказать вам правильный способ исправить это, так как я не знаю, что вы пытаетесь сделать, но, надеюсь, это объясняет достаточно, что вы можете исправитьэто сам.