Python frage über Integer und Lists?
Hey,
also ich habe dieses Programm hier:
Wenn ich es richtig verstanden habe, ist die function solange in der while schleife bis eine 99 auftaucht und wenn der opcode zum Beispiel eine 1 ist, die 2. und 3. Stelle addiert und die 4. überschreibt.
Jedoch verstehe ich nicht, wieso wird es "opcode[opcode[i+1]]" geschrieben und kann nicht "opcode[i+1]" geschriebe werden? Bzw was bringt der opcode außen?
MFG,
Strike
2 Antworten
Das sieht man am Besten, wenn man das Beispiel mal durchgeht:
i ist die Position in der Liste, die gerade abgearbeitet wird. Am Anfang ist i = 0. Also guckt sich das Programm die Anweisung an der Position 0 an. Die Anweisung ist 1, was in diesem Fall Addition bedeutet.
Dann kommt das, was du fragst. Das Programm schaut sich die Position i+1 an. Da steht eine 12. Jetzt nimmt sich das Programm die Zahl, die an der Position 12 steht (das ist das, was opcode[opcode[i+1]] bedeutet. Es wird also nicht mit der 12 gerechnet, die an Position i+1 steht, sondern es wird mit der Zahl an der Position 12 gerechnet), nimmt sich die Zahl, die an der Position steht, die von der Position i+2 indiziert wird (das ist in diesem Fall dieselbe Zahl, weil da eine 2 steht), addiert die beiden zusammen und schreibt sie an die Position, die von der Zahl an Position i+3 indiziert wird (was hier auch wieder dieselbe Zahl ist, weil an Position 3 eine 3 steht).
Das macht das Programm dann in einer Endlosschleife, weil i nirgendwo verändert wird.
Vielen dank, hab das jetzt auch abgeändert damit es nicht in einer Endlosschleife bleibt.
wieso wird es "opcode[opcode[i+1]]" geschrieben und kann nicht "opcode[i+1]" geschriebe werden
Weil das zwei verschiedene Dinge sind. Lös es einfach von innen nach außen auf, hier passiert nichts magisch.
opcode[opcode[i+1]]
Das Listenelement auf jener Position, die im Listenelement auf Position i+1 zu finden ist.
opcode[i+1]
Das Listenelement auf Position i+1.
Hier wird eine extrem einfache Sprache bzw. ein Automat simuliert. Auf Opcodes folgen offenbar "Adressen" innerhalb der Liste, die verwendet werden sollen.