Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.99/347: Рейтинг темы: голосов - 347, средняя оценка - 4.99
7 / 7 / 0
Регистрация: 15.02.2018
Сообщений: 56

Реализовать класс Table, который хранит целые числа в двумерной таблице

22.03.2018, 22:31. Показов 73326. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Реализовать класс Table, который хранит целые числа в двумерной таблице. При инициализации Table(rows, cols) экземпляру передаются число строк и столбцов в таблице. Строки и столбцы нумеруются с нуля. Ячейки таблицы инициализируются нулями.

table.get_value(row, col) — прочитать значение из ячейки со строкой row, столбцом col. Если ячейка с индексами row и col не лежит внутри таблицы, нужно вернуть None.

table.set_value(row, col, value) — записать число в ячейку со строкой row, столбцом col. Гарантируется, что в тестах будет в запись только в ячейки внутри таблицы.

table.n_rows() — вернуть число строк в таблице.

table.n_cols() — вернуть число столбцов в таблице.

Формат ввода
Каждый тест представляет собой код, в котором будут использоваться ваш класс. Файл c решением не обязательно называть solution.py, он будет переименован автоматически. Тест запускается с вашим классом, а его вывод сравнивается с правильным решением.

Пример 1
Ввод Вывод
Python
1
2
3
4
5
6
7
8
9
10
from solution import Table
 
tab = Table(3, 5)
tab.set_value(0, 1, 10)
tab.set_value(1, 2, 20)
tab.set_value(2, 3, 30)
for i in range(tab.n_rows()):
    for j in range(tab.n_cols()):
        print(tab.get_value(i, j), end=' ')
    print()
0 10 0 0 0
0 0 20 0 0
0 0 0 30 0
Пример 2
Ввод Вывод
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from solution import Table
 
tab = Table(2, 2)
 
for i in range(tab.n_rows()):
    for j in range(tab.n_cols()):
        print(tab.get_value(i, j), end=' ')
    print()
print()
 
tab.set_value(0, 0, 10)
tab.set_value(0, 1, 20)
tab.set_value(1, 0, 30)
tab.set_value(1, 1, 40)
 
for i in range(tab.n_rows()):
    for j in range(tab.n_cols()):
        print(tab.get_value(i, j), end=' ')
    print()
print()
 
for i in range(-1, tab.n_rows() + 1):
    for j in range(-1, tab.n_cols() + 1):
        print(tab.get_value(i, j), end=' ')
    print()
print()
0 0
0 0

10 20
30 40

None None None None
None 10 20 None
None 30 40 None
None None None None

Пример 3
Ввод Вывод
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from solution import Table
 
tab = Table(1, 1)
 
for i in range(tab.n_rows()):
    for j in range(tab.n_cols()):
        print(tab.get_value(i, j), end=' ')
    print()
print()
 
tab.set_value(0, 0, 1000)
 
for i in range(tab.n_rows()):
    for j in range(tab.n_cols()):
        print(tab.get_value(i, j), end=' ')
    print()
print()
 
for i in range(-1, tab.n_rows() + 1):
    for j in range(-1, tab.n_cols() + 1):
        print(tab.get_value(i, j), end=' ')
    print()
print()
0

1000

None None None
None 1000 None
None None None
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.03.2018, 22:31
Ответы с готовыми решениями:

Класс Table, который хранит целые числа в двумерной таблице
Задача: Реализуйте класс Table, который хранит целые числа в двумерной таблице. При инициализации Table(rows, cols) экземпляру передаются...

Реализуйте класс, который хранит целые числа в двумерной таблице
Реализуйте класс Table, который хранит целые числа в двумерной таблице. При инициализации Table(rows, cols) экземпляру передаются число...

Создать класс HugeInt, который хранит в 40-элементном массиве цифр целые числа разрядностью до 40 знаков
Всем привет! Хочу решить вот такую задачу: Создать класс HugeInt, который хранит в 40-элементном массиве цифр целые числа разрядностью до...

27
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
23.03.2018, 21:15
Лучший ответ Сообщение было отмечено Taranboy как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Table(object):
    
    def __init__(self,rows, cols):
        self.field = [ [0 for _ in range(cols)] for _ in range(rows) ]
        self.rows = rows
        self.cols = cols
        
    def get_value(self, row, col):
        if  row in range(self.rows) and col in range(self.cols):
            return self.field[row][col]
        return
 
    def set_value(self, row, col,value):
        self.field[row][col] = value
    
    def n_rows(self):
        return self.rows
 
    def n_cols(self):
        return self.cols
4
-5 / 10 / 0
Регистрация: 14.03.2019
Сообщений: 52
27.03.2019, 13:10
Пожалуйста помоги , этот код выдает ошибку
Traceback (most recent call last):
File "test.py", line 3, in <module>
exec(sys.stdin.read().strip())
File "<string>", line 13, in <module>
AttributeError: 'Table' object has no attribute 'add_row'
make: *** [run] Error 1
Ввод
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from solution import Table
 
tab = Table(3, 5)
tab.set_value(0, 1, 10)
tab.set_value(1, 2, 20)
tab.set_value(2, 3, 30)
for i in range(tab.n_rows()):
    for j in range(tab.n_cols()):
        print(tab.get_value(i, j), end=' ')
    print()
print()
 
tab.add_row(1)
 
for i in range(tab.n_rows()):
    for j in range(tab.n_cols()):
        print(tab.get_value(i, j), end=' ')
    print()
print()
Ожидаемый результат
0 10 0 0 0
0 0 20 0 0
0 0 0 30 0

0 10 0 0 0
0 0 0 0 0
0 0 20 0 0
0 0 0 30 0

Вывод
0 10 0 0 0
0 0 20 0 0
0 0 0 30 0

Makefile:5: recipe for target 'run' failed
Сообщение
Completion status: ABNORMAL_EXIT
Term sig: null
Error code: 2
0
2 / 2 / 1
Регистрация: 23.10.2018
Сообщений: 15
04.04.2019, 15:51
На этот код ругается PEP8!
Я переделал немного,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Table(object):
 
    def __init__(self, rows, cols):
        self.field = [[0 for _ in range(cols)] for _ in range(rows)]
        self.rows = rows
        self.cols = cols
 
    def get_value(self, row, col):
        if row in range(self.rows) and col in range(self.cols):
            return self.field[row][col]
        return
 
    def set_value(self, row, col, value):
        self.field[row][col] = value
 
    def n_rows(self):
        return self.rows
 
    def n_cols(self):
        return self.cols
0
-5 / 10 / 0
Регистрация: 14.03.2019
Сообщений: 52
04.04.2019, 19:45
Нет выходит такая же ошибка, но все равно спасибо)Помогите пожалуйста
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
06.04.2019, 21:53
Цитата Сообщение от Paxerio Посмотреть сообщение
Нет выходит такая же ошибка, но все равно спасибо)Помогите пожалуйста
tab.add_row(1) ????
посмотри атрибуты класса Table, там нет метода add_row о чем тебе и говорится в ошибке. в задании тоже нет ни слова о методе add_row.

Добавлено через 6 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from solution import Table
 
tab = Table(3, 5)
tab.set_value(0, 1, 10)
tab.set_value(1, 2, 20)
tab.set_value(2, 3, 30)
for i in range(tab.n_rows()):
    for j in range(tab.n_cols()):
        print(tab.get_value(i, j), end=' ')
    print()
print()
  
for i in range(tab.n_rows()):
    for j in range(tab.n_cols()):
        print(tab.get_value(i, j), end=' ')
    print()
print()
0 10 0 0 0
0 0 20 0 0
0 0 0 30 0

0 10 0 0 0
0 0 20 0 0
0
-5 / 10 / 0
Регистрация: 14.03.2019
Сообщений: 52
11.04.2019, 22:13
Здравствуйте, вот полное условие помогите пожалуйста!
Реализуйте класс Table, который хранит целые числа в двумерной таблице. При инициализации Table(rows, cols) экземпляру передаются число строк и столбцов в таблице. Строки и столбцы нумеруются с нуля.

table.get_value(row, col) — прочитать значение из ячейки в строке row, столбце col. Если ячейка с индексами row и col не лежит внутри таблицы, нужно вернуть None.

table.set_value(row, col, value) — записать число в ячейку строки row, столбца col. Гарантируется, что в тестах будет в запись только в ячейки внутри таблицы.

table.n_rows() — вернуть число строк в таблице

table.n_cols() — вернуть число столбцов в таблице

table.delete_row(row) — удалить строку с номером row

table.delete_col(col) — удалить колонку с номером col

table.add_row(row) — добавить в таблицу новую строку с индексом row.
Номера строк >= row, должны увеличится на единицу. Новая строка состоит из нулей.

