Seite 1 von 1

anderes Problem mit der for-Schleife

Verfasst: Donnerstag 24. September 2009, 15:19
von mathi
Hallo,

ich habe 10x wx.TextCtrl in einem Programm.

Diese heißen self.panel.tc1 bis self.panel.tc10

ich möchte diese über eine for-Schleife einzeln einer Liste hinzufügen.

Ergebnis soll sein
liste=[self.panel.tc1,self.panel.tc2,self.panel.tc3...self.panel.tc10


Meine bisherige Idee ist im Groben:

Code: Alles auswählen

entrylist=[]
tc1='s'  #steht für den Inhalt des TextCtrl's
tc2='a'
tc3='f'
tc4='t'
for i in range(1,5):
    entrylist.append(tc(i))

print entrylist()

so gehts natürlich nicht, aber wie geht es??

Verfasst: Donnerstag 24. September 2009, 15:23
von snafu
Warum sind die denn durchnummeriert? Kannst du das nicht ändern?

Verfasst: Donnerstag 24. September 2009, 15:26
von mathi
nein, denn ich muß auf jedes einzeln zugriff haben, unabhängig von der Liste

Verfasst: Donnerstag 24. September 2009, 15:30
von Hyperion
mathi hat geschrieben:nein, denn ich muß auf jedes einzeln zugriff haben, unabhängig von der Liste
Bist Du Dir da auch wirklich sicher? Immer wenn man anfängt namex zu schreiben und mit x durchnummeriert, will man eigentlich sofort etwas Listen-artiges!

Sonst musst Du sie auch manuell in die Liste packen ;-)

Code: Alles auswählen

entries = [tc1, tc2, ...]

Verfasst: Donnerstag 24. September 2009, 15:40
von mathi
die tc werden im weiteren Verlauf in Variablen umbenannt um damit weiterzuverfahren:

Code: Alles auswählen

a=float(tc1)
b=float(tc2)
c=int(tc3)
d=str(tc4)

Fläche=a*b
print d+Fläche

Verfasst: Donnerstag 24. September 2009, 15:44
von cofi
Du suchst `eval` bzw `exec`.

ABER das was du da machst sieht mir nach reichlich schlechtem Code aus. Du solltest deinen Ansatz lieber nochmal komplett ueberdenken (das ist auch sonst, wenn man die beiden nutzen will der Fall).

Verfasst: Donnerstag 24. September 2009, 15:52
von EyDu
Und was spricht nun dagegen statt "tc1" und "entries[0]" zu schreiben? Durchnummerierte Namen zu generieren ist immer ein Fehler!

Verfasst: Donnerstag 24. September 2009, 15:54
von snafu
@cofi: Ich denke, ein getattr() hilft hier auch schon, sofern ich die Aufgabenstellung richtig verstanden habe.

Verfasst: Donnerstag 24. September 2009, 15:59
von mathi
ich habe die Beispiele sehr gekürzt um es verständlich zu halten. float() ist eigentlich eine eigene Funktion die aber im Endeffekt eine Zahl zurückgibt.

Die Nummerierung soll so bleiben, ich möchte mir nur das händische Schreiben der Listen sparen...

Verfasst: Donnerstag 24. September 2009, 16:22
von Hyperion
mathi hat geschrieben: Die Nummerierung soll so bleiben, ich möchte mir nur das händische Schreiben der Listen sparen...
Das geht aber nur mit Magie ;-) Nichts, was zu empfehlen ist!

Wenn die Namen eben eine Rolle spielen, dann musst Du schon die Eingabefeler auch entsprechend benennen! Allerdings scheinen die Werte dann ja Parameter für externe Funktionen zu sein. Wieso nicht einfach dazu Bezug nehmend benennen? Du willst Dir hier Arbeit ersparen, die man sich wohl nicht so leicht ersparen kann.

Mir fiele höchstens ein, das ganze über ein Dictionary-Konstrukt zu lösen, das sich auf die Parameter stützt, die man später braucht.