Du solltest erstmal deinen Code aufräumen, so ist das ja eine Zumutung. Mal von oben nach unten abgearbeitet:
- Halte dich an PEP 8, dann kann man deinen Code leichter lesen und verstehen.
- Entscheide dich für Deutsch oder Englisch und keinen Mix.
- Benutze Konstanten. Die ganzen 42, 41, 40, 0 und 1 kann man doch alle aus der Spielfeldgröße ableiten.
- Dein Konstrukt
ist einfach nur kompliziert für
- Warum hast du den eben genannten ausdruck dort dreimal stehen. Wenn du anfängst Code zu kopieren (abzuschreiben), dann machst du etwas falsch. So etwas musst du zusammenfassen.
- a, b und nachbar sind total nichtssagende Namen, das solltest du ändern. Wie sollst du die Code in vier Wochen noch verstehen oder wie sollen wir dir helfen, wenn der Code einfach beliebige Dinge tun kann. Ohne Namen ist man verloren.
- a, b und nachbar gehören offensichtlich zusammen, daher solltest du diese auch zusammen ablegen und nicht in drei Variablen.
- Der Block
ist nur kompliziert für
- == True ist IMMER sinnlos. Wenn a == True erfüllt wird, dann ist a offensichtlich bereits True. Entferne alle == True und ersetze die x == False durch ``not x``.
- Du kannst
Code: Alles auswählen
if a[i][j] == True:
t.insert("end", 'x')
else:
t.insert("end", ' ')
einfacher als
schreiben. Wie gesagt, doppelte Dinge sollten zusammengefasst werden.
- Du verwendest nachbar nur in der NeuePopulation-Funktion, warum hast du dann eine globale Variable dafür?
- Diesen riesigen if-Block kann man mit einer for-Schleife zusammenfassen
Code: Alles auswählen
for x ...
for y ...
for dx in range(-1, 2):
for dy in range(-1, 2):
if dx != dy and a[x+dx][y+dy]:
nachbar += 1
oder noch kompakter:
Code: Alles auswählen
for x ...
for y ...
for dx, dy in ((dx, dy) for dx in range(-1, 2) for dy in range(-1, 2) if dx != dy):
if a[x+dx][y+dy]:
nachbar += 1
Das geht sogar noch kompakter aber, das will ich dir jetzt nicht zumuten.
Die Punkte solltest du erstmal alle verbessern, erst dann macht es überhautp Sinn dein Programm näher zu betrachten.
Das Leben ist wie ein Tennisball.