Variable wird nicht erkannt

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
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Hallo,

mein Problem sieht folgendermaßen aus:

Code: Alles auswählen

liste = eingabe.split('+')
text = ''
Anzahl = len(liste)
Nummer = 0
for i in range(Anzahl):
    text  = text + liste[Nummer]
    Nummer = Nummer + 1
So erhalte ich folgende fehlermeldung: 'IndexError: list index out of range'
Schreibe ich aber statt Anzahl eine 0 hinein, was ja der Wert von Anzahl ist hinein, so klappt es wunderbar. Darf man in so einer Situation keine Variablen verwenden?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Also bei mir funktioniert es ohne Probleme. Du solltest aber nicht über Indizes über eine Liste laufen (und schon gar nicht über den Umweg von "Nummer"), sondern direkt über dessen Elemente:

Code: Alles auswählen

liste = eingabe.split('+')
text = ''
for elem in liste:
    text  = text + elem
Das Entfernen aller "+" in einem String geht aber auch einfacher:

Code: Alles auswählen

text = eingabe.remove("+", "")
BlackJack

@Imperator: Mal davon abgesehen dass das sehr Umständlich ist und `eingabe` nirgends definiert ist, dürfte es hier keinen `IndexError` geben.

Bitte poste lauffähige Beispiele die das Problem, das Du im Originalquelltext hast auch haben. Man kann schlecht ein Problem in Quelltext finden den man nicht kennt.

Und rein vom Effekt her, mal angenommen `eingabe` ist an eine Zeichenkette gebunden, kann man das alles durch dieses hier ersetzen:

Code: Alles auswählen

liste = eingabe.split('+')
text = ''.join(liste)
Sollte die `liste` nicht benötigt werden reicht sogar:

Code: Alles auswählen

text = eingabe.replace('+', '')
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

@EyDu: Es geht nicht darum die +se zu entfernen.
@BlackJack: Ich habs jetzt durch Zufall gelöst. Der Fehler lag gar nicht in der Variable Nummer wie ich dachte, sondern in Anzahl. Im originalcode hatte ich nach einer radikalen umstrukturierung vergessen, die Formel zur Errechnung von Anzahl auch umzustellen. Als ich euch nun hier den Code postete, machte ich es aber automatisch richtig. Jetzt wollte ich euch den original Code posten, und dabei viel mir dieser Fehler auf. Ich löste ihn, und lies es einfach mal laufen. Ihr hättet mein gesicht sehen sollen ...
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

Du solltest aber trotzdem Deinen Code auf das Python-Idiom

Code: Alles auswählen

"".join(eingabe.split("+"))
umstellen. Iteration mit Indexzugriff auf ein Array und Stringerzeugung mit "+" sind nicht Python-like.
https://www.xing.com/go/invite/18513630.6a91d4
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

EyDu hat geschrieben: Das Entfernen aller "+" in einem String geht aber auch einfacher:

Code: Alles auswählen

text = eingabe.remove("+", "")
Du meinstest wohl `.replace()`?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Antworten