【Copie e Cole para Rodar】Vamos Criar um Aplicativo Simples de Lista de Tarefas com Python! (Baseado em Texto)
Para executar Python no prompt de comando ou PowerShell no seu PC, é necessário baixar e instalar o Python.
Se ainda não o fez, consulte o artigo Instalação do Python e configuração do ambiente de desenvolvimento para instalar o Python.
Olá! Há apenas alguns meses, eu não sabia nada de programação e agora estou compartilhando o que aprendi criando sites com a ajuda de uma IA.
Desta vez, vamos criar um "Aplicativo de Lista de Tarefas" (To-Do List) em Python, que eu super recomendo como um primeiro passo no aprendizado de programação. O objetivo deste artigo é apenas um: fazer você sentir a emoção de "O programa que eu mesmo fiz está funcionando!".
Vamos deixar a teoria difícil para depois! Primeiro, vamos mexer em um código que você pode copiar e colar para sentir como é, "Ah, então é assim que funciona!". Vou explicar os termos técnicos de uma forma super simples, com base nos meus próprios tropeços, então pode ficar tranquilo.
Primeiro, vamos rodar o produto final!
Ver para crer! Primeiro, vamos rodar a versão final do aplicativo de lista de tarefas. Copie todo o código abaixo, crie um arquivo chamado todo.py, cole o conteúdo e salve.
# -*- coding: utf-8 -*-
TASKS_FILE = "tasks.txt"
def load_tasks():
"""Função para carregar tarefas do arquivo"""
try:
with open(TASKS_FILE, "r", encoding="utf-8") as f:
# Usa strip() para remover o caractere de nova linha no final de cada linha
tasks = [line.strip() for line in f.readlines()]
except FileNotFoundError:
# Se o arquivo não existir, retorna uma lista vazia
tasks = []
return tasks
def save_tasks(tasks):
"""Função para salvar tarefas no arquivo"""
with open(TASKS_FILE, "w", encoding="utf-8") as f:
# Adiciona uma quebra de linha no final de cada tarefa ao escrever
for task in tasks:
f.write(task + "\n")
def list_tasks(tasks):
"""Função para exibir uma lista das tarefas"""
if not tasks:
print("✅ Nenhuma tarefa ainda.")
return
print("--- Lista de Tarefas ---")
# Usa enumerate para obter o índice (número) e a tarefa ao mesmo tempo
for i, task in enumerate(tasks):
print(f"{i + 1}: {task}")
print("----------------------")
def add_task(tasks):
"""Função para adicionar uma tarefa"""
task = input("Digite a tarefa a ser adicionada: ")
if task:
tasks.append(task)
save_tasks(tasks)
print(f"✨ Tarefa '{task}' adicionada.")
else:
print("⚠️ Nenhuma tarefa foi digitada.")
def delete_task(tasks):
"""Função para deletar uma tarefa"""
list_tasks(tasks)
if not tasks:
return
try:
# Pede para o usuário escolher uma tarefa pelo número
num_str = input("Digite o número da tarefa a ser deletada: ")
num = int(num_str)
# O usuário conta a partir de 1, mas o índice da lista começa em 0, então ajustamos
if 1 <= num <= len(tasks):
removed_task = tasks.pop(num - 1)
save_tasks(tasks)
print(f"🗑️ Tarefa '{removed_task}' deletada.")
else:
print("⚠️ Não existe tarefa com esse número.")
except ValueError:
# Tratamento de erro para entrada não numérica
print("⚠️ Por favor, digite um número válido.")
def main():
"""Função para rodar o processo principal"""
tasks = load_tasks()
while True:
print("\nO que você gostaria de fazer?")
command = input("1:Listar, 2:Adicionar, 3:Deletar, 9:Sair > ")
if command == "1":
list_tasks(tasks)
elif command == "2":
add_task(tasks)
elif command == "3":
delete_task(tasks)
elif command == "9":
print("👋 Saindo do aplicativo. Bom trabalho!")
break
else:
print("⚠️ Por favor, digite 1, 2, 3 ou 9.")
if __name__ == "__main__":
main()
Depois de salvar, abra seu terminal (ou Prompt de Comando/PowerShell no Windows), navegue até o diretório onde você salvou o arquivo e rode o seguinte comando:
python todo.py
E aí, como foi? Ele perguntou "O que você gostaria de fazer?"? Tente digitar "2" para adicionar uma tarefa, "1" para ver a lista e "3" para deletar uma tarefa. Você pode sair do aplicativo digitando "9". Incrível, já é um aplicativo de verdade!
A partir de agora, vamos desvendar juntos o que esse feitiço mágico (o código) está realmente fazendo.
Passo 1: Uma Versão Super Simples Apenas com "Adicionar" e "Listar"
Tentar entender tudo de uma vez pode ser complicado. Vamos começar com uma versão muito mais simples do código, focando apenas no coração do aplicativo: as funções de adicionar e listar tarefas.
# Prepara uma lista vazia (como um array) para armazenar as tarefas
tasks = []
# Repete o processo infinitamente
while True:
print("\nO que você gostaria de fazer?")
command = input("1:Listar, 2:Adicionar, 9:Sair > ")
if command == "1":
print("--- Lista de Tarefas ---")
for task in tasks:
print(task)
print("----------------------")
elif command == "2":
task = input("Digite a tarefa a ser adicionada: ")
tasks.append(task)
print(f"✨ Tarefa '{task}' adicionada.")
elif command == "9":
print("👋 Saindo do aplicativo.")
break # Sai do loop
else:
print("⚠️ Por favor, digite 1, 2 ou 9.")
Este pequeno trecho de código está repleto de fundamentos da programação.
tasks = []: Esta é a "lista" para armazenar as tarefas. Imagine que estamos preparando uma caixa vazia no início.while True:: Isto é um "loop infinito". Ele continuará esperando pelo comando do usuário até que "9" seja digitado. Este foi o feitiço mágico que a IA me ensinou quando perguntei pela primeira vez "como faço para o programa ficar esperando?".input(...): Aceita os caracteres que o usuário digita no teclado.if / elif / else: Separa o processo com base no valor docommandde entrada. É uma ramificação condicional, como "Se for 1, liste as tarefas; se for 2, adicione uma tarefa; caso contrário...".tasks.append(task): Adiciona a tarefa recebida doinputao final da listatasks.for task in tasks:: Percorre o conteúdo da listatasks, um por um desde o início, coloca-o em uma variável chamadataske o exibe na tela comprint(task).break: Este é o interruptor de escape para terminar o loop infinito. Se você esquecer isso, não terá outra opção a não ser forçar o encerramento do programa (eu já fiz isso muitas vezes!).
Passo 2: Adicionando a Função "Deletar" e Tratamento de Erros
Em seguida, vamos tornar possível deletar as tarefas adicionadas. Para não ser inconveniente, permitiremos que o usuário escolha qual tarefa deletar por um número. Aqui vamos subir um pouco de nível!
# ... (Substitua a parte `if command == "1":` do código do Passo 1 pelo seguinte) ...
if command == "1":
print("--- Lista de Tarefas ---")
# Usar enumerate permite obter o número da lista e o conteúdo ao mesmo tempo
for i, task in enumerate(tasks):
# i começa em 0, então somamos 1 ao exibir
print(f"{i + 1}: {task}")
print("----------------------")
# ... (Adicione o seguinte após `elif command == "2":` no código do Passo 1) ...
elif command == "3": # Adiciona a funcionalidade de deletar
# Primeiro, exibe a lista atual para facilitar a escolha do usuário
for i, task in enumerate(tasks):
print(f"{i + 1}: {task}")
try:
num_str = input("Digite o número da tarefa a ser deletada: ")
num = int(num_str) # Converte o texto de entrada para número
# pop() remove o elemento da lista na posição (índice) especificada
removed_task = tasks.pop(num - 1)
print(f"🗑️ Tarefa '{removed_task}' deletada.")
except ValueError:
print("⚠️ Por favor, digite um número válido.")
except IndexError:
print("⚠️ Não existe tarefa com esse número.")
Surgiram alguns pontos novos.
enumerate(tasks): Isso é incrivelmente útil! Quando você percorre uma lista em um loop, ele atribui automaticamente um número "0, 1, 2...". Graças a isso, podemos exibir as tarefas com um número, como emf"{i + 1}: {task}".tasks.pop(num - 1): Esta é a chave para a exclusão.pop()remove um elemento de uma lista na posição especificada. Colocamosnum - 1porque, enquanto o usuário digita "1", no mundo da programação (os índices das listas) a contagem começa do "0", então precisamos subtrair um. Essa "contagem a partir do zero" é um ponto que confunde todo iniciante em programação, então é bom lembrar!try / except: Este é o mecanismo de tratamento de erros. Significa "tente executar o código dentro dotry:, e se ocorrer um erro, capture-o comexcept:e execute este outro código em vez de o programa travar".ValueError:int()converte texto em número, mas se for dado um texto não numérico como "a", este erro ocorre.IndexError: Este erro ocorre se você tentar usarpop()com um número que não existe na lista (por exemplo, especificar "5" quando há apenas 3 tarefas).
Uma regra de ouro é que "os usuários não agem como o desenvolvedor espera". Ao incluir esse tipo de tratamento de erros, você evita que seu aplicativo trave inesperadamente e cria um programa mais amigável e robusto.
Passo 3: Salvando os Dados em um Arquivo para que Não Desapareçam
Nosso aplicativo atual tem uma grande fraqueza. Uma vez que você fecha o programa, todas as tarefas que adicionou desaparecem. Assim não serve como uma lista de tarefas, certo? Então, vamos adicionar uma função para salvar as tarefas em um arquivo e carregá-las na próxima vez que o programa iniciar.
# Decida um nome para o arquivo
TASKS_FILE = "tasks.txt"
# --- Definição das Funções ---
def load_tasks():
try:
# "r" é o modo de leitura (read)
with open(TASKS_FILE, "r", encoding="utf-8") as f:
# readlines() lê todas as linhas para uma lista, e strip() remove as quebras de linha
tasks = [line.strip() for line in f.readlines()]
except FileNotFoundError:
# Isso dará erro na primeira vez ou se o arquivo não existir, então retornamos uma lista vazia
tasks = []
return tasks
def save_tasks(tasks):
# "w" é o modo de escrita (write). Se o arquivo não existir, será criado.
with open(TASKS_FILE, "w", encoding="utf-8") as f:
for task in tasks:
# Ao escrever no arquivo, adicione um caractere de nova linha (\n) ao final de cada tarefa
f.write(task + "\n")
# --- Processo Principal ---
# Ao iniciar o app, primeiro carregue as tarefas do arquivo
tasks = load_tasks()
# Toda vez que uma tarefa for adicionada ou deletada, modifique para chamar save_tasks(tasks)
# (Consulte o código completo no início)
O ponto principal aqui é a "leitura e escrita de arquivos".
with open(...) as f:: Esta é a frase padrão para manipular arquivos em Python. Escrevendo desta forma, você garante que o arquivo seja fechado automaticamente após a leitura ou escrita, o que é mais seguro. Tive a experiência de perguntar à IA: "Me ensine a manipular arquivos de forma segura em Python", e esta foi a primeira coisa que ela recomendou.- Modos ("r", "w"): O segundo argumento de
open()especifica como abrir o arquivo."r"é para somente leitura (Read), e"w"é para somente escrita (Write). É preciso ter cuidado com o modo"w", pois se o arquivo já existir, ele apagará todo o seu conteúdo antes de escrever. encoding="utf-8": Pense nisso como um passe de mágica. É necessário para manipular corretamente caracteres como acentos e "ç" e, se omitido, pode fazer com que o texto apareça com caracteres estranhos.- Leitura (load):
f.readlines()lê o conteúdo do arquivo para uma lista, linha por linha. No entanto, cada linha inclui um caractere de nova linha (\n) no final, então usamosline.strip()para removê-lo e ter dados limpos. - Escrita (save):
f.write()escreve texto no arquivo. Desta vez, ao contrário, queremos salvar cada tarefa em uma linha separada, então adicionamos o caractere de nova linha\nao final de cada tarefa. Se você esquecer isso, todas as tarefas serão salvas em uma única linha e não poderão ser lidas corretamente (eu fiquei preso nisso por uns 15 minutos!).
E, finalmente, como mostrado no código completo no início, agrupar blocos de processamento usando def para criar "funções" (isso se chama refatorar) torna o código muito mais limpo e fácil de entender. Quando seu código começar a ficar longo, criar o hábito de organizá-lo em caixas (funções) para cada funcionalidade facilitará muito sua vida no futuro.
Conclusão: Se Funciona, Você Venceu! E para o Próximo Passo
Ótimo trabalho! Agora você tem o poder de criar seu próprio aplicativo de lista de tarefas em Python. O mais importante não é entender tudo perfeitamente, mas sim "primeiro, fazer funcionar, mesmo que seja copiando e colando". Ter algo que funciona e ir modificando aos poucos, experimentando com "o que acontecerá se eu mudar isso?", é o caminho mais rápido para melhorar, e eu vivi isso na prática.
Erros não são algo a temer, mas sim dicas para que seu programa fique ainda melhor. Mesmo que você não entenda uma mensagem de erro, pode colá-la diretamente em uma IA e perguntar "o que significa este erro e como posso corrigi-lo?", e na maioria das vezes ela lhe dará uma solução.
Sinta-se à vontade para adicionar ao aplicativo que criamos hoje uma "função de editar tarefas" ou uma "função para marcar tarefas concluídas" e transformá-lo na sua própria lista de tarefas definitiva!
Próximos Passos
Agora que você sabe criar um aplicativo básico, que tal se aventurar nos cálculos? A seguir, ensinamos como criar um aplicativo de calculadora simples que realiza as quatro operações aritméticas básicas.
Vamos criar um aplicativo de calculadora com Python! (operações aritméticas)