Python-Programm Palindrom w/o string-Funktionen
Ich bin ein Anfänger in Python. Ich habe geschrieben Palindrom-Programme ohne Verwendung von string-Funktionen.
Frage 1: Warum der 1. Logik mir nicht die gewünschte Leistung? Korrigieren Sie mich, wenn ich falsch bin.
Frage 2: Im 2. Programm, wenn ich direkt i += 1
im if-Anweisung sollte es geben, mir das richtige Ergebnis als die for
Schleife inkrementiert automatisch den Wert i
. Vielmehr gibt mir die korrekte Ausgabe nur, wenn ich auch diese Aussage oder eben nicht. Was kann der Grund dafür sein?
Logik 1:
n = input("eNTER STRING\n")
length = int(len(n))
n = str(n)
for i in range(0, int(length/2+1)):
if n[i] != n[-i - 1]:
break
if i < int(length/2 + 1):
print("not")
else:
print("yes")
Logik 2:
n = input("ENTER STRING\n")
length = int(len(n))
for i in range(0, int(length/2 + 1)):
if n[i] == n[-i - 1]:
i += 1
else:
break
if i < (length / 2):
print("not")
else:
print("yes")
Vielen Dank im Voraus..
- es wäre so viel einfacher, wenn Sie nicht schreiben monolithischen code... z.B.:
return false
. - Ich konnte nicht mit der Formatierung so machte ich es akzeptabel Aussehen
- Binju überprüfen Sie Bitte eine Antwort als korrekte Antwort, wenn es dein problem gelöst hat.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Logik 1, versuchen
if i<int(length/2):
stattif i<int((length/2+1)):
In Logic 2 sogar noch ausbauen
i+=1
gibt das richtige Ergebnis:Können Sie auch den folgenden code verwenden für die gleichen:
Lösung zu ersten Logik ist:
In der die zweite Logik, Sie brauchen nur zu sehen, wenn es irgendein Zeichen von Links und rechts, dass ist NICHT dasselbe. So können Sie Ihren code wie folgt :-
!=
eher alsis not
zu testen Ungleichheit von strings, dais
tests für Objekt-Identität. Dein code funktioniert in diesem Fall, aber es wird nicht in anderen Situationen, z.B.a='AB';b='A';b=b+'B';print a==b, a is b
Hier ist ein kurzer test für ein Wort palindrom ist oder nicht. Einfach wie Sie sehen.Sie können den Eingang für die es um den Aufbau durch nur Buchstaben. Es ist nur ein Punkt, um eine Vorstellung über Sie.
Also nur alphabetische Zeichen verarbeitet werden.Keine zahlen,Symbole etc.
Off by one Fehler in deinem Vergleiche. In der ersten Logik, sagen Sie, wenn der erste index des Wortes, wo der Charakter nicht gleich zu seiner "gespiegelten" ein Wert kleiner ist als len(Wort)/2 +1 dann ist nicht ein Palindrom.
Nehmen wir uns also aboba (Indizes: 0,1,2,3,4)
Den ersten index, an dem das Zeichen ist nicht gleich dem gespiegelten man 2 (das Zeichen 'o') (wir beginnen bei null)
2<(5/2)+1 oder 2<2+1 2<3 ?
Ja, dann Ihre Logik sagt, es ist nicht ein Palindrom, obwohl es eindeutig ist.
Es ist ziemlich verwirrend, auch zum testen für die Wahrheit einer Aussage und dann Ausgabe "nicht".. es ist eine Gewohnheit neue Programmierer sollten nicht bekommen und ich würde Wetten es ist ein Teil, warum Sie Probleme haben, Auffinden der Fehler selbst.
Dies ist ein weiterer Weg.
1) Die Logik ist in Ordnung - das problem ist die
if
- Anweisung am Ende.range(0, int(length/2 + 1))
enthält alle zahlen von0
zulength/2
- das ist, warum die Prüfungif i < int(length/2 + 1)
wird immer zurückTrue
.2) Dies funktioniert auch, wenn Sie entfernen
i += 1
.Haben, könnten Sie leicht vermeiden, diese kleinen Fehler loszuwerden, indem die zweite
if
Aussage: