Электронная таблица Python, создать доступную сетку списков - PullRequest
0 голосов
/ 09 октября 2018
L=[None]
row=2
column=5
for i in range column:
    print(L*row)

Дело в том, что я легко могу создать сетку.Однако я хочу получить к нему доступ, как к электронной таблице.

Например: теперь я хочу изменить строку 1, столбец 3 на ABC.

Как:

Оригинал

[None] [None]
[None] [None]
[None] [None]
[None] [None]
[None] [None]

Изменение кода

goto(1,3)

[None] [None]
[None] [None]
[None] [None]
[None] [----]
[None] [None]

insert(ABC)

[None] [None]
[None] [None]
[None] [None]
[None] [ABC ]
[None] [None]

Теперь это то, что я хочу, чтобы произошло.Я знаю, как создать код для goto() и insert(), но я не знаю, как получить доступ к сетке.Может кто-нибудь подскажите пожалуйста как получить доступ к сетке?Спасибо.

1 Ответ

0 голосов
/ 09 октября 2018

Здесь вам нужен пользовательский class, который определяет методы goto и insert, которые ведут себя так, как вы только что описали.Вы также можете сделать это, используя глобальные переменные и функции, но использование класса упрощает управление и делает его более переносимым.

Очень простая реализация будет следующей:

class Spreadsheet:
    def __init__(self, rows, columns):
        self.matrix = []
        self.rows = rows
        self.columns = columns
        self.cur_pos = (0, 0)

        for i in range(rows):
            self.matrix.append([])
            for j in range(columns):
                self.matrix[i].append(None)

    def goto(self, x, y):
        if 0 <= x < self.rows and 0 <= y < self.columns:
            self.cur_pos = (x, y)
        else:
            raise Exception('Cannot goto({},{}): matrix indexes out of range!'.format(x, y))


    def insert(self, element):
        self.matrix[self.cur_pos[0]][self.cur_pos[1]] = element

Вы можетезатем используйте это так:

s = Spreadsheet(5, 2)
s.goto(3, 1)
s.insert('ABC')

for line in s.matrix:
    print(line)

Результат будет:

[None, None]
[None, None]
[None, None]
[None, 'ABC']
[None, None]
...