2017-01-09 1 views
0

Ceci est mon code actuellement:besoin d'aide sur mon programm palindrome en python

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() 

Et ça ne fonctionne pas. J'ai fait les ajustements suivants quand je les ai trouvés sur les forums et cela a fonctionné:

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() 

Ma question est, pourquoi ne fonctionne pas la première version? Il imprime toujours: La phrase n'est pas un palindrome.

+0

'list.reverse()' renvoie 'None' car la liste est inversée. –

+2

@ TigerhawkT3: 'reverse()' renvoie un itérateur, et l'égalité ne testera pas le contenu, seulement s'il s'agit du même objet (même 'reverse (l) == reversed (l)' est 'False' car ils sont deux itérateurs séparés). –

+0

'L.reverse' inverse la liste en place. Si vous essayez de l'assigner à une variable, vous obtenez 'None'. –

Répondre

4

list1.reverse() fonctionne sur place. Il renverse list1 et retourne None, de sorte que vous comparez une liste None et il est toujours False ...

Le second code renvoie une copie inversée de list1 comme list afin que les deux listes sont comparées et il fonctionne.

Note: un autre piège serait de comparer avec list1 == reversed(list1). Cela fonctionnerait en python 2, mais pas en python 3 puisque reversed a été transformé en un itérable.

En plus: ne pas faire list1 = [(x) for x in input()] mais juste list1 = list(input())

(ou une belle intervenant propose, travailler directement avec le type str, pas besoin de convertir les chaînes du tout, [::-1] opération s'applique aussi sur les chaînes, si juste passez à list1 = input() dans votre deuxième extrait de code)

+1

ok, c'est fait! Je ne veux juste pas "voler" des idées des autres (je n'aurais jamais converti les chaînes pour me lister, juste été trompé par le code OP :)) –

+1

oui, donc si les gens qui ne t'apprécient pas lisent ça, ils va penser à vous de toute façon :) –