""" Игра Сапер https://stepik.org/lesson/701975/step/12?unit=702076 """ import random class Cell: def __init__(self, around_mines, mine): self.around_mines, self.mine = around_mines, mine self.fl_open = False class GamePole: around_offsets = ( (-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1), ) def __init__(self, N, M): self.N, self.M = N, M self.init() def init(self): gen = iter(range(1, self.M + 1)) flat_pole = [ Cell(0, bool(next(gen, 0))) for _ in range(self.N) for _ in range(self.N) ] random.shuffle(flat_pole) self.pole = [flat_pole[i : i + self.N] for i in range(0, self.N**2, self.N)] self.fill_around() def fill_around(self): for i in range(self.N): for j in range(self.N): self.pole[i][j].around_mines = self.count_around(i, j) def count_around(self, x, y): return sum( ( self.pole[x + i][y + j].mine for i, j in GamePole.around_offsets if 0 <= x + i < self.N and 0 <= y + j < self.N ) ) def open(self): for i in range(self.N): for j in range(self.N): self.pole[i][j].fl_open = True def show(self): for row in self.pole: print( *map( lambda x: ( "#" if not x.fl_open else x.around_mines if not x.mine else "*" ), row, ) ) pole_game = GamePole(10, 12) pole_game.open() pole_game.show()