SPUTNiK hat geschrieben:Ohje, das -1 hat mich die ganze Zeit ziemlich irritiert. Ich dachte len(s)-1 (in dem Fall 28) wäre der zweitletzte Index da der string aus 29 Zeichen besteht und print len(s) ebenfalls 29 ausgibt. Das hat bei mir irgendwie verdrängt das der erste Index 0 ist und nicht 1 *facepalm.
Daß der Index von Listen (oder Arrays) bei 0 und nicht bei 1 beginnt, ist seit vielen Jahren eines der Hauptschwierigkeiten für Programmierer, verursacht oft Fehler, und es wird für viele Sprachen diskutiert, ob das so beibehalten werden soll (siehe z.B. Google zu "array index start"). Man hat es aber trotzdem nicht geändert und wird es daher wohl auch nicht mehr.
Mein Code prüft ja auf 6 Zahlen nacheinander, und dann, ob das Zeichen danach auch eine Zahl ist oder nicht. Wenn man am Ende des Strings ist, ist das Zeichen danach sicher keine Zahl mehr, aber es existiert auch gar nicht, daß heißt, es darf dann auch nicht zu der Überprüfung dieses nichtexistenten Zeichens kommen, sonst würde es einen Fehler geben ("list index out of range"). Daher "if i == len(s) - 1"
zuerst. Wenn dies "True" ist, wird der Code-Block darunter ausgeführt, ohne daß der Teil hinter dem "or ..." noch geprüft wird (wichtig, sonst wie gesagt Error).
"s[i + 1].isdigit()" gibt "True" zurück, wenn das nachfolgende Zeichen eine Ganzzahl ist, sonst "False".
Man könnte also auch
schreiben,
ist eine Verkürzung, die - in diesem Fall - dasselbe macht (es gibt dazu ein paar Einzelheiten, dazu siehe bei Interesse die Diskussion
hier).
Wenn man in einer if-Bedingung einen Ausdruck hat, kann man den einfach so stehen lassen und auf die Auswertung zu "wahr" oder "falsch" testen, siehe
hier.
Z.B. wird eine ganze Zahl wie 5 zu "wahr" ausgewertet. Man kann dann also schreiben:
Ebenso, wenn eine Funktion einen solchen Wert wie "True" zurückgibt.
Code: Alles auswählen
if "5".isdigit():
print 'Der String "5" enthält eine Ganzzahl.'
umgekehrt
Code: Alles auswählen
if not "a".isdigit():
print 'Der String "a" ist keine Ganzzahl.'
Hoffe, die Zeile in dem Skript wird Dir so ein bißchen verständlicher.
So, und da die anderen Leute hier meine Erklärungen normalerweise nicht leiden können, bin ich jetzt raus hier, SPUTNiK weitere Fragen an mich bitte ggf. per PN.