Pular para o conteúdo
</>RoByte

Buscar cursos e aulas

Aulas do curso

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

Código no GitHubAbrir no Colab

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.