Python Neuling braucht hilfe

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
deside
User
Beiträge: 9
Registriert: Freitag 5. März 2021, 16:01

Guten Morgen ihr lieben.

Ich würde gerne das Folgende umsetzten.
Mittels for schleife über eine ANzahl len iterieren, und dann innerhalb des Bodys eine variable estellen, die dann zu einer Globalen Gleichung dazuaddiert wird.

Code: Alles auswählen

eq=0
d={}
for counter in range(0,len): 
	d["time{0}".format(x)]
	eq+="time{0}".format(x)
Mein Ziel ist es bei jedem loop ene Variable mit namen time1, time2 usw zu erzeugen, diese zu meinem Dictionary d hinzuzufügen und meineVariable zu eq hinzuaddieren. Am Ende möchte ich einfach eine Gleichung haben die eine Anzahl von Variablen aufaddiert mit der ich Dinge tuen aknn.
Ich kenne den Wert von len nicht, dieser soll also variabel gehalten werden.
Was muss ich an obrigem Code ändern oder ergänzen.

Außerdem möchte ich dann für die Software Gurobi die variable für mein modle hinzufügen.
Der AUfruf hierzu geht nach folgenden schema

Code: Alles auswählen

x = m.addVar(vtype=GRB.BINARY, name="x")
x soll hierbei die in der Iteration erzeugten variable sein, der name soll durch

Code: Alles auswählen

"time{}".format(counter)
oder

Code: Alles auswählen

"time" +str(counter)
erzeugt werden.
In beiden Fällen bekommen ich jedoch einem 'str' object is not callable Error, wobei die Konsolenausgabe über pring() in beiden fällen funktioniert.

Hat hier jmd eine Idee was ich falsch mache?

Vielen Dank schonmal für die Hilfe

Grüße deside
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@deside: Also mir ist nicht klar was Du hier machen willst.

`x` ist nicht definiert. Sollte das `counter` sein? Falls ja warum steht dann da `x`?

Die erste Zeile in der Schleife macht keinen Sinn weil das Wörterbuch leer ist und da sofort im ersten Durchlauf ein `KeyError` ausgelöst wird. Im Beitrag steht Du willst da einen Wert dem Wörterbuch hinzufügen. Macht der Code nicht, und Du verrätst auch nicht welcher Wert das denn sein soll‽

`eq` wird mit der Zahl 0 initialisiert, und in der Schleife wird dann versucht Zeichenketten darauf zu addieren, also würde auch diese Zeile gleich beim ersten Durchlauf eine Ausnahme auslösen, weil man Zahlen und Zeichenketten nicht addieren kann.

Warum willst Du überhaupt so ein komisches Wörterbuch erstellen? Wenn man etwas mit Schlüssel bastelt die fortlaufende, aufsteigende Zahlen enthalten, dann klingt das nicht nach einem Wörterbuch, sondern nach einer Liste‽

Weitere Anmerkungen: Die Namen könnten deutlich besser sein, auch für generische Namen. Kryptische Abkürzungen oder Einzelbuchstaben sind sehr selten gute Namen.

Eingerückt wird vier Leerzeichen pro Ebene, nicht mit Tabs.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
deside
User
Beiträge: 9
Registriert: Freitag 5. März 2021, 16:01

Guten Morgen,

das x wird in der Zeile definiert, das is bei Beispielen für die Software Gurobi auch so vorgemacht. Es wird eine Variable erzeugt die ich in diesem fall halt 'x' genannt hatte. Es soll dann ein System von Gleichung gelöst werden, wobei am Ende ausgegeben wird welchen Wert x annehmen muss. Mein Problem ist, dass ich auf die innerhalb der For-Schleife eeugten Avriable x zugreigen möchte. Da war meine erste Idee halt die alle in ein Wörterbuch zu packen. Wie gesagt belegt werden die von mir nie, die Werden dann von dem Gurobi-Modul für Python belegt und mir als Lösung ausgegeben.
deside
User
Beiträge: 9
Registriert: Freitag 5. März 2021, 16:01

Oder anders gefragt:

Wenn ich eine zu Beginn unbekannte anzahl an Variablen erzeugen muss, auch die ich per name zugreifen will, und in der Laufzeit die Anzahl bestimmt wird, wie kann ich dies mit einer For schleife verwirklichen, dass jede der variablen eine eigene Bezeichnung bekommt, die ich über die Reihenfolge der Erstellung auch verwenden kann in meinem Code.
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@deside: Naja, wie schon gesagt klingt das nach einer Liste:

Code: Alles auswählen

    times = list()
    for i in range(length):
        times.append(model.addVar(vtype=GRB.BINARY, name=f"time{i}"))

    # oder als „list comprehension“:

    times = [
        model.addVar(vtype=GRB.BINARY, name=f"time{i}") for i in range(length)
    ]
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten