15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

for _ in range(self.height):

self.rows.append([EMPTY] * self.width)

def __str__(self):

# ...

A grade permite que se obtenha (get) e defina (set) o valor de cada coordenada.

As coordenadas que estiverem além dos limites da grade serão recalculadas para

aparecer na margem oposta, tornando a grade um espaço infinito esférico.

def query(self, y, x):

return self.rows[y % self.height][x % self.width]

def assign(self, y, x, state):

self.rows[y % self.height][x % self.width] = state

Por fim, e até que enfim, podemos definir a função que interpreta os valores

produzidos por simulate e todas as suas corrotinas inferiores. Essa função toma

as instruções das corrotinas e as transforma em interações com o ambiente em

volta da célula. Toda a grade é varrida, uma célula por vez, e retorna uma nova

grade contendo os estados da próxima geração de células.

def live_a_generation(grid, sim):

progeny = Grid(grid.height, grid.width)

item = next(sim)

while item is not TICK:

if isinstance(item, Query):

state = grid.query(item.y, item.x)

item = sim.send(state)

else: # Deve necessariamente passar pela transição

progeny.assign(item.y, item.x, item.state)

item = next(sim)

return progeny

Para ver essa função fazer seu trabalho, precisamos criar uma grade e determinar

seu estado inicial. No exemplo de código a seguir, implementamos uma das

formas clássicas que possuem comportamento matemático previsto: o planador

ou, como é mais conhecido, glider:

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!