Функция def __str__ получает ошибку нетипа [дубликат] ⇐ Python
Функция def __str__ получает ошибку нетипа [дубликат]
Я слежу за проектом на Python по созданию игры-сапера (12 проектов Python для начинающих) с сайта freecodecamp на YouTube. человек использует функцию str для отображения доски. они отображают длительный процесс, который, кажется, вместо этого вырезают, а затем я цитирую «очистить код». ошибка, которую я получаю: __str__ возвращает не строку (тип Nonetype) весь код имеет правильные отступы, но когда вопрос опубликован, импорт и класс вверху, а бит внизу становится немного странным. не стесняйтесь копировать, вставлять и тестировать. спасибо
импортировать случайным образом импортировать повторно Совет класса: def __init__(self, dim_size, num_bombs): self.dim_size = dim_size self.num_bombs = num_bombs self.board = self.make_new_board() self.assign_values_to_board() self.dug = set() #if выкопал (9,0) self.dug = {(9,0)} защита make_new_board(self): board = [[Нет для _ в диапазоне (self.dim_size)] для _ в диапазоне (self.dim_size)] бомбы_посажены = 0 в то время как бомбы_посажены < self.num_bombs: row = loc // self.dim_size col = loc % self.dim_size если доска[строка][столбец] == '*': продолжать доска[строка][столбец] = '*' бомбы_засажены += 1 доска возврата Защиту Assign_values_to_board (сам): для r в диапазоне (self.dim_size): для c в диапазоне (self.dim_size): если self.board[r][c] == '*': продолжать self.board[r][c] = self.get_num_of_neighboring_bombs(r, c) def get_num_of_neighboring_bombs(self, row, col): num_neighboring_bombs = 0 для r в диапазоне (max(0, row-1), min(self.dim_size-1, row+1)+1): для c в диапазоне (max(0, col-1), min(self.dim_size-1, col+1)+1): если r == строка и c == столбец: продолжать если self.board[r][c] == '*': num_neighboring_bombs += 1 вернуть num_neighboring_bombs def dig(self, row, col): self.dug.add((строка, столбец)) если self.board[row][col] == '*': вернуть ложь элиф self.board[строка][столбец] > 0: вернуть истину для r в диапазоне (max(0, row-1), min(self.dim_size-1, row+1)+1): для c в диапазоне (max(0, col-1), min(self.dim_size-1, col+1)+1): if (r, c) в self.dug: продолжать self.dig(r, c) вернуть истину защита __str__(сам): видимая_доска = [[Нет для _ в диапазоне (self.dim_size)] для _ в диапазоне (self.dim_size)] для строки в диапазоне (self.dim_size): для столбца в диапазоне (self.dim_size): if (строка, столбец) в self.dug: видимая_доска[строка][столбец] = str(self.board[строка][столбец]) еще: видимая_доска[строка][столбец] = '' def play(dim_size = 10, num_bombs = 10): доска = Доска (dim_size, num_bombs) безопасно = Истина в то время как len(board.dug) < board.dim_size ** 2 - num_bombs: печать (доска) user_input = re.split(',(\\s)*', input("Куда вы хотите копать? Введите как row,col: ")) строка, столбец = int(user_input[0]), int(user_input[-1]) если row < 0 или row >= board.dim_size или col < 0 или col >= board.dim_size: print("Неверное местоположение, попробуйте еще раз") продолжать сейф = board.dig(строка, столбец) если не безопасно: перерыв если безопасно: print("Поздравляем!!! Вы завершили игру и выиграли") еще: print("Извините, вы попали в бомбу! Игра окончена") board.dug = [(r,c) для r в диапазоне (board.dim_size) для c в диапазоне (board.dim_size)] печать (доска) если __name__ == '__main__': играть()
Я слежу за проектом на Python по созданию игры-сапера (12 проектов Python для начинающих) с сайта freecodecamp на YouTube. человек использует функцию str для отображения доски. они отображают длительный процесс, который, кажется, вместо этого вырезают, а затем я цитирую «очистить код». ошибка, которую я получаю: __str__ возвращает не строку (тип Nonetype) весь код имеет правильные отступы, но когда вопрос опубликован, импорт и класс вверху, а бит внизу становится немного странным. не стесняйтесь копировать, вставлять и тестировать. спасибо
импортировать случайным образом импортировать повторно Совет класса: def __init__(self, dim_size, num_bombs): self.dim_size = dim_size self.num_bombs = num_bombs self.board = self.make_new_board() self.assign_values_to_board() self.dug = set() #if выкопал (9,0) self.dug = {(9,0)} защита make_new_board(self): board = [[Нет для _ в диапазоне (self.dim_size)] для _ в диапазоне (self.dim_size)] бомбы_посажены = 0 в то время как бомбы_посажены < self.num_bombs: row = loc // self.dim_size col = loc % self.dim_size если доска[строка][столбец] == '*': продолжать доска[строка][столбец] = '*' бомбы_засажены += 1 доска возврата Защиту Assign_values_to_board (сам): для r в диапазоне (self.dim_size): для c в диапазоне (self.dim_size): если self.board[r][c] == '*': продолжать self.board[r][c] = self.get_num_of_neighboring_bombs(r, c) def get_num_of_neighboring_bombs(self, row, col): num_neighboring_bombs = 0 для r в диапазоне (max(0, row-1), min(self.dim_size-1, row+1)+1): для c в диапазоне (max(0, col-1), min(self.dim_size-1, col+1)+1): если r == строка и c == столбец: продолжать если self.board[r][c] == '*': num_neighboring_bombs += 1 вернуть num_neighboring_bombs def dig(self, row, col): self.dug.add((строка, столбец)) если self.board[row][col] == '*': вернуть ложь элиф self.board[строка][столбец] > 0: вернуть истину для r в диапазоне (max(0, row-1), min(self.dim_size-1, row+1)+1): для c в диапазоне (max(0, col-1), min(self.dim_size-1, col+1)+1): if (r, c) в self.dug: продолжать self.dig(r, c) вернуть истину защита __str__(сам): видимая_доска = [[Нет для _ в диапазоне (self.dim_size)] для _ в диапазоне (self.dim_size)] для строки в диапазоне (self.dim_size): для столбца в диапазоне (self.dim_size): if (строка, столбец) в self.dug: видимая_доска[строка][столбец] = str(self.board[строка][столбец]) еще: видимая_доска[строка][столбец] = '' def play(dim_size = 10, num_bombs = 10): доска = Доска (dim_size, num_bombs) безопасно = Истина в то время как len(board.dug) < board.dim_size ** 2 - num_bombs: печать (доска) user_input = re.split(',(\\s)*', input("Куда вы хотите копать? Введите как row,col: ")) строка, столбец = int(user_input[0]), int(user_input[-1]) если row < 0 или row >= board.dim_size или col < 0 или col >= board.dim_size: print("Неверное местоположение, попробуйте еще раз") продолжать сейф = board.dig(строка, столбец) если не безопасно: перерыв если безопасно: print("Поздравляем!!! Вы завершили игру и выиграли") еще: print("Извините, вы попали в бомбу! Игра окончена") board.dug = [(r,c) для r в диапазоне (board.dim_size) для c в диапазоне (board.dim_size)] печать (доска) если __name__ == '__main__': играть()
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Технические различия и преимущества: def (*args) и def (args=None) в Python [закрыто]
Anonymous » » в форуме Python - 0 Ответы
- 26 Просмотры
-
Последнее сообщение Anonymous
-