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

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

22.03.2018, 22:31. Показов 73867. Ответов 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
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
30.04.2019, 22:11
Студворк — интернет-сервис помощи студентам
Semen-Semenich, На самом деле при наследовании расширению подлежат не только методы, но и атрибуты. На самом деле атрибуты инициализируются в методе __init__() , который так же наследуется и подлежит расширению, расширяя при этом атрибуты. Ладно, все это теория, на практике каждый делает как ему нравится.
Что касается данной темы, то я стараюсь не связываться с тестирующими программами. Они часто слишком форализуют ввод и требуют одного решения, не учитывая, что почти каждая задача может решаться разными способами.
Поэтому для меня есть задание и есть решение дающее правильный результат. А принимает ли его тестирующая программа меня не волнует.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
01.05.2019, 14:09
Semen-Semenich, Что бы полностью закрыть тему об использовании методов для обращения к атрибутам, вот что говорит об этом Лутц в главе 37 "Управляемые атрибуты":
"Зачем нужно управлять атрибутами?
Атрибуты объектов занимают центральное положение в большинстве программ на языке Python – они хранят информацию об объектах или о процессах, протекающих в сценарии. Обычно атрибуты являются простыми именами объектов – атрибут name, например, может быть простой строкой, получить и изменить значение которой можно с применением обычного синтаксиса обращения к атрибутам:
person.name # Возвращает значение атрибута
person.name = value # Изменяет значение атрибута
В большинстве случаев атрибуты присоединяются непосредственно к объектам или наследуются от родительского класса. Такой простейшей модели вполне достаточно для большинства программ, которые вам придется писать на протяжении своей карьеры программиста на языке Python.
Однако иногда требуется обеспечить больше гибкости. Предположим, что вы написали программу, которая обращается к атрибуту name непосредственно, но затем вам потребовалось изменить ее, например добавить логику проверки имен при присваивании атрибуту или обеспечить получение видоизмененного имени при обращении к нему. Такого рода доступ к значению атрибута легко реализовать с помощью методов.
Однако в этом случае придется изменить программный код везде, где производится обращение к атрибуту name, что может оказаться не самой простой задачей. Кроме того, при таком подходе требуется помнить, как экспортируются значения: как простые значения или как вызовы методов. Если вы помните об этом и используете интерфейс доступа к данным на основе методов, клиенты будут защищены от изменений, – в противном случае изменения могут стать источником проблем.
Данная проблема может возникать гораздо чаще, чем можно было бы ожидать. Значение ячейки в программе электронной таблицы, например, может начинать свое существование как простое значение, но позднее превратиться в поле, значение которого вычисляется по некоторой формуле. Поскольку интерфейсы объектов должны быть достаточно гибкими, чтобы поддерживать подобные изменения в будущем, не влияя на работоспособность существующего программного кода, переход к использованию методов выглядит не самым идеальным.
Добавление программного кода, вызываемого при обращении к атрибуту.
Более удачное решение заключается в том, чтобы в случае необходимости обеспечить автоматический вызов программного кода при обращениях к атрибуту. Выше в этой книге мы уже встречались с некоторыми инструментами, которые позволяют динамически вычислять значения атрибутов при обращении к ним и проверять или изменять значения атрибутов при присваивании.
В этой главе будут представлены:
• Методы __getattr__ и __setattr__, которые вызываются при обращении к несуществующим атрибутам и при присваивании значений любым атрибутам.
• Метод __getattribute__, который вызывается при обращении к любым атрибутам в классах в Python 3.0.
• Встроенная функция property, которая позволяет определить для отдельных атрибутов методы чтения и записи, – такие атрибуты часто называют свойствами.
• Протокол дескрипторов, который позволяет организовать доступ к отдельным атрибутам с помощью экземпляров классов с произвольными методами чтения и записи. "

Semen-Semenich, Из всего сказанного следует, что иногда бывает необходимость при обращении к атрибутам выполнять некоторые действия, но это лучше делать не методами (которые вы написали сами), а другими средствами (в том числе встроенными методами перегрузки __getattr__ и __setattr__ и __getattribute__, которые запускаются автоматически при обращении к атрибутам).
В общем для себя я все прояснил, а Вы при необходимости можете обратиться к главе 37 у Лутц М. Изучаем Python (4-е издание, 2011).
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
02.05.2019, 07:36
Перенес в отладчик вариант кода Gernima, занес туда коды примеров. Все ответы выдает такие же как и в примерах. Единственно мне не понятно, почему вы в методе get_value(row, col) проверяете что бы заданные координаты были в пределах таблицы, а для метода set_value(row, col, value) не поверяете. Хотя если в этом методе дать координаты выходящие за пределы таблицы, то питон выдает ошибку. Не знаю, имеет ли это значение для тестирующей программы. Во всем остальном код работает правильно. Можно только гадать, что не хватает тестирующей программе.
Или у вас тест уже прошел?
0
5 / 5 / 0
Регистрация: 25.07.2018
Сообщений: 12
28.05.2019, 18:51
Viktorrus, тест уже прошел, но ваши разъяснения помогли решить задачу. Я новичок и не удивительно, что моя версия кода плоха, но рабочая, хоть это радует.
0
2 / 2 / 0
Регистрация: 17.04.2020
Сообщений: 8
21.04.2020, 23:23
проходящий проверку вариант
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
import numpy
 
 
class Table(object):
    def __init__(self, rows, cols):
        self.rows = rows
        self.cols = cols
        self.tabl = numpy.zeros((self.rows, self.cols), dtype=int)
        pass
 
    def set_value(self, row, col, value):
        self.tabl[row, col] = value
 
    def get_value(self, row, col):
        if row > self.rows - 1 or col > self.cols - 1 or row < 0 or col < 0:
            return None
        else:
            return self.tabl[row, col]
 
    def n_rows(self):
        return self.rows
 
    def n_cols(self):
        return self.cols
 
    def add_row(self, row):
        b = numpy.zeros(self.cols, dtype=int)
        niz = self.tabl[row:, :]
        verh = numpy.vstack((self.tabl[:row, :], b))
        self.tabl = numpy.vstack((verh, niz))
        self.rows += 1
 
    def add_col(self, col):
        a = numpy.zeros((self.rows, 2), dtype=int)
        b = a[:, :1]
        right = self.tabl[:, col:]
        # ss = self.tabl[:, :col]
        left = numpy.hstack((self.tabl[:, :col], b))
        self.tabl = numpy.hstack((left, right))
        self.cols += 1
 
    def delete_col(self, col):
        right = self.tabl[:, col + 1:]
        left = self.tabl[:, :col]
        self.tabl = numpy.hstack((left, right))
        self.cols -= 1
 
    def delete_row(self, row):
        verh = self.tabl[:row, :]
        niz = self.tabl[row + 1:, :]
        self.tabl = numpy.vstack((verh, niz))
        self.rows -= 1
1
0 / 0 / 0
Регистрация: 10.01.2021
Сообщений: 1
16.03.2021, 16:16
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Table:
 
    def __init__(self, rows, cols):
        self.field = [[0 for i in range(cols)] for j 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
2 / 2 / 0
Регистрация: 13.03.2023
Сообщений: 31
17.04.2023, 18:17
У всех какие то километровые решения как по мне
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Table:
    def __init__(self, rows, cols):
        self.table = [[0 for _ in range(cols)] for _ in range(rows)]
        self.rows = rows
        self.cols = cols
 
    def get_value(self, row, col):
        if 0 <= row < self.rows and 0 <= col < self.cols:
            return self.table[row][col]
        else:
            return 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
0
2 / 2 / 0
Регистрация: 13.03.2023
Сообщений: 31
19.04.2023, 14:04
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
class Table:
    def __init__(self, rows, cols):
        self.table = [[0] * cols for _ in range(rows)]
 
    def get_value(self, row, col):
        return self.table[row][col] if 0 <= row < len(self.table) and 0 <= col < len(self.table[0]) else None
 
    def set_value(self, row, col, value):
        self.table[row][col] = value
 
    def n_rows(self):
        return len(self.table)
 
    def n_cols(self):
        return len(self.table[0])
 
    def delete_row(self, row):
        del self.table[row]
 
    def delete_col(self, col):
        for row in self.table:
            del row[col]
 
    def add_row(self, row_index):
        self.table.insert(row_index, [0] * len(self.table[0]))
 
    def add_col(self, col_index):
        for row in self.table:
            row.insert(col_index, 0)
Максимально короткий код наверно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.04.2023, 14:04

Реализовать класс 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...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru