1
resposta

[Sugestão] Resolução Gerenciador de tarefas

Na função remover_tarefa() o código chama a função visualizar_tarefas() pra o usuário saber qual tarefa ele quer excluir, porém como todas as funções tem uma função menu principal, no meio da chamada ela não continuava por conta da função menu_principal() em visualizar_tarefas(), que pede pra aperta uma tecla para continuar, resolvi colocando um if em visualizar_tarefa() e passar como parâmetro True quando for somente visualização e False quando for remover, isso seria gambiarra ? kkkkkk. Como poderia deixar o código melhor ?

Como um profissional otimizaria isso ?

main.py

from gerenciador import escolher_opcoes

escolher_opcoes()

gerenciador.py

listaDeTarefas = []
listaDeOpcoes = []

def menu_principal():
    input('Digite uma tecla para voltar ao menu principal: ')
    escolher_opcoes()

def menu_de_opcoes():
    print('1. Adicionar tarefa') 
    print('2. Visualizar tarefas') 
    print('3. Remover tarefa') 
    print('4. Sair')

def escolher_opcoes():
    try:
        menu_de_opcoes()
        opcaoEscolhida = int(input('Escolha uma opção: '))
        if opcaoEscolhida == 1:
            adicionar_tarefa()
        elif opcaoEscolhida == 2:
            visualizar_tarefa(True)
        elif opcaoEscolhida == 3:
            remover_tarefa()
        else:
            print('Saindo do gerenciado de tarefas. Até mais!')

    except ValueError:
        print('Opção inválida, tente novamente: ')
        return menu_principal()

def adicionar_tarefa():
    tarefa = input('Digite a tarefa: ')
    listaDeTarefas.append(tarefa)
    print('Tarefa adicionada!\n')
    menu_principal()

def visualizar_tarefa(trueFalse):
    numerador = 1
    print('Tarefas adicionadas:\n')
    for tarefa in listaDeTarefas:
        print(f'{numerador}. {tarefa}')
        numerador = numerador+1
    if trueFalse:
        print()
        menu_principal()

def remover_tarefa():
    print('Tarefas adicionadas:\n')
    visualizar_tarefa(False)
    print()
    try:
        numTarefa = int(input('Digite o número da tarefa a ser removidade: '))
        del listaDeTarefas[numTarefa-1]
        print('Tarefa Removida!')
        menu_principal()
    except ValueError:
        print('Erro: Entrada inválida! Digite um número.')
        return menu_principal()


    
1 resposta

Olá William! Como vai?

A solução que você encontrou, utilizando um parâmetro booleano para controlar o comportamento da função, é uma abordagem válida e não necessariamente uma "gambiarra". No entanto, há algumas maneiras de tornar o código mais elegante e talvez mais fácil de manter.

Uma abordagem que você pode considerar é separar as responsabilidades das funções. Em vez de usar um parâmetro booleano para controlar o fluxo, você pode criar uma função separada para exibir as tarefas sem retornar ao menu principal. Isso pode ajudar a tornar o código mais claro e modular. Aqui está uma sugestão de como você pode fazer isso:

def visualizar_tarefas():
    numerador = 1
    print('Tarefas adicionadas:\n')
    for tarefa in listaDeTarefas:
        print(f'{numerador}. {tarefa}')
        numerador += 1

def visualizar_tarefas_e_retornar():
    visualizar_tarefas()
    print()
    menu_principal()

Com essa abordagem, você pode usar visualizar_tarefas() quando quiser apenas exibir as tarefas, e visualizar_tarefas_e_retornar() quando quiser exibir as tarefas e retornar ao menu principal. Assim, você mantém a lógica mais clara e evita o uso de parâmetros booleanos que podem tornar o código mais difícil de entender.

Na sua função remover_tarefa(), você pode simplesmente chamar visualizar_tarefas() para mostrar as tarefas antes de solicitar ao usuário que escolha uma para remover.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.