Dictionary wird nicht ergenzt bzw verändert
Verfasst: Mittwoch 23. Februar 2005, 15:25
Hallo liebe Leute
Ich habe ein ganz dickes Problem.
seit einiger Zeit programmiere ich in der Schule Python. Aufgabe war ein Conway game of live mit Donout world zu schreiben.
hier ist eine url mit einer Erklärung und einem Testprogramm leider ohne Donout world. Dies ist jedoch nicht weiter schlim. die Donout world sorgt ledentlich dafür das auch am rand auf der gegenüberligenden seite geschaut wird ob es nachbarn gibt.
so viel zur Aufgabe
ich habe nun also eine Klasse geschrieben die einige Methoden verwendet um das Spiel gemäß den Regeln zu realisieren. Dazu habe ich ein Dictionary verwendet. nur leider verändert sich das dictionary nicht. ich kann keine elemente Löschen und auch keins zufügen
Meine Klasse sieht wie folgt aus:
# -*_ coding: cp1252 _*_
from random import *
import copy
class GameOfLive:
# Initialisierung
def __init__(self):
self.__m_yalt = 0
self.__m_xalt = 0
self.__m_x = 0
self.__m_y = 0
self.__m_anz = 0
self.__m_fielddic = {}
self.__m_lastgenerationdic={}
self.__m_eingabe = 0
# setzen der ersten Zellen
def platzieren(self, anz):
self.__m_fielddic[5,3]='C'
self.__m_fielddic[4,4]='C'
self.__m_fielddic[3,5]='C'
self.__m_fielddic[4,6]='C'
self.__m_fielddic[5,7]='C'
self.__m_fielddic[6,6]='C'
self.__m_fielddic[7,5]='C'
self.__m_fielddic[6,4]='C'
# Nachbarn ermitteln
def nachbar(self, x,y):
self.__m_nachbar=[] for z in range (-1,2): for j in range (-1,2): if x!=x+z or y!=y+j: self.__m_nachbar.append([x+z,y+j]) return copy.copy(self.__m_nachbar)
def ersetzen(self, nachbar):
self.__m_nachbar=nachbar
for item in self.__m_nachbar : for z in range (0,2) : if item[z]<0 : item[z] = 9
if item[z] >9 : item [z]=0 return copy.copy(self.__m_nachbar)
# auswerten
def auswerten(self, nachbar):
self.__m_anz=0
for item in nachbar: if self.__m_lastgenerationdic.has_key(tuple(item)):
self.__anz+=1 return self.__m_anz
# wachsen
def wachse(self,anz,x,y):
if anz==3: if self.__m_lastgenerationdic.has_key((x,y))==False:
self.__m_fielddic[(x,y)]='C'
# sterben
def sterbe(self,anz,x,y):
if (anz < 2) or (anz > 3): if self.__m_lastgenerationdic.has_key((x,y)):
del self.__m_fielddic[(x,y)]
# Attribut hole Feld nach Außen geben
def holeFeld(self):
return copy.copy(self.__m_fielddic)
# Letzte gerneration in einem anderen dictionary speichern
def letztegerneration(self):
self.__m_lastgeneration=copy.copy(self.__m_fielddic)
#Testprogramm
if __name__ == '__main__':
gol=GameOfLive()
field={}
nachbar=[]
eingabe=0
anz=0
zahl=0
# platzieren der ersten zellen und bei Fehler abbrechen
gol.platzieren(zahl)
field=gol.holeFeld()
print 'Startkombination'
print
for z in range (0,100):
if z % 10 == 0 :
print
print field.get((z%10, z/10),' '),
print
gol.letztegerneration()
for i in range (0,100):
nachbar=gol.nachbar(i%10,i/10)
nachbar=gol.ersetzen(copy.copy(nachbar))
anz=gol.auswerten(copy.copy(nachbar))
gol.sterbe(anz,i%10,i/10)
gol.wachse(anz,i%10,i/10)
gol.holeFeld()
print 'naechste gerneration'
print
for z in range (0,100):
if z % 10 == 0 :
print
print field.get((z%10, z/10),' '),
print
soo sieht das programm also ungefair aus
in der Methode wachse passiert nichts und bei sterbe eben so wenig, obwohl der interpreter die Klasse und die Methoden ausführt. Auch die If. ich weiß einfach nicht mehr weiter
Kann mir jemand helfen?
Ich habe ein ganz dickes Problem.
seit einiger Zeit programmiere ich in der Schule Python. Aufgabe war ein Conway game of live mit Donout world zu schreiben.
hier ist eine url mit einer Erklärung und einem Testprogramm leider ohne Donout world. Dies ist jedoch nicht weiter schlim. die Donout world sorgt ledentlich dafür das auch am rand auf der gegenüberligenden seite geschaut wird ob es nachbarn gibt.
so viel zur Aufgabe
ich habe nun also eine Klasse geschrieben die einige Methoden verwendet um das Spiel gemäß den Regeln zu realisieren. Dazu habe ich ein Dictionary verwendet. nur leider verändert sich das dictionary nicht. ich kann keine elemente Löschen und auch keins zufügen
Meine Klasse sieht wie folgt aus:
# -*_ coding: cp1252 _*_
from random import *
import copy
class GameOfLive:
# Initialisierung
def __init__(self):
self.__m_yalt = 0
self.__m_xalt = 0
self.__m_x = 0
self.__m_y = 0
self.__m_anz = 0
self.__m_fielddic = {}
self.__m_lastgenerationdic={}
self.__m_eingabe = 0
# setzen der ersten Zellen
def platzieren(self, anz):
self.__m_fielddic[5,3]='C'
self.__m_fielddic[4,4]='C'
self.__m_fielddic[3,5]='C'
self.__m_fielddic[4,6]='C'
self.__m_fielddic[5,7]='C'
self.__m_fielddic[6,6]='C'
self.__m_fielddic[7,5]='C'
self.__m_fielddic[6,4]='C'
# Nachbarn ermitteln
def nachbar(self, x,y):
self.__m_nachbar=[] for z in range (-1,2): for j in range (-1,2): if x!=x+z or y!=y+j: self.__m_nachbar.append([x+z,y+j]) return copy.copy(self.__m_nachbar)
def ersetzen(self, nachbar):
self.__m_nachbar=nachbar
for item in self.__m_nachbar : for z in range (0,2) : if item[z]<0 : item[z] = 9
if item[z] >9 : item [z]=0 return copy.copy(self.__m_nachbar)
# auswerten
def auswerten(self, nachbar):
self.__m_anz=0
for item in nachbar: if self.__m_lastgenerationdic.has_key(tuple(item)):
self.__anz+=1 return self.__m_anz
# wachsen
def wachse(self,anz,x,y):
if anz==3: if self.__m_lastgenerationdic.has_key((x,y))==False:
self.__m_fielddic[(x,y)]='C'
# sterben
def sterbe(self,anz,x,y):
if (anz < 2) or (anz > 3): if self.__m_lastgenerationdic.has_key((x,y)):
del self.__m_fielddic[(x,y)]
# Attribut hole Feld nach Außen geben
def holeFeld(self):
return copy.copy(self.__m_fielddic)
# Letzte gerneration in einem anderen dictionary speichern
def letztegerneration(self):
self.__m_lastgeneration=copy.copy(self.__m_fielddic)
#Testprogramm
if __name__ == '__main__':
gol=GameOfLive()
field={}
nachbar=[]
eingabe=0
anz=0
zahl=0
# platzieren der ersten zellen und bei Fehler abbrechen
gol.platzieren(zahl)
field=gol.holeFeld()
print 'Startkombination'
for z in range (0,100):
if z % 10 == 0 :
print field.get((z%10, z/10),' '),
gol.letztegerneration()
for i in range (0,100):
nachbar=gol.nachbar(i%10,i/10)
nachbar=gol.ersetzen(copy.copy(nachbar))
anz=gol.auswerten(copy.copy(nachbar))
gol.sterbe(anz,i%10,i/10)
gol.wachse(anz,i%10,i/10)
gol.holeFeld()
print 'naechste gerneration'
for z in range (0,100):
if z % 10 == 0 :
print field.get((z%10, z/10),' '),
soo sieht das programm also ungefair aus
in der Methode wachse passiert nichts und bei sterbe eben so wenig, obwohl der interpreter die Klasse und die Methoden ausführt. Auch die If. ich weiß einfach nicht mehr weiter
Kann mir jemand helfen?
