IndexError, wenn die Prüfung, ob die Eingabe ist Palindrom mit while-Schleife
Ich würde gerne wissen, wie ich prüfen, ob eine Eingabe ein Palindrom mit einer while-Schleife, mit Python.
Dank:
habe ich versucht, dieses
i = 0
n = len(msg_list)
while i < n:
palindrome = msg_list[i]
if palindrome == msg_list[-1]:
print("Palindrome? True")
msg_list.pop(-1)
else:
print("Palindrome? False")
i=i+1
aber am Ende erhalte ich eine Fehlermeldung, dass der Listenindex ist außerhalb des Bereichs
- Ist eine while-Schleife notwendig?
- ja, die while-Schleife erforderlich ist.
- stackoverflow.com/questions/952110/...
- Zeigen der gesamte stack-trace.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht zu iterieren, bis das Ende, sondern nur bis zur Mitte Charakter. Und vergleichen Sie alle Zeichen, um das Zeichen unter dem gleichen index, wenn gezählt, im Gegenteil:
else
Teil derwhile
Schleife wird ausgeführt, wenn die Schleife beendet seine iteration ohnebreak
.Alternativ, wenn Sie etwas anderes als eine
while
Schleife, dann ist diese Aufgabe nur vonsingle
Linie inPython
:Oh, es wurden zwei Linien.
Mit einer while-Schleife
Ohne
Einen kurzen Lösung mit
reversed
:while
nur. 🙁 🙁 Sonst kann es sogar noch kürzer. 😉Andere Weise mit einer
while
Schleife. Sobald zwei Zeichen nicht übereinstimmen, wird die while-Schleife Stoppt, so dass es sehr effizient ist, aber natürlich nicht der beste Weg, es zu tun in Python.Dachte, ich möchte hinzufügen, eine weitere alternative für Menschen immer noch die Ansicht dieser Frage. Es verwendet eine while-Schleife, und ist ziemlich präzise (obwohl, ich immer noch lieber die
if word = word[::-1]
Ansatz.Die Verwendung einer while-Schleife hier ist künstlich, aber es verbraucht die gesamte Liste und führen Sie den test.
Wenn eine while-Schleife war nicht Voraussetzung, wäre:
all(a == b for a,b in zip(word,reversed(word)))