Variablen mit Strings aufrufen

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.
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Variablen mit Strings aufrufen

Beitragvon 4bit » Dienstag 5. Mai 2009, 13:36

Hi Leute,

ich habe eine liste von Variablen, d.h. eigentlich sind es Konstanten, die Positionen auf einem Canvas beschreiben. Etwa so

Code: Alles auswählen

A = [13,49]
B = [67,50]
F = [400,0]


Mein Ziel ist es zwischen diesen Positionen Linien zu Zeichnen, falls eine bestimmte Rechnung ein bestimmtes Ergebnis liefert.
Die Rechnung liefert mir eine Liste von Paaren, die die Namen der Variablen sind, zwischen denen Linien gezeichnet werden sollen. Etwa so

Code: Alles auswählen

 [["A", "B"], ["A", "F"], ["B", "G"]]


Ich könnte versuchen diese Liste zusammen mit create_line zu benutzen. Dazu müßte ich aber Strings irgendwie in Variablennamen umwandeln können, um die Listeneinträge als Parameter an create_line() zu übergeben.

Oder fällt jemandem eine andere Lösung ein?

Grüße,
4bit
EyDu
User
Beiträge: 4868
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Dienstag 5. Mai 2009, 13:41

Das könntest du über die globals/locals-Funktion lösen:

Code: Alles auswählen

>>> A = [13,49]
>>> globals()["A"]
[13, 49]


oder der richtige weg: du machst aus A, B und F ein Dictionary.
Das Leben ist wie ein Tennisball.
Nergal
User
Beiträge: 72
Registriert: Montag 6. Oktober 2008, 14:02

Beitragvon Nergal » Dienstag 5. Mai 2009, 13:44

Hi,

eval würd auch gehen.

Code: Alles auswählen

>>> A = [13, 49]
>>> Jiha = eval("A")
>>> Jiha
[13, 49]
>>>


Allerdings würd ich, wie auch EyDu, eher zu einem Dict raten.

Gruß
Nergal
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Beitragvon 4bit » Dienstag 5. Mai 2009, 13:54

Danke.
Die Dictionaries hatte ich aufgegeben, weil die Koordinaten doch nicht wie in dem Beispiel Integer sind, sondern Formeln und Dictionaries soweit ich weiß nur fixe Daten nehmen.
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Dienstag 5. Mai 2009, 13:59

Als Schlüssel nehmen Dictionaries nur immutables, ja. Allerdings sind alle Variablen eben auch in einem Dictionary (->`globals`, `locals`) gespeichert. Wenn du dein Problem also mit "Variablen" lösen kannst, dann auch mit einem Dictionary.
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Beitragvon 4bit » Dienstag 5. Mai 2009, 14:14

aber ich kann eben nicht ein Dictionary benutzen, falls die Werte nicht schon feststehen:

Code: Alles auswählen

pos = {"A": (w-2*a) / 3, "B": 100-pos["A"], ...}


funktioniert zB nicht.
EyDu
User
Beiträge: 4868
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Dienstag 5. Mai 2009, 14:16

Doch, doch:

Code: Alles auswählen

def A(w, a, pos):
    return (w-2*a)/3
def B(w, a, pos):
    return 100-pos["A"]

pos = {"A":A, "B":B}

w = 1.0
a = 2.0
pos["A"](w, a, pos)
Das Leben ist wie ein Tennisball.
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Beitragvon 4bit » Dienstag 5. Mai 2009, 14:37

Stimmt, daran hatte ich nicht gedacht, A und B als Funktionen zu definieren.
Das man mit Eval über Strings Zugriff auf Variablen hat gefällt mir aber auch sehr gut.
EyDu
User
Beiträge: 4868
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Dienstag 5. Mai 2009, 14:43

4bit hat geschrieben:Das man mit Eval über Strings Zugriff auf Variablen hat gefällt mir aber auch sehr gut.

Das willst du aber ganz sicher nicht!
Das Leben ist wie ein Tennisball.
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Beitragvon 4bit » Dienstag 5. Mai 2009, 15:31

erzähl..

Wer ist online?

Mitglieder in diesem Forum: Astorek, Bing [Bot]