Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 15.12.2019
Сообщений: 38

Переделать программу с использованием классов

24.04.2023, 16:28. Показов 576. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть программа, которая считывает инфу из CSV-файла (Посты: №, ник автора, текст поста, количество лайков), сортирует и фильтрует по разным критериям и позволяет добавить еще один пост.

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
import csv
import random
 
 
def read_csv(file_path):
    with open(file_path, 'r') as file:
        reader = csv.reader(file)
        return [row for row in reader]
 
 
def write_csv(file_path, objects):
    with open(file_path, 'w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(['id', 'author', 'text', 'likes'])
        for obj in objects:
            writer.writerow([obj['id'], obj['author'], obj['text'], obj['likes']])
 
data = read_csv('data.csv')
 
 
posts = []                               # Создаем список словарей с информацией об объектах
for row in data[1:]:
    post = {
        'id': int(row[0]),
        'author': row[1],
        'text': row[2],
        'likes': int(row[3])
    }
    posts.append(post)
 
 
max_id = max(obj['id'] for obj in posts)  # Получаем максимальный id
 
 
print("Сортировка по автору:")
sorted_by_author = sorted(posts, key=lambda obj: obj['author'])
for post in sorted_by_author:
    print(f"id: {post['id']}, автор: {post['author']}, текст: {post['text']}, лайки: {post['likes']}")
 
 
def get_likes(obj):
    return obj['likes']
 
 
print("Сортировка по лайкам:")
sorted_by_likes = sorted(posts, key=get_likes)
for post in sorted_by_likes:
    print(f"id: {post['id']}, автор: {post['author']}, текст: {post['text']}, лайки: {post['likes']}")
 
 
print("Фильтрация по лайкам (больше 10):")
def likes_more_than_10(obj):
    return obj['likes'] > 10
filtered_by_likes = filter(likes_more_than_10, posts)
for post in filtered_by_likes:
    print(f"id: {post['id']}, автор: {post['author']}, текст: {post['text']}, лайки: {post['likes']}")
 
 
author = input("Введите имя автора: ")     # Получение данных от пользователя
text = input("Введите текст поста: ")
likes = random.randint(1, 20)
 
 
new_obj = {                               # Добавление новых данных в список объектов
    'id': max_id + 1,
    'author': author,
    'text': text,
    'likes': likes
}
posts.append(new_obj)
 
write_csv('data.csv', posts)           # Сохранение новых данных в файл

Требуется переделать эту программу с использованием классов с реализацией следующих особенностей:

1) Класс должен содержать итератор
2) Должна быть реализована перегрузка стандартных операций (repr, например)
3) Должно быть реализовано наследование
4) Запись значений в свойства - только через setattr
5) Возможность доступа к элементам коллекции по индексу (getitem)
6) Должны быть реализованы статические методы
7) Должны быть реализованы генераторы

Я даже не знаю с чего начать. Эти классы для меня просто темный лес. Подскажите, пожалуйста.
CSV файл загрузить не дает, поэтому отправляю его же, но в виде TXT
Вложения
Тип файла: txt data.csv.txt (594 байт, 0 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.04.2023, 16:28
Ответы с готовыми решениями:

Переделать программу с использованием классов
вообщем я решил перебить свою задачу и предыдущей моей темы под классы. оригинальная прога #include <iostream> #define maxn...

Переделать с использованием классов
Помогите пожалуйста переделать с использованием классов #include<iostream> using namespace std; int main () { int m, n, p,...

Переделать приложение с использованием классов
Помогите пожалуйста переделать программу базы данных делфи, переделать с классами в делфи. НЕ имею понятия как работать с классами. прошу...

9
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
24.04.2023, 16:46
Не знаю кто как, но лично у меня фантазии не хватает придумать - куда тут воткнуть наследование
2
Йуный плагиат-падаван)
176 / 119 / 45
Регистрация: 17.10.2022
Сообщений: 566
24.04.2023, 16:46
Если я правильно понял, что надо:
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
import csv
import random
 
 
class Post:
    def __init__(self, id, author, text, likes):
        self.id = id
        self.author = author
        self.text = text
        self.likes = likes
 
    def __repr__(self):
        return f"id: {self.id}, автор: {self.author}, текст: {self.text}, лайки: {self.likes}"
 
    def __getitem__(self, index):
        return getattr(self, index)
 
    @staticmethod
    def read_csv(file_path):
        with open(file_path, 'r') as file:
            reader = csv.reader(file)
            return [row for row in reader]
 
    @staticmethod
    def write_csv(file_path, objects):
        with open(file_path, 'w', newline='') as file:
            writer = csv.writer(file)
            writer.writerow(['id', 'author', 'text', 'likes'])
            for obj in objects:
                writer.writerow([obj.id, obj.author, obj.text, obj.likes])
 
    @classmethod
    def from_list(cls, data):
        return cls(int(data[0]), data[1], data[2], int(data[3]))
 
 
class PostCollection:
    def __init__(self, file_path):
        self.file_path = file_path
        self.posts = [Post.from_list(row) for row in Post.read_csv(file_path)[1:]]
 
    def __getitem__(self, index):
        return self.posts[index]
 
    def __iter__(self):
        for post in self.posts:
            yield post
 
    def add_post(self, author, text, likes):
        max_id = max(post.id for post in self.posts)
        new_post = Post(max_id + 1, author, text, likes)
        self.posts.append(new_post)
        Post.write_csv(self.file_path, self.posts)
 
    def sort_by_author(self):
        return sorted(self.posts, key=lambda x: x.author)
 
    def sort_by_likes(self):
        return sorted(self.posts, key=lambda x: x.likes)
 
    def filter_by_likes(self, limit):
        return list(filter(lambda x: x.likes > limit, self.posts))
 
 
file_path = 'data.csv'
post_collection = PostCollection(file_path)
 
sorted_by_author = post_collection.sort_by_author()
print("Сортировка по автору:")
for post in sorted_by_author:
    print(post)
 
sorted_by_likes = post_collection.sort_by_likes()
print("Сортировка по лайкам:")
for post in sorted_by_likes:
    print(post)
 
filtered_by_likes = post_collection.filter_by_likes(10)
print("Фильтрация по лайкам (больше 10):")
for post in filtered_by_likes:
    print(post)
 
author = input("Введите имя автора: ")
text = input("Введите текст поста: ")
likes = random.randint(1, 20)
 
post_collection.add_post(author, text, likes)
2
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
24.04.2023, 16:48
DOPIXKMNLD, класс Пост читает и пишет файлы с постами? Не находишь это несколько странным?
3
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
24.04.2023, 16:52
Цитата Сообщение от DOPIXKMNLD Посмотреть сообщение
[row for row in reader]
list(reader)


ни read_csv, ни write_csv не имеют отношения к классу Пост и должны быть или отдельными функциями или методами класса для работы с цсв. Ну ладно, с натяжкой можно сказать что запись относится раз использует поля, но я бы все равно вынес.

остались пункты 3 и 4 - бессмысленные и беспощадные
2
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
24.04.2023, 17:23
Можно замутить класс-интерфейс репозитория данных и от него унаследовать csv-репозиторий. Но учитывая питоновскую типизацию (точнее отсутствие таковой), смысла в этом не более чем ноль. ХЗ вобщем.
labaluba, спроси у своего препода - что тут от чего наследовать. Вместе поржем потом.
1
0 / 0 / 0
Регистрация: 15.12.2019
Сообщений: 38
24.04.2023, 18:06  [ТС]
iSmokeJC, знал бы я, что такое "наследование", я бы такую тираду выдал, но если даже вместо написания проги самому я на киберфоруме беспокою людей своими мелочами, вряд ли я могу ему хоть что-то поперек вякнуть

Если вдруг поможет: говорилось, что "для написания этой программы вполне может понадобиться расширить условие задачи". Это я косякнул, препод пока что не при чем
0
Йуный плагиат-падаван)
176 / 119 / 45
Регистрация: 17.10.2022
Сообщений: 566
24.04.2023, 18:15
labaluba, так что мешает попросить то?

Добавлено через 1 минуту
ЗЫ: в чем смысл курсов(задания), если ты азов не знаешь?
0
0 / 0 / 0
Регистрация: 15.12.2019
Сообщений: 38
24.04.2023, 18:26  [ТС]
DOPIXKMNLD, да тут все сложно, да и не курсы это, а заочка.

Что касается задачи, там можно немного расширить условие при надобности (что бы это ни значило). Видимо это и позволит удовлетворить 3 и 4 требования
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
24.04.2023, 19:57
Цитата Сообщение от labaluba Посмотреть сообщение
знал бы я, что такое "наследование"
так узнай Наследование сможешь преподу вопрос задать правильный
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.04.2023, 19:57
Помогаю со студенческими работами здесь

Идущие часы: переделать код с использованием классов
Добрый день, у меня есть код идущих часов с помощью функций. Не мог бы кто-то помочь переделать его с помощью классов? function...

Переделать с использованием рекурсии (определение числа классов структурно схожих квадратов)
вопрос: Для заданной размерности латинского квадрата N определить число классов структурно схожих квадратов. . . не могли бы вы...

Обнаружение всех элементарных циклов ориентированного графа (переделать с использованием классов)
Прошу помогите как переделать эту программу под классы? вот что делает программа: Обнаружение всех элементарных циклов...

Переделать программу с помощью классов
Написал программу, но ее нужно сделать с помощью классов, помогите пожалуйста. class Program { static void...

Переделать программу из классов в структуры
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru