Seite 1 von 1
Can't assign to operator
Verfasst: Donnerstag 31. März 2005, 10:21
von marco_
Vielleicht ist es eine dumme Frage, aber ich komm einfach nicht weiter.
In einer Schleife will ich jedesmal eine Variable definieren, diese soll als Namen immer eine fortlaufende Zahl und einen Buchstaben haben.
kurzes Beispiel ohne Schleife:
word = "ABC"
now = 1
Jetzt will ich eine Variable mit dem Namen "word1", egal wie ich das anstelle es kommt immer der Fehler: "Can't assign to operator"
Ich hab es mit folgenden Methoden versucht:
word%d = word % now
"word" + now = word
Irgendeine Möglichkeit muss es doch geben...
Verfasst: Donnerstag 31. März 2005, 10:24
von jens
Die Variable soll doch irgendwas speichern... Warum nimmst du nicht ein Dict?
daten[ "word" + now] = word
oder auch
word[now] = word_ergebnis
Verfasst: Donnerstag 31. März 2005, 10:34
von CM
Hoi Marco,
warum in drei Teufels Namen willst Du Variablen SO in einer Schleife definieren? Vielleicht hat Jens ja richtig geraten, dann ist ja gut, aber ansonsten schreibe uns doch mal klar, was Du eigentlich erreichen willst.
Ein Tipp aber mal prinzipiell: Du kannst nicht einen String mit einem Integer verketten. Das geht nicht (gibt im TraceBack so etwas: TypeError: cannot concatenate 'str' and 'int' objects). Was Du machen mußt ist ein type cast; in Python ganz einfach:
Code: Alles auswählen
x = 'abc'
i = 1
y = x + str(i)
#oder
y = "%s%d" % (x,i)
Nur was das soll ist mir im Zusammenhang mit Deiner Frage schleierhaft.
Viel Glück.
Gruß,
Christian
Verfasst: Donnerstag 31. März 2005, 10:45
von marco_
Dann sag ich mla wieso ich das ausgerechnet in einer Schleife haben will.
Ich will aus einer Textdatei jede Zeile in eine Variable speichern.
Also es sollen am Ende gleichviele Variablen wie Zeilen erstellt worden sein. Mir fällt keine andere Möglichkeit ein als das mit einer Schleife zu lösen.
Verfasst: Donnerstag 31. März 2005, 10:49
von jens
Warum packst du nicht einfach jede Zeile in eine Liste ???
Code: Alles auswählen
f = file( "beispiel.txt", "r" )
linelist = f.readlines()
f.close
print linelist
# \n löschen
linelist = [i.strip() for i in linelist]
print linelist
Verfasst: Donnerstag 31. März 2005, 16:48
von CM
Hoi nochmal,
was der Jens schreibt ist gut und schön, allerdings frage ich mich, was Du denn mit den Daten machen willst. Natürlich ist es besser mit einer Liste als mit einer variablen Zahl von Variablen zu arbeiten, aber nachdem Du zunächst diese Herangehensweise wählen wolltest: Vielleicht geht es noch einfacher?
Ggf. wolltest Du Deine Variablen gleich weiterverarbeiten. In diesem Falle könntest Du auch folgendes probieren:
Das ist im Übrigen auch kein Problem mit großen Dateien, was bei readlines ggf. zu einer starken Verzögerung führen kann.
Vielleicht hilft Dir das weiter. Würde mich freuen.
Gruß,
Christian
PS f.close ist einfach eine builtin Methode, aber noch ein "()" dahinter und es wird funktionieren

.
Verfasst: Donnerstag 31. März 2005, 21:19
von jens
Wow! Das wußte ich noch garnicht, damit ist ja einiges einfacher:
Code: Alles auswählen
f = file( "BlaBla.txt", "r" )
for i in f:
print i
f.close()
Verfasst: Donnerstag 31. März 2005, 21:21
von Leonidas
Und wie willst du auf diese Weise das file-Objekt schließen?

Verfasst: Donnerstag 31. März 2005, 21:22
von jens
Ist mir auch aufgefallen, deswegen, hab ich's oben gleich wieder korrigiert...
Verfasst: Donnerstag 31. März 2005, 23:47
von BlackJack
CM hat geschrieben:Was Du machen mußt ist ein type cast; in Python ganz einfach:
Es gibt keine 'type casts' in Python. Man kann aus einem vorhanden Objekt durch konvertieren ein neues erstellen, aber der Typ eines existierenden Objektes lässt sich nicht ändern.
Verfasst: Freitag 1. April 2005, 09:12
von CM
Da hast Du natürlich Recht: typecasting ist ein Begriff, der anderweitig schon besetzt ist und explizit die Typumwandlung eines best. Objektes meint.
Ich habe laxerweise Typumwandlung und Konversion zu einem anderen Objekt in einen Topf geworfen. Soll nicht wieder vorkommen.
Gruß,
Christian