anderes Problem mit der for-Schleife

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
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

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??
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Warum sind die denn durchnummeriert? Kannst du das nicht ändern?
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

nein, denn ich muß auf jedes einzeln zugriff haben, unabhängig von der Liste
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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, ...]
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

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
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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).
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Und was spricht nun dagegen statt "tc1" und "entries[0]" zu schreiben? Durchnummerierte Namen zu generieren ist immer ein Fehler!
Das Leben ist wie ein Tennisball.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@cofi: Ich denke, ein getattr() hilft hier auch schon, sofern ich die Aufgabenstellung richtig verstanden habe.
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

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...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
Antworten