Can't assign to operator

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.
marco_
User
Beiträge: 78
Registriert: Freitag 25. März 2005, 12:24

Can't assign to operator

Beitragvon marco_ » Donnerstag 31. März 2005, 10:21

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...
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 31. März 2005, 10:24

Die Variable soll doch irgendwas speichern... Warum nimmst du nicht ein Dict?

daten[ "word" + now] = word

oder auch

word[now] = word_ergebnis

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Donnerstag 31. März 2005, 10:34

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
marco_
User
Beiträge: 78
Registriert: Freitag 25. März 2005, 12:24

Beitragvon marco_ » Donnerstag 31. März 2005, 10:45

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.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 31. März 2005, 10:49

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Donnerstag 31. März 2005, 16:48

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:

Code: Alles auswählen

for line in file_object:
   #irgendwas tun mit line

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 ;-) .
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 31. März 2005, 21:19

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()

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 31. März 2005, 21:21

jens hat geschrieben:

Code: Alles auswählen

for i in file( "BlaBla.txt", "r" ):
    print i

Und wie willst du auf diese Weise das file-Objekt schließen? :twisted:
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 31. März 2005, 21:22

Ist mir auch aufgefallen, deswegen, hab ich's oben gleich wieder korrigiert...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Beitragvon BlackJack » Donnerstag 31. März 2005, 23:47

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.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Freitag 1. April 2005, 09:12

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], mollyman