Vídeo em breve
Por enquanto, esta aula está disponível só em texto — o vídeo entra assim que ficar pronto.
Funções
Projeto final: agenda de contatos no terminal
Juntando variáveis, condicionais, laços, listas, dicionários e funções num projeto completo de linha de comando. · 20 min
Materiais complementares
Última aula do curso: vamos construir uma agenda de contatos que roda no terminal, usando tudo que você aprendeu — variáveis, operadores, condicionais, laços, listas, dicionários e funções.
O que o programa faz
Um menu em loop que permite: adicionar contato, listar todos, buscar por nome e sair.
contatos = [] # lista de dicionários: [{"nome": ..., "telefone": ...}, ...]
def adicionar_contato():
nome = input("Nome: ")
telefone = input("Telefone: ")
contatos.append({"nome": nome, "telefone": telefone})
print(f"{nome} adicionado(a) com sucesso!")
def listar_contatos():
if not contatos:
print("Nenhum contato cadastrado ainda.")
return
for contato in contatos:
print(f"{contato['nome']} — {contato['telefone']}")
def buscar_contato():
termo = input("Buscar por nome: ").lower()
encontrados = [c for c in contatos if termo in c["nome"].lower()]
if not encontrados:
print("Nenhum contato encontrado.")
return
for contato in encontrados:
print(f"{contato['nome']} — {contato['telefone']}")
Dica
[c for c in contatos if termo in c["nome"].lower()] é uma
list comprehension — um jeito mais compacto de escrever um for que
filtra itens numa lista nova. Não é obrigatório usar, mas é bom já
reconhecer essa sintaxe, porque ela aparece bastante em código Python real.
O menu principal
def exibir_menu():
print("\n--- Agenda de Contatos ---")
print("1. Adicionar contato")
print("2. Listar contatos")
print("3. Buscar contato")
print("4. Sair")
rodando = True
while rodando:
exibir_menu()
opcao = input("Escolha uma opção: ")
if opcao == "1":
adicionar_contato()
elif opcao == "2":
listar_contatos()
elif opcao == "3":
buscar_contato()
elif opcao == "4":
rodando = False
print("Até mais!")
else:
print("Opção inválida, tente de novo.")
Atenção
Repare que contatos é criado fora das funções e usado dentro delas
(via .append(), que modifica a lista existente em vez de criar uma
nova). Isso funciona para listas e dicionários, mas não funcionaria se a
função tentasse fazer contatos = [] de novo lá dentro — isso criaria
uma variável local nova, sem efeito na lista original.
Exercícios: evoluindo o projeto
Em vez de um exercício fechado, esta aula termina com desafios progressivos para você evoluir seu próprio projeto:
Exercício
1. Editar contato. Adicione uma opção “5. Editar contato” que busca um contato pelo nome e permite atualizar o telefone.
Exercício
2. Remover contato. Adicione uma opção para remover um contato da lista pelo nome (cuidado com o caso de o nome não existir).
Exercício
3. Desafio final. Impeça contatos duplicados: antes de adicionar, verifique se já existe um contato com o mesmo nome e, se existir, pergunte se o usuário quer atualizar o telefone em vez de criar um novo.
Parabéns por chegar até aqui! Você já tem a base necessária para os próximos cursos do site — as trilhas de Robótica e Inteligência Artificial usam exatamente essas mesmas ferramentas (variáveis, condicionais, laços, listas, dicionários e funções), só que aplicadas a sensores, simulações e modelos.