Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Lista LDE

Boa Tarde encontrei uma apostila com o seguinte exercício:

  • Criar uma aplicação em modo texto que represente uma lista de tarefas e que faça usa de uma implementação própria de Lista Duplamente Encadeada (LDE).
  • [JÁ IMPLEMENTADO em "projeto.py"] Carregar Lista quando inicializar a aplicação (no construtor)
  • Se existir o arquivo 'lista.p', carrega
  • Se não existir cria uma nova lista na memória
  • [JÁ IMPLEMENTADO em "tarefa.py"] Uma classe que representa uma tarefa contendo 'id' e 'descrição'.
  • Ao inserir, garantir que a lista mantenha ordem crescente por "id" usando a técnica Insertion Sort
  • Para isso, deverá modificar o método adicionarTarefa na classe MinhaLDE presente no arquivo "projeto.py", fazendo as chamadas corretas aos métodos inserirAntes e inserirApos.
  • Deverá conter um menu com as seguintes opções:
  • (1) Adicionar Tarefa
  • (2) Excluir Tarefa usando o id
  • (3) Editar Tarefa usando o id
  • (4) Listar Tarefas

    ** NOTE QUE PARA CADA OPÇÃO LISTADA EXISTE UM MÉTODO CORRESPONDENTE NA CLASSE MinhaLDE(LDE)

    CÓDIGOS PARA APLICAÇÃO PROJETO.py

from lde import LDE from lde import DNodo from tarefa import Tarefa import pickle import os from pathlib import Path

class MinhaLDE(LDE):

def adicionarTarefa(self, novo): # inserir usando a lógica de InsertionSort
    ## para chamar um metodo existente em LDE
    ## Exemplo: super().inserirApos(alvo, DNodo(tarefa))
    ## Exemplo: itemEncontrado = super().buscar(alvo)

    pass

def buscarPorId(self, id):
    pass

def excluirPorId(self, id):
    pass

def listar(self):
    if self.isEmpty():
        print('Lista Vazia')
        return

    item = self.header.proximo # devolve o 1o da lista
    while (item is not None):
        # se o dado no DNodo for da classe Tarefa           
        if isinstance(item, Tarefa):
            tarefa = item
            print(tarefa.as_string())

        item = item.proximo

class Projeto1: def init(self):

    # construtor
    arq = Path("lista.p")        
    if not arq.exists():
        self.lista = MinhaLDE()
        pickle.dump( self.lista, open( "lista.p", "wb" ) )
    else:
        self.lista = pickle.load( open( "lista.p", "rb" ) )

def gravar(self):
    pickle.dump( self.lista, open( "lista.p", "wb" ) )

def limpar(self):
    arq = Path("lista.p")        
    if arq.exists():
        os.remove("lista.p")

def test(self):
    self.lista.inserirInicio(Tarefa(1,'abc'))
    self.lista.inserirInicio(Tarefa(2,'def'))
    self.lista.listar()
    self.gravar()

p = Projeto1() p.test()

#p.limpar() ## exclui o arquivo criado

TAREFA.py

Tarefa (classe)

class Tarefa: def init(self, id, descricao = None): self.id = id self.descricao = descricao

def __str__(self):
    return str(self.id)

def as_string(self):
    return '{} | {}'.format(str(self.id), str(self.descricao))

======================================================== A LDE é muito extensa manderei em outra pergunta o resto do código para ver se vocês conseguem me ajudar....

1 resposta
solução!

post duplicado : https://cursos.alura.com.br/forum/topico-lista-lde-71882