ich bin neu hier im Forum und möchte mich kurz vorstellen. Ich bin nicht mehr der Jüngste aber die Programmierung hat mich mal wieder gepackt.
Ich möchte mich in Python einarbeiten, weil ich es später auf dem Raspberry nutzen will. Grundlegende Programmierkenntnisse habe ich und auch Datenbankerfahrung.
Um bei den ersten Programmierschritten nicht wie immer bei "Hello World!" zu beginnen hatte ich mir gedacht ein Anwendung in Richtung "Game of Live" umzusetzen.
Wie gesagt meine Programmierkünste sind nicht allzu gut und damit ist der Code sicherlich noch verbesserbar.
Meine technischen Voraussetzungen sehen wie folgt aus:
- Win7 64bit
- Python3
- IDLE
Prinzip von "Game of Live" ist soweit klar und ich wollte die Ausgabe auf dem Bildschirm mit "Tkinter" bewerkstelligen. Da war schon die erste Hürde - unter Win7 heißt "Tkinter" "tkinter"
Die Ausgabe erstelle ich im Prinzip mit
Code: Alles auswählen
l = Label(root,bg = f, relief=SUNKEN, text = ' ',width = 2).grid(row = r,column = j)
Um das Label wirklich darzustellen muss ich es noch mit
Code: Alles auswählen
root.update()
Soweit so gut.
Wenn ich jetzt aber in einer Schleife die Ausgabe erstellen will geht dieses nicht. Die Schleife läuft (das kann ich an der Print-Ausgabe erkenne, aber auich die Variable "step" bleibt immer bei "0") => Die Schleife läuft habe ich festgestellt , wenn ich im Code die Zeile "step += 1" schreibe. Aber die Ausgabe wird nicht aktualisiert.
Hier beispielhaft die Schleife
Code: Alles auswählen
while summenwert3 != summenwert21:
print('Listen ungleich - Zähler= ', step)
Liste2_erneut_berechnen() # Funktion um das Liste2 erneut zu berechnen
step += step
Liste2_darstellen() # Matrix 2 grafisch ausgeben
root.update()
Code: Alles auswählen
def Liste2_darstellen():
i = 0 # Zähler
r = 0 # row - Zeile
j = 0 # colum - Spalte
c1 = 'orange'
c2 = 'white'
for i in range(0,n*n):
r = i//n # Zeilennummer ermitteln
j = i%n # Spaltennummer ermitteln
if liste2[i] == 0:
f = c2
else:
f = c1
# Relief ['SUNKEN','FLAT','RAISED','GROOVE','RIDGE']
l=Label(root,bg=f, relief=SUNKEN, text=' ',width=2).grid(row=r,column=j)
Hier der gesamte Code zum besseren Verständnis
Code: Alles auswählen
#!Test
# Programm zur Simulation des "Game of Live"
#
#
#
#
from tkinter import *
from random import randint
import time
import copy
# Funktionen definieren Anfang
# vvvvvvvvvvvvvvvvvvvvvvvvvvvv
def Liste1_berechnen():
global summenwert1
i = 0 # Zähler
r = 0 # row - Zeile
j = 0 # colum - Spalte
c1 = 'orange'
c2 = 'white'
summenwert1 = 0
for i in range(0,n*n):
r = i//n # Zeilennummer ermitteln
j = i%n # Spaltennummer ermitteln
if j == 0:
f = c2
liste1.insert(i,0) # Schreibe "0" wenn Spalte 0 ist
elif j == (n-1):
f = c2
liste1.insert(i,0) # Schreibe "0" wenn letzte Spalte erreicht ist (abhängig von 'n')
elif r == 0:
f = c2
liste1.insert(i,0) # Schreibe "0" wenn Zeile 0 ist
elif r == (n-1):
f = c2
liste1.insert(i,0) # Schreibe "0" wenn letzte Zeile erreicht ist (abhängig von 'n')
else:
zz = randint(1, 10)
if zz > 8:
f = c1
liste1.insert(i,1)
else:
f = c2
liste1.insert(i,0)
# Relief ['SUNKEN','FLAT','RAISED','GROOVE','RIDGE']
l = Label(root,bg = f, relief=SUNKEN, text = ' ',width = 2).grid(row = r,column = j)
summenwert1 += i*liste1[i]
# Funktionen Ende
def Liste1_lesen():
i = 0 # Zähler
r = 0 # row - Zeile
j = 0 # colum - Spalte
for i in range (0,n*n):
r = i//n # Zeilennummer ermitteln
j = i%n # Spaltennummer ermitteln
if j == 0:
print()
print(liste1[i], end=' ')
else:
print(liste1[i], end=' ')
print()
print('====> Ende Matrix1 <=====')
# Funktionen Ende
def Liste2_rechnen():
global summenwert2
i = 0 # Zähler
r = 0 # row - Zeile
j = 0 # colum - Spalte
summenwert2 = 0
for i in range (0,n*n):
r = i//n # Zeilennummer ermitteln
j = i%n # Spaltennummer ermitteln
if j == 0:
liste2.insert(i,0) # Schreibe "0" wenn Spalte 0 ist
elif j == (n-1):
liste2.insert(i,0) # Schreibe "0" wenn letzte Spalte erreicht ist (abhängig von 'n')
elif r == 0:
liste2.insert(i,0) # Schreibe "0" wenn Zeile 0 ist
elif r == (n-1):
liste2.insert(i,0) # Schreibe "0" wenn letzte Zeile erreicht ist (abhängig von 'n')
else:
z0 = ((r*n)+j)
z1 = ((((r-1)*n)+j)-1)
z2 = (((r-1)*n)+j)
z3 = ((((r-1)*n)+j)+1)
z4 = (((r*n)+j)-1)
z5 = (((r*n)+j)+1)
z6 = ((((r+1)*n)+j)-1)
z7 = (((r+1)*n)+j)
z8 = ((((r+1)*n)+j)+1)
zg = liste1[z1]+liste1[z2]+liste1[z3]+liste1[z4]+liste1[z5]+liste1[z6]+liste1[z7]+liste1[z8]
# print ('Summe von z0 = ', z)
if zg <= 2:
liste2.insert(z0,0) # sterben - unterbevölkert
if zg >=3 and zg <= 4:
liste2.insert(z0,1) # weiter leben
if zg > 4:
liste2.insert(z0,0) # sterben - überbevölkert
summenwert2 += i*liste2[i]
# Funktionen definieren Ende
def Liste2_lesen():
i = 0 # Zähler
r = 0 # row - Zeile
j = 0 # colum - Spalte
for i in range (0,n*n):
r = i//n # Zeilennummer ermitteln
j = i%n # Spaltennummer ermitteln
if j == 0:
print()
print(liste2[i], end=' ')
else:
print(liste2[i], end=' ')
print()
print('====> Ende Matrix2 <=====')
# Funktionen Ende
def Liste2_erneut_berechnen():
global summenwert21
i = 0 # Zähler
r = 0 # row - Zeile
j = 0 # colum - Spalte
summenwert21 = 0
for i in range (0,n*n):
r = i//n # Zeilennummer ermitteln
j = i%n # Spaltennummer ermitteln
if j == 0:
liste2[i] = 0 # Schreibe "0" wenn Spalte 0 ist
elif j == (n-1):
liste2[i] = 0 # Schreibe "0" wenn letzte Spalte erreicht ist (abhängig von 'n')
elif r == 0:
liste2[i] = 0 # Schreibe "0" wenn Zeile 0 ist
elif r == (n-1):
liste2[i] = 0 # Schreibe "0" wenn letzte Zeile erreicht ist (abhängig von 'n')
else:
z0 = ((r*n)+j)
z1 = ((((r-1)*n)+j)-1)
z2 = (((r-1)*n)+j)
z3 = ((((r-1)*n)+j)+1)
z4 = (((r*n)+j)-1)
z5 = (((r*n)+j)+1)
z6 = ((((r+1)*n)+j)-1)
z7 = (((r+1)*n)+j)
z8 = ((((r+1)*n)+j)+1)
zg = liste3[z1]+liste3[z2]+liste3[z3]+liste3[z4]+liste3[z5]+liste3[z6]+liste3[z7]+liste3[z8]
# print ('Summe von z0 = ', z)
if zg <= 2:
liste2[z0] = 0 # sterben - unterbevölkert
if zg >=3 and zg <= 4:
liste2[z0] = 1 # weiter leben
if zg > 4:
liste2[z0] = 0 # sterben - überbevölkert
summenwert21 += i*liste2[i]
# Funktionen definieren Ende
def Liste2_darstellen():
i = 0 # Zähler
r = 0 # row - Zeile
j = 0 # colum - Spalte
c1 = 'orange'
c2 = 'white'
for i in range(0,n*n):
r = i//n # Zeilennummer ermitteln
j = i%n # Spaltennummer ermitteln
if liste2[i] == 0:
f = c2
else:
f = c1
# Relief ['SUNKEN','FLAT','RAISED','GROOVE','RIDGE']
l=Label(root,bg=f, relief=SUNKEN, text=' ',width=2).grid(row=r,column=j)
# Funktionen Ende
# ^^^^^^^^^^^^^^^^^^^^^^^^^^
# Funktionen definieren Ende
# ==================================================================================
# ==================================================================================
# Programmcode Start
# vvvvvvvvvvvvvvvvvvvvvvvvvvv
root = Tk()
root.title('===> Game of live <===')
n = 30 # Anzahl von Spalten und Zeilen
liste1 = [] # Startmatrix
liste2 = [] # erste berechnete Ergebnis-Matrix
liste3 = [] # Liste3 erstellen als Zwischenspeicher von Liste2
step = 0
summenwert3 = 0
Liste1_berechnen() # Start Liste1 berechnen und darstellen
root.update()
summenwert3 = summenwert1
#Liste1_lesen() # Liste1 mit print() ausgeben
Liste2_rechnen() # Liste2 aus Liste1 berechnen
#Liste2_lesen() # Liste2 mit print() ausgeben
Liste2_darstellen() # Matrix 2 grafisch ausgeben
root.update()
liste3 = copy.copy(liste1) # Liste1 in Liste3 kopieren
Liste2_erneut_berechnen()
Liste2_darstellen() # Matrix 2 grafisch ausgeben
root.update()
liste3 = copy.copy(liste2) # Liste2 in Liste3 kopieren
while summenwert3 != summenwert21:
print('Listen ungleich - Zähler= ', step)
Liste2_erneut_berechnen() # Funktion um das Liste2 erneut zu berechnen
step += step
Liste2_darstellen() # Matrix 2 grafisch ausgeben
root.update()
print('fertig!')
root.mainloop()
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# Programmciode Ende
# ==================================================================================