2017-01-09 3 views
0

Dies ist mein Code zur Zeit:ich auf meinem Palindrom Programm in Python Hilfe benötigen

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

Und es funktioniert nicht. Ich habe die folgenden Anpassungen vorgenommen, wenn ich sie in den Foren gefunden und es hat funktioniert:

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

Meine Frage ist, warum nicht die erste Version der Arbeit? Es druckt immer: Der Satz ist kein Palindrom.

+0

'list.reverse()' 'kehrt None', weil die Liste an Ort und Stelle umgekehrt. –

+2

@ TigerhawkT3: 'reversed()' gibt einen Iterator zurück, und Gleichheit testet den Inhalt nur dann nicht, wenn sie das gleiche Objekt sind (sogar 'reversed (l) == reversed (l)' ist 'False' wie sie sind zwei separate Iteratoren). –

+0

'L.reverse' kehrt die Liste um. Wenn Sie versuchen, es einer Variablen zuzuordnen, erhalten Sie 'None'. –

Antwort

4

list1.reverse() Arbeiten an Ort und Stelle. Es kehrt list1 und kehrt None, so dass Sie eine Liste None zu vergleichen und es ist immer False ...

Der zweite Code gibt eine umgekehrte kopieren von list1 als list so werden beide Listen verglichen und es funktioniert.

Hinweis: eine weitere Falle wäre mit list1 == reversed(list1) zu vergleichen. Das würde in Python 2 funktionieren, aber nicht in Python 3, da reversed in ein iterables umgewandelt wurde.

Abgesehen: nicht list1 = [(x) for x in input()] tun, sondern nur list1 = list(input())

(oder, wie einige nette Kommentator vorgeschlagen, arbeiten direkt mit str Typ, keine Notwendigkeit, Strings überhaupt zu konvertieren, [::-1] Betrieb gilt auch bei Strings, so einfach ändern, um list1 = input() in Ihrem zweiten Code-Schnipsel)

+1

ok, fertig! Ich möchte einfach keine Ideen von anderen "stehlen" (ich hätte niemals die Strings konvertiert, um selbst aufgelistet zu werden, nur durch den OP-Code irregeführt worden :)) –

+1

Ja, wenn Leute, die Sie nicht mögen, dies lesen, dann wird sowieso sehr von dir halten :) –

Verwandte Themen