table.add_col(col) — добавить в таблицу новую колонку с индексом col.
Номера колонок >= col, должны увеличится на единицу. Новая колонка состоит из нулей.
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
12.04.2019, 08:45
Почитайте про списки и классы в Python. Пример программы у вас есть. Попробуйте решить задачу сами. А если будут проблемы, то пишите сюда.
0
8 / 8 / 0
Регистрация: 24.04.2019
Сообщений: 13
24.04.2019, 18:32
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
class Table(object):
 
    def __init__(self, rows, cols):
        self._rows = rows
        self._cols = cols
        self._table = [[0] * cols for _ in range(rows)]
 
    def get_value(self, row, col):
        return (self._table[row][col] if 0 <= row < self._rows and 0 <= col < self._cols
                else None)
 
    def set_value(self, row, col, value):
        self._table[row][col] = value
 
    def n_rows(self):
        return self._rows
 
    def n_cols(self):
        return self._cols
 
    def delete_row(self, row):
        self._table.pop(row)
        self._rows -= 1
 
    def delete_col(self, col):
        for row in range(self._rows):
            self._table[row].pop(col)
        self._cols -= 1
 
    def add_row(self, row):
        self._table.insert(row, [0] * self._cols)
        self._rows += 1
 
    def add_col(self, col):
        for row in range(self._rows):
            self._table[row].insert(col, 0)
        self._cols += 1
 
 
def main():
    # Example 1
    tab = Table(3, 5)
    tab.set_value(0, 1, 10)
    tab.set_value(1, 2, 20)
    tab.set_value(2, 3, 30)
    for i in range(tab.n_rows()):
        for j in range(tab.n_cols()):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
    tab.add_row(1)
 
    for i in range(tab.n_rows()):
        for j in range(tab.n_cols()):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
    # Example 2
    tab = Table(2, 2)
 
    for i in range(tab.n_rows()):
        for j in range(tab.n_cols()):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
    tab.set_value(0, 0, 10)
    tab.set_value(0, 1, 20)
    tab.set_value(1, 0, 30)
    tab.set_value(1, 1, 40)
 
    for i in range(tab.n_rows()):
        for j in range(tab.n_cols()):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
    for i in range(-1, tab.n_rows() + 1):
        for j in range(-1, tab.n_cols() + 1):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
    tab.add_row(0)
    tab.add_col(1)
 
    for i in range(-1, tab.n_rows() + 1):
        for j in range(-1, tab.n_cols() + 1):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
    # Example 3
    tab = Table(1, 1)
 
    for i in range(tab.n_rows()):
        for j in range(tab.n_cols()):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
    tab.set_value(0, 0, 1000)
 
    for i in range(tab.n_rows()):
        for j in range(tab.n_cols()):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
    for i in range(-1, tab.n_rows() + 1):
        for j in range(-1, tab.n_cols() + 1):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
    tab.add_row(0)
    tab.add_row(2)
    tab.add_col(0)
    tab.add_col(2)
 
    tab.set_value(0, 0, 2000)
    tab.set_value(0, 2, 3000)
    tab.set_value(2, 0, 4000)
    tab.set_value(2, 2, 5000)
 
    for i in range(-1, tab.n_rows() + 1):
        for j in range(-1, tab.n_cols() + 1):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
 
if __name__ == "__main__":
    main()
 
[size="1"][color="grey"][I]Добавлено через 1 минуту[/I][/color][/size]
class Table(object):
 
    def __init__(self, rows, cols):
        self._rows = rows
        self._cols = cols
        self._table = [[0] * cols for _ in range(rows)]
 
    def get_value(self, row, col):
        return (self._table[row][col] if 0 <= row < self._rows and 0 <= col < self._cols
                else None)
 
    def set_value(self, row, col, value):
        self._table[row][col] = value
 
    def n_rows(self):
        return self._rows
 
    def n_cols(self):
        return self._cols
 
    def delete_row(self, row):
        self._table.pop(row)
        self._rows -= 1
 
    def delete_col(self, col):
        for row in range(self._rows):
            self._table[row].pop(col)
        self._cols -= 1
 
    def add_row(self, row):
        self._table.insert(row, [0] * self._cols)
        self._rows += 1
 
    def add_col(self, col):
        for row in range(self._rows):
            self._table[row].insert(col, 0)
        self._cols += 1
 
 
def main():
    # Example 1
    tab = Table(3, 5)
    tab.set_value(0, 1, 10)
    tab.set_value(1, 2, 20)
    tab.set_value(2, 3, 30)
    for i in range(tab.n_rows()):
        for j in range(tab.n_cols()):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
    tab.add_row(1)
 
    for i in range(tab.n_rows()):
        for j in range(tab.n_cols()):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
    # Example 2
    tab = Table(2, 2)
 
    for i in range(tab.n_rows()):
        for j in range(tab.n_cols()):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
    tab.set_value(0, 0, 10)
    tab.set_value(0, 1, 20)
    tab.set_value(1, 0, 30)
    tab.set_value(1, 1, 40)
 
    for i in range(tab.n_rows()):
        for j in range(tab.n_cols()):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
    for i in range(-1, tab.n_rows() + 1):
        for j in range(-1, tab.n_cols() + 1):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
    tab.add_row(0)
    tab.add_col(1)
 
    for i in range(-1, tab.n_rows() + 1):
        for j in range(-1, tab.n_cols() + 1):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
    # Example 3
    tab = Table(1, 1)
 
    for i in range(tab.n_rows()):
        for j in range(tab.n_cols()):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
    tab.set_value(0, 0, 1000)
 
    for i in range(tab.n_rows()):
        for j in range(tab.n_cols()):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
    for i in range(-1, tab.n_rows() + 1):
        for j in range(-1, tab.n_cols() + 1):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
    tab.add_row(0)
    tab.add_row(2)
    tab.add_col(0)
    tab.add_col(2)
 
    tab.set_value(0, 0, 2000)
    tab.set_value(0, 2, 3000)
    tab.set_value(2, 0, 4000)
    tab.set_value(2, 2, 5000)
 
    for i in range(-1, tab.n_rows() + 1):
        for j in range(-1, tab.n_cols() + 1):
            print(tab.get_value(i, j), end=' ')
        print()
    print()
 
 
if __name__ == "__main__":
    main()
Добавлено через 1 минуту
Я не знаю, в чем проблема, отступы пропадают
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
25.04.2019, 07:49
Можно попробовать занести код в теги [PYTHON][/PYTHON]
0
11 / 10 / 1
Регистрация: 02.03.2019
Сообщений: 16
25.04.2019, 20:03
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
class Table(object):
    def __init__(self, rows, cols):
        #  self.field = [[0 for _ in range(cols)] for _ in range(rows)]
        self.rows = rows
        self.cols = cols
        self.table = [[0] * cols for _ in range(rows)]
 
    def get_value(self, row, col):
        if row in range(self.rows) and col in range(self.cols):
            return self.table[row][col]
        return
 
    def set_value(self, row, col, value):
        self.table[row][col] = value
 
    def n_rows(self):
        return self.rows
 
    def n_cols(self):
        return self.cols
 
    def delete_row(self, row):
        self.table.pop(row)
        self.rows -= 1
 
    def delete_col(self, col):
        for row in range(self.rows):
            self.table[row].pop(col)
            self.cols -= 1
 
    def add_row(self, row):
        self.table.insert(row, [0] * self.cols)
        self.rows += 1
 
    def add_col(self, col):
        for row in range(self.rows):
            self.table[row].insert(col, 0)
            self.cols += 1
 
 
tab = Table(2, 2)
 
for i in range(tab.n_rows()):
    for j in range(tab.n_cols()):
        print(tab.get_value(i, j), end=' ')
    print()
print()
 
tab.set_value(0, 0, 10)
tab.set_value(0, 1, 20)
tab.set_value(1, 0, 30)
tab.set_value(1, 1, 40)
 
for i in range(tab.n_rows()):
    for j in range(tab.n_cols()):
        print(tab.get_value(i, j), end=' ')
    print()
print()
 
for i in range(-1, tab.n_rows() + 1):
    for j in range(-1, tab.n_cols() + 1):
        print(tab.get_value(i, j), end=' ')
    print()
print()
 
tab.add_row(0)
tab.add_col(1)
 
for i in range(-1, tab.n_rows() + 1):
    for j in range(-1, tab.n_cols() + 1):
        print(tab.get_value(i, j), end=' ')
    print()
print()
Не понимаю
0
-5 / 10 / 0
Регистрация: 14.03.2019
Сообщений: 52
29.04.2019, 17:32
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Table(object):
 
def __init__(self, rows, cols):
self._rows = rows
self._cols = cols
self._table = [[0] * cols for _ in range(rows)]
 
def get_value(self, row, col):
return (self._table[row][col] if 0 <= row < self._rows and 0 <= col < self._cols
else None)
 
def set_value(self, row, col, value):
self._table[row][col] = value
 
def n_rows(self):
return self._rows
 
def n_cols(self):
return self._cols
 
def delete_row(self, row):
self._table.pop(row)
self._rows -= 1
 
def delete_col(self, col):
for row in range(self._rows):
self._table[row].pop(col)
self._cols -= 1
 
def add_row(self, row):
self._table.insert(row, [0] * self._cols)
self._rows += 1
 
def add_col(self, col):
for row in range(self._rows):
self._table[row].insert(col, 0)
self._cols += 1
0
11 / 10 / 1
Регистрация: 02.03.2019
Сообщений: 16
29.04.2019, 19:18
Не работает
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
29.04.2019, 23:31
Taranboy, У Вас само задание не грамотное. При наличии атрибутов rows и cols бессмысленно вводить методы показывающие количество строк и колонок в таблице. Потому , что по сути количество строк и колонок в таблице, это свойства таблицы, то есть атрибуты. А методы должны осуществлять какие либо действия с таблицей, как делают методы занесения и чтения данных из таблицы, table.set_value(row, col, value) и table.get_value(row, col).
Значения же количества строк или колонок в таблице хранятся в атрибутах таблицы, и просто считываются. Для этого не нужно создавать методы. Вот если бы потребовалось посчитать количество заполненных строк или колонок числами отличными от нуля, вот тогда для этого понадобились бы методы.
Кто дает такие задания, явно плохо разбирается в ООП.
0
5 / 5 / 0
Регистрация: 25.07.2018
Сообщений: 12
30.04.2019, 07:15
Немного исправил ваши решения:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Table(object):
 
    def __init__(self, rows, cols):
        self.field = [[0 for _ in range(cols)] for _ in range(rows)]
        self.rows = rows
        self.cols = cols
 
    def get_value(self, row, col):
        if row in range(self.rows) and col in range(self.cols):
            return self.field[row][col]
        return
 
    def set_value(self, row, col, value):
        self.field[row][col] = value
 
    def n_rows(self):
        return self.rows
 
    def n_cols(self):
        return self.cols
 
    def add_row(self, row):
        self.field.insert(row, [0] * self.cols)
        self.rows += 1
 
    def add_col(self, col):
        for row in range(self.rows):
            self.field[row].insert(col, 0)
        self.cols += 1
 
    def delete_row(self, row):
        self.field.pop(row)
        self.rows -= 1
 
    def delete_col(self, col):
        for row in range(self.rows):
            self.field[row].pop(col)
        self.cols -= 1
5
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
30.04.2019, 13:11
Цитата Сообщение от Viktorrus Посмотреть сообщение
При наличии атрибутов rows и cols бессмысленно вводить методы показывающие количество строк и колонок в таблице. Потому , что по сути количество строк и колонок в таблице, это свойства таблицы, то есть атрибуты
ну да это когда список статичный но после удаления или добавления строки или колонки то значения эти меняются и методы выводит текущие значения. поэтому в этих методах при изменении состояния таблицы и меняются значения
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def add_row(self, row):
        self.field.insert(row, [0] * self.cols)
        self.rows += 1
 
    def add_col(self, col):
        for row in range(self.rows):
            self.field[row].insert(col, 0)
        self.cols += 1
 
    def delete_row(self, row):
        self.field.pop(row)
        self.rows -= 1
 
    def delete_col(self, col):
        for row in range(self.rows):
            self.field[row].pop(col)
        self.cols -= 1
хотя можно было использовать len(self.field) для вывода строк и len(self.field[0]) для столбцов но это не лучший вариант
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
30.04.2019, 14:14
Semen-Semenich, В примере ниже у класса вообще нет методов, только атрибуты. И можно просто получать количество строк и колонок у экземпляра без всяких методов.
Python
1
2
3
4
5
6
7
8
9
10
11
class Table(object):
 
    def __init__(self, rows, cols):
        self.field = [[0 for _ in range(cols)] for _ in range(rows)]
        self.rows = rows
        self.cols = cols
 
if __name__ == "__main__":
    X = Table(7, 5)
    print(X.rows)
    print(X.cols)
Это показывает, что методы для определения количества строк и колонок, являются излишним мусором. Так могут писать код только те , кто не понимает различие между атрибутами и методами в ООП.
В любой код можно засунуть много мусора, не повреждающего код, однако при этом бессмысленного. Но это не является качественным программированием.
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
ну да это когда список статичный но после удаления или добавления строки или колонки то значения эти меняются и методы выводит текущие значения. поэтому в этих методах при изменении состояния таблицы и меняются значения
Внимательно посмотрите методы, которые добавляют или удаляют строки или колонки, они в том числе изменяют значения в атрибутах self.rows += 1 . И если вам понадобиться посмотреть количество строк или солонок, то достаточно будет просто прочитать значения в атрибутах print(X.rows) без всякого метода.
Если и теперь не поняли, то значит я плохо объясняю. Извините.
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
30.04.2019, 17:59
Viktorrus, я вас понял. но по заданию нужны именно методы хотя согласен с вами что методы для определения количества строк и колонок в этом классе являются излишним мусором но они могут быть расширенны в классе наследнике в дальнейшем и поэтому имеют место быть.
0
-5 / 10 / 0
Регистрация: 14.03.2019
Сообщений: 52
30.04.2019, 19:09
Ошибка на 2ом тесте

Traceback (most recent call last):
File "test.py", line 3, in <module>
exec(sys.stdin.read().strip())
File "<string>", line 33, in <module>
File "/temp/executing/solution.py", line 8, in get_value
return (self._table[row][col] if 0 <= row < self._rows and 0 <= col < self._cols
IndexError: list index out of range
make: *** [run] Error 1
Ввод
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from solution import Table
 
tab = Table(2, 2)
 
for i in range(tab.n_rows()):
    for j in range(tab.n_cols()):
        print(tab.get_value(i, j), end=' ')
    print()
print()
 
tab.set_value(0, 0, 10)
tab.set_value(0, 1, 20)
tab.set_value(1, 0, 30)
tab.set_value(1, 1, 40)
 
for i in range(tab.n_rows()):
    for j in range(tab.n_cols()):
        print(tab.get_value(i, j), end=' ')
    print()
print()
 
for i in range(-1, tab.n_rows() + 1):
    for j in range(-1, tab.n_cols() + 1):
        print(tab.get_value(i, j), end=' ')
    print()
print()
 
tab.add_row(0)
tab.add_col(1)
 
for i in range(-1, tab.n_rows() + 1):
    for j in range(-1, tab.n_cols() + 1):
        print(tab.get_value(i, j), end=' ')
    print()
print()
Ожидаемый результат
0 0
0 0

10 20
30 40

None None None None
None 10 20 None
None 30 40 None
None None None None

None None None None None
None 0 0 0 None
None 10 0 20 None
None 30 0 40 None
None None None None None

Вывод
0 0
0 0

10 20
30 40

None None None None
None 10 20 None
None 30 40 None
None None None None

None None None None None None None
None 0 0 0 Makefile:5: recipe for target 'run' failed
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
30.04.2019, 21:57
Цитата Сообщение от Paxerio Посмотреть сообщение
return (self._table[row][col] if 0 <= row < self._rows and 0 <= col < self._cols
список может заканчиваться к примеру индексом 10 а условие if 0 <= row будет истинным при индексе больше 0 то есть 10 и выше тоже истина но индекса выше 10 уже нет о чем вам и говорит ошибка
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.04.2019, 21:57
Помогаю со студенческими работами здесь

Реализовать класс Date, который хранит информацию об определенной дате
Класс Date хранит информацию об определенной дате (дд-мм-гг) для чего в нем предустмотрен поля day,mounth,year: Метод Date::sethate() -...

Реализовать длинные целые числа в виде класс
здравствуйте,только начала изучение классов,помогите с решением задачи:нужно реализовать длинные целые числа в виде класса с конструктором...

Создать класс, который запоминает целые восьмеричные числа в виде строк
Всем доброго времени суток. Столкнулся с проблемой,что не могу создать класс, который запоминает целые восьмеричные числа в виде строк! В...

Класс, полиморфизм (Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат)
Задача. Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат. Вообщем-то ни...

Класс,который хранит информацию об участниках спортивных соревнований
#include &quot;Sport.h&quot; #include&lt;iostream&gt; #include&lt;string.h&gt; #include&lt;stdlib.h&gt; #include&lt;iomanip&gt; using namespace std; int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 31.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru