Всем привет! Прошу помощи :) Имеется такая задача:
Напишите класс, который реализует стек и его возможности (достаточно будет добавления и удаления элемента).
После этого напишите ещё один класс — «Менеджер задач». В менеджере задач можно выполнить команду «Новая задача», в которую передаётся сама задача (str) и её приоритет (int). Сам менеджер работает на основе стека (не наследование!). При выводе менеджера в консоль все задачи должны быть отсортированы по приоритету: чем меньше число, тем выше задача.
Вот пример основной программы:
manager = TaskManager()
manager.new _task("сделать уборку", 4)
manager.new_task("помыть посуду", 4)
manager.new _task("отдохнуть", 1)
manager.new _task("поесть", 2)
manager.new _task("сдать дз", 2)
print(manager)
Результат:
1 отдохнуть
2 поесть; сдать дз
4 сделать уборку; помыть посуду
Дополнительно: реализуйте также удаление задач и подумайте, что делать с дубликатами.
Необходимо выполнить со следующими моментами:
1) Модели реализованы в стиле ООП, основной функционал описан в методах классов и в отдельных функциях.
2) При написании классов соблюдаются основные принципы ООП: инкапсуляция, наследование и полиморфизм.
3) Для получения и установки значений у приватных атрибутов используются сеттеры и геттеры.
4) Для создания нового класса на основе уже существующего используется наследование.
5) Формат вывода соответствует примеру.
Я написала начало кода, а дальше в ступор вошла:
class Stack:
def __init__(self):
self.stack = []
def push(self, item):
self.stack.append(item)
def pop(self):
if len(self.stack) == 0:
return None
removed = self.stack.pop()
return removed
А дальше встряла...нужно в стеке ещё дописать если введено пустое значение и ранжирование по приоритету
Потом написать ещё класс для запросов, чтобы в нём была инициализация словаря
Потом чтобы этот класс работать с запросам, в рамках создания задачи и далее ее работу внутри этого списка
Помогите, пожалуйста, а то совсем худо( Больше всем спасибо!
Python
Помогите с Python, пожалуйста
Это профессиональное python
Стек не ранжируется по приоритету. Всё, что может стек - добавить элемент на вершину и выдать верхний элемент - с удалением его из стека.
Для создания очереди с приоритетами используется не стек, а куча (Heap, пирамида). Алгоритмы реализации кучи описаны в любом руководстве по пирамидальной сортировке (HeapSort, сортировка кучей). Например: https://habr.com/ru/company/edison/blog/509330/
Фактически, у тебя две никак не связанные между собой задачи:
1. Создать Stack
2. Создать Heap
Для создания очереди с приоритетами используется не стек, а куча (Heap, пирамида). Алгоритмы реализации кучи описаны в любом руководстве по пирамидальной сортировке (HeapSort, сортировка кучей). Например: https://habr.com/ru/company/edison/blog/509330/
Фактически, у тебя две никак не связанные между собой задачи:
1. Создать Stack
2. Создать Heap
Витя Palatkin
Получается мне дали не связные задачи?
Самый лучший вариант, который я смог придумать - это создание словаря, значение которого является список. Если есть уже номер в словаре, то к его значению(списку) просто добавляется таск(через append). Вроде работает. Интересно было, кто как сделал.
import collections
class TaskManager:
tasks_dict = dict()
def new_task(self, task, number):
if number not in self.tasks_dict.keys():
self.tasks_dict[number] = [task]
else:
self.tasks_dict.get(number).append(task)
def delete_task(self, task, number):
if number not in self.tasks_dict.keys():
print("Задачи с данным номером не существует.")
else:
if task not in self.tasks_dict.get(number):
print("Задачи под таким номером не существует.")
else:
self.tasks_dict.get(number).remove(task)
def __str__(self):
sorted_tasks = collections.OrderedDict(sorted(self.tasks_dict.items()))
result = ""
for key, lists in sorted_tasks.items():
# Чтобы избежать попадания в результат пустых тасков.
if len(lists) == 0:
continue
result += f"\nСписок задач под номером {key}: \n"
for tasks in lists:
result += f"{tasks}\n"
return result
manager = TaskManager()
print("Пример создания тасков.")
manager.new _task("сдать дз", 2)
manager.new _task("купить дом", 2)
manager.new _task("купить машину", 5)
manager.new _task("купить дачу", 1)
manager.new _task("купить собаку", 3)
print(manager)
manager.delete_task("сдать дз", 2)
print("Пример удаления тасков.")
print(manager)
print("Пример в котором мы удаляем все таски под одним номером.")
manager.delete_task("купить дом", 2)
print(manager)


import collections
class TaskManager:
tasks_dict = dict()
def new_task(self, task, number):
if number not in self.tasks_dict.keys():
self.tasks_dict[number] = [task]
else:
self.tasks_dict.get(number).append(task)
def delete_task(self, task, number):
if number not in self.tasks_dict.keys():
print("Задачи с данным номером не существует.")
else:
if task not in self.tasks_dict.get(number):
print("Задачи под таким номером не существует.")
else:
self.tasks_dict.get(number).remove(task)
def __str__(self):
sorted_tasks = collections.OrderedDict(sorted(self.tasks_dict.items()))
result = ""
for key, lists in sorted_tasks.items():
# Чтобы избежать попадания в результат пустых тасков.
if len(lists) == 0:
continue
result += f"\nСписок задач под номером {key}: \n"
for tasks in lists:
result += f"{tasks}\n"
return result
manager = TaskManager()
print("Пример создания тасков.")
manager.new _task("сдать дз", 2)
manager.new _task("купить дом", 2)
manager.new _task("купить машину", 5)
manager.new _task("купить дачу", 1)
manager.new _task("купить собаку", 3)
print(manager)
manager.delete_task("сдать дз", 2)
print("Пример удаления тасков.")
print(manager)
print("Пример в котором мы удаляем все таски под одним номером.")
manager.delete_task("купить дом", 2)
print(manager)


Khaibar Hamidi
Out:

Похожие вопросы
- Помогите с Python, пожалуйста с помощью модуля turtle
- Помогите с Python
- Python. Пожалуйста помогите решить задание!!!
- Помогите написать код на python, пожалуйста.
- Пожалуйста, помогите с Python
- Помогите решить задачу на языке Python пожалуйста!
- Python! Пожалуйста, помогите, срочно!!!
- Объясните код python пожалуйста
- Помогите новичку (python)
- Помогите решить (Python)