Как передавать одному методу класса операции из другого метода?
Есть код, который нужно дополнить(по заданию)
class Render():
def __init__(self):
pass
def init_screen(self, h, w):
raise NotImplementedError
def add_object(self, char, x, y):
raise NotImplementedError
def draw_screen(self):
raise NotImplementedError
def get_input(self):
raise NotImplementedError
Интерфейс этого класса, помимо конструктора, состоит из четырех методов:
- init_screen, инициализация экрана заданной высоты и ширины.
- add_object, добавление объекта на экран. Эта функция принимает символ, который нужно нарисовать и его позицию на экране.
- draw_screen, отрисовка экрана.
- get_input, получение пользовательского ввода.
Необходимо завести класс ShellRenderer, который будет рисовать экран игры в консоли.
- Заведите в нем поле _screen, которое будет представлять собой список списков символов, размера h на w.
- Инициализируйте его пробелами при вызове метода init_screen.
- Метод add_object должен изменять значение одного из элементов списка _screen на символ char.
- Метод draw_screen должен выводить список на печать при помощи вызова print.
- В методе get_input можно использовать функцию input, чтобы получить пользовательский ввод. Возвращайте введенную пользователем строку.
Я сделал практически всё, что требовалось, но у меня проблема в self._screen, туда не передаётся элемент из add_object.
class ShellRender(Render):
def init_screen(self, h, w):
self.h = h
self.w = w
self._screen = ["\n".join(map(str, [self for i in range(w)])) for j in range(h)]
def add_object(self, char, x, y):
self.char = x, y
def draw_screen(self):
print(self.char)
def get_input(self):
return input()
Если _screen = [['*', '+', '*'], ['#', '#', '#']], то печатаем
*+*
###
Надеюсь на помощь в преобразовании моего кода под задание, я явно делаю что-то не так...в частности я не могу передать из одного метода элемент char в другой метод, ну то есть в char по идее будут задаваться какие-то символы по типу *, +, *. Но возможно я что-то ещё сделал не так.
Ответы (1 шт):
Вы кажется путаете между собой _screen и char. Нужно как-то так:
def add_object(self, char, x, y):
self._screen[y][x] = char
def draw_screen(self):
print(self._screen)
И да, ещё нужно инициализировать _screen как список списков, а вот уже печатать его - с помощью join и т.д.