Black November

ATÉ 50% OFF

TÁ ACABANDO!

0 dias

0 horas

0 min

0 seg

Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

estou tentando criar uma lista de tarefas simples, porém, na função de listar as tarefas ele lista apenas a primeira que eu criei na tabela, alguém pode me explicar o por quê?

import os 

tasks = [{'nome': '', 'ativa': False}]

# criar sistema de adicionar task
# criar sistema de finalizar task

def criar_task():
    os.system('cls')
    nome = input('Digite o nome da Tarefa: ')
    tasks.append({'nome': nome, 'ativa': True})
    print('Tarefa Adicionada')
    input('Digite algo e volte ao menu')
    menu()

def listar_task():
    os.system('cls')
    for task in tasks:
        if task['ativa'] == True:
            print(f'. {task['nome']}') 
            input('Digite algo e volte ao menu')
            menu()
            
def finalizar_task():
    os.system('cls')
    nome = input('Digite o nome da task que deseja finalizar: ')
    task_encontrada = False
    for task in tasks: 
        if task['nome'] == nome:
            task_encontrada = True
            task['ativa'] = False
            print('Task Finalizada')
            menu()
    if not task_encontrada:
        print('Não encontrado')
        input('Digite algo e volte ao menu')
        menu()

def menu():
    os.system('cls')
    print('TO DO LIST \n')
    print('1 - CRIAR TASK \n 2 - LISTAR TASK \n 3 - REMOVER TASK')
    comando = int(input('Digite um dos comandos: '))
    if comando == 1:
        criar_task()
    elif comando == 2:
        listar_task()
    elif comando == 3:
        finalizar_task()
    else:
        print('COMANDO INVALIDO')
        input('Digite algo e volte ao menu')
        menu()

if __name__ == '__main__':
    menu()

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
2 respostas
solução!

Oi Caio,

O problema que você está enfrentando na função listar_task é que você está chamando input('Digite algo e volte ao menu') dentro do loop que itera sobre as tarefas. Isso faz com que o programa aguarde uma entrada do usuário após listar a primeira tarefa ativa, fazendo com que ele não continue listando as demais.

Para corrigir isso, você deve mover a linha de input para fora do loop. Assim, o programa irá listar todas as tarefas ativas antes de solicitar uma entrada do usuário. Aqui está como você pode fazer essa alteração:

def listar_task():
    os.system('cls')
    for task in tasks:
        if task['ativa'] == True:
            print(f'. {task["nome"]}')  # Use aspas duplas para a chave 'nome'
    input('Digite algo e volte ao menu')  # Move para fora do loop
    menu()

Com essa modificação, todas as tarefas ativas serão listadas antes de retornar ao menu.

Além disso, note que no print, você deve usar aspas duplas para acessar task['nome'], pois você já está usando aspas simples para definir a string.

Essa mudança deve resolver o seu problema e permitir que todas as tarefas ativas sejam exibidas corretamente.

tux matrix    Caso este post o tenha ajudado, por favor, marcar como solucionado ☑️. Bons Estudos! 🤓

Boa tarde colega, muito obrigado pela resposta! Consegui entender o erro e agora o código está funcionando certinho.