Seite 1 von 1

Variablen mit Strings aufrufen

Verfasst: Dienstag 5. Mai 2009, 13:36
von 4bit
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

Verfasst: Dienstag 5. Mai 2009, 13:41
von EyDu
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.

Verfasst: Dienstag 5. Mai 2009, 13:44
von Nergal
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

Verfasst: Dienstag 5. Mai 2009, 13:54
von 4bit
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.

Verfasst: Dienstag 5. Mai 2009, 13:59
von cofi
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.

Verfasst: Dienstag 5. Mai 2009, 14:14
von 4bit
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.

Verfasst: Dienstag 5. Mai 2009, 14:16
von EyDu
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)

Verfasst: Dienstag 5. Mai 2009, 14:37
von 4bit
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.

Verfasst: Dienstag 5. Mai 2009, 14:43
von EyDu
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!

Verfasst: Dienstag 5. Mai 2009, 15:31
von 4bit
erzähl..