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

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: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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

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

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

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

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: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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

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: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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

erzähl..
Antworten