2017-01-09 11 views
0

Это мой код в настоящее время:Мне нужна помощь в моей палиндромности программе в питоне

def main(): 
     list1 = [(x) for x in input()] 
     if (list1 == list1.reverse()): 
      print("The sentence is a palindrome.") 
     else: 
      print("The sentence is not a palindrome.") 

    main() 

И это не работает. Я сделал следующие настройки, когда я нашел их на форумах, и она работала:

def main(): 
    list1 = [(x) for x in input()] 
    if (list1 == list1[::-1]): 
     print("The sentence is a palindrome.") 
    else: 
     print("The sentence is not a palindrome.") 

main() 

Мой вопрос, почему не первая версия работы? Он всегда печатает: предложение не является палиндром.

+0

'list.reverse()' возвращает 'None', потому что список отменяется на месте. –

+2

@ TigerhawkT3: 'reverseed()' возвращает итератор, и равенство не будет проверять содержимое, только если они являются одним и тем же объектом (даже «reverse» (l) == reverseed (l) 'is' False', поскольку они два отдельных итератора). –

+0

'L.reverse' отменяет список на месте. Если вы попытаетесь присвоить его переменной, вы получите 'None'. –

ответ

4

list1.reverse() работает на месте. Он переворачивает list1 и возвращает None, так что вы сравниваете список None и это всегда False ...

Второй код возвращает обратный копию из list1 как list так как списки сравниваются, и это работает.

Примечание: еще одна ловушка будет сравниваться с list1 == reversed(list1). Это будет работать в python 2, но не в python 3, поскольку reversed был превращен в итерируемый.

стороны: не делать list1 = [(x) for x in input()] но только list1 = list(input())

(или, как некоторые хорошо комментатора предложил, работать непосредственно с str типом, нет необходимости преобразовывать в строки на всех, [::-1] операции также применяется на струнах, так просто измените на list1 = input() во втором фрагменте кода)

+1

ok, сделано! Я просто не хочу «красть» идеи от других (я бы никогда не преобразовал строки, чтобы перечислить себя, просто был введен в заблуждение кодом OP :)) –

+1

да, если люди, которые не любят вас, читают это, они В любом случае, вы будете высоко ценить вас :) –