For Loop bricht ab

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
pypee
User
Beiträge: 1
Registriert: Dienstag 21. Mai 2019, 15:53

Dienstag 21. Mai 2019, 16:00

Die Funktion "codieren" verwandelt eine String-Zahl in eine Integer-Zahl, die Funktion "decodieren" andersherum.

einwortzahlen = ["null", "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun", "zehn", "elf",
"zwoelf", "sechzehn", "siebzehn", "zwanzig", "dreißig", "vierzeig", "fuenfzig", "sechzig", "siebzig",
"achtzig", "neunzig"]
integerzahlen = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 16, 17, 20, 30, 40, 50, 60, 70, 80, 90]

def codieren(einwortzahl):
return (integerzahlen[einwortzahlen.index(einwortzahl)])

def decodieren(integerzahl):
return (einwortzahlen[integerzahlen.index(integerzahl)])

Die Funktion "PlusMinus" soll String-Rechnungen auführen und als String zurückgeben. Der integrierte For-Loop scheint in meinem Beispiel jedoch die erste Plus-Rechnung zweimal zu wiederholen, also nicht in der teile-Liste weiterzugehen? Was habe ich übersehen?

def PlusMinus(rechnung):
teile = rechnung.split(" ")
ergebnis = codieren(teile[0])
for i in teile[1:]:
if i == "plus":
ergebnis += codieren(teile[teile.index(i) + 1])
elif i == "minus":
ergebnis -= codieren(teile[teile.index(i) + 1])
return decodieren((ergebnis))

print(PlusMinus("fuenf plus zwei plus eins"))

Ausgabe: neun

Hat jemand eine Idee?
Benutzeravatar
__blackjack__
User
Beiträge: 3281
Registriert: Samstag 2. Juni 2018, 10:21

Dienstag 21. Mai 2019, 16:51

@pypee: Du hast übersehen das die `index()`-Methode immer das erste Vorkommen des Arguments findet. Wäre ja auch komisch wenn die Methode sich irgendwie merken würde was sie das letzte mal gefunden hat.

Der Ansatz ist an der Stelle falsch. Statt da immer wieder mit `index()` zu suchen würde man sich den Index in der Schleife mit `enumerate()` generieren. Und den zum Beispiel `i` nennen. Das Du da eine Zeichenkette `i` nennst ist vorsichtig ausgedrückt eine besch… Idee, weil extrem verwirrend.

Die Listen am Anfang sind die falsche Datenstruktur. Da würde man Wörterbücher (`dict`) für verwenden, und auch nur eines davon explizit angeben – das andere kann man ja per Code aus dem ersten erstellen.

Ansonsten kannst Du auch mal hier schauen: viewtopic.php?f=1&t=45623 — Du bist mit dieser Hausaufgabe ja nicht alleine. :-D
“I am Dyslexic of Borg, Your Ass will be Laminated” -- unknown
Benutzeravatar
snafu
User
Beiträge: 5792
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Dienstag 21. Mai 2019, 21:02

Und letztes Jahr um die selbe Zeit gab es das Thema auch schon: viewtopic.php?f=1&t=42775#p325362
Antworten