3 svar
241 visningar
twixx_erzz 4
Postad: 27 feb 2021 00:16

get_neighbours "game of life"

Hej, 

Jag har fastnat på denna uppgift som är frågar om att returnera en lista med de 8 grannarna till cellen. 

 

Jag har testat och skriva ner och bestämma vad de blir för koordinater i formen (x + dx,y + dy) för varje dx i [-1,0,1] och för varje dy i [-1,0,1] men det är någonting som är fel. 

 

Jag får alltid denna meddelande: 

 

"TypeError: 'int' object is not iterable". 

 

Ni kan också se koden och vad jag har försökt göra och alltså self._x är x koordinaten av cellen self._y är y koordinaten. 

 

Laguna Online 30484
Postad: 27 feb 2021 09:01

Det blir fel för att du försöker utföra

list(count)

och det är samma som list(0) här. 'list' gör nog inte vad du tror. Den gör om nåt som kan ses som en lista, till en ren lista. Men ett heltal kan inte göras till en lista. Vill man göra en lista med heltalet i skriver man bara

[count]

Du kanske menar

list(neighbours)

Vad har du 'count' till?

Om man tittar utanför metoden: du vill göra x.coordinates() for x in c.neighbors() senare, men x blir bara en tupel med heltal. Den har ingen metod 'coordinates'.

Jag rekommenderar dessutom att du inte varierar stavningen så här: neighbor/neighbour. Det kan skapa stor förvirring när man läser koden.

twixx_erzz 4
Postad: 27 feb 2021 10:26

Hej, 

Nu har jag tagit bort count för att jag insåg att det var meningslös där. Det jag har kvar är neighbours = [ alla koordinater här inne] och sedan returnerar jag neighbours. 

 

Det blir korrekt och får alla koordinater när jag bara printar till exempel >>> print(Cell(0,0).neighbors()). 

Men när jag printar >>>print([ x.coordinates() for x in Cell(0,0).neighbors() ]) 

så får jag denna meddelande: " AttributeError: 'tuple' object has no attribute 'coordinates' ".

Skaft 2373 – F.d. Moderator
Postad: 27 feb 2021 10:45

Felmeddelandet handlar om att du inte har cell-objekt i din neighbours-lista, utan bara tuplar. Dvs, du har t.ex. (2, 3) istället för Cell(2, 3). Det är Cell-objekten som har coordinates()-metoden du försöker använda, vanliga tuplar har det inte.

En lösning på det problemet är att skapa Cell-objekt i din neighbors-funktion, på samma sätt som du skapar tuplarna. Dvs, nåt i stil med:

neighbours = [
    Cell(self._x - 1, self._y - 1),
    Cell(self._x - 1, self._y),
    ...
]

Men det kanske inte är bästa lösningen. Det skulle innebära att du skapar nya cellobjekt varje gång den här neighbors-funktionen används, och det känns som resursslöseri. En bättre idé vore att bara ha en enda uppsättning med cellobjekt, som den här neighbors-funktionen kan plocka cellerna från.

Svara
Close