1
resposta

04 Faça como eu fiz: organizando uma lista de convidados

import json
import os

lista = []

ARQUIVO_LISTA = "lista.json"


def carregar_lista():
    global lista
    if os.path.exists(ARQUIVO_LISTA):
        try:
            with open(ARQUIVO_LISTA, "r", encoding="utf-8") as arquivo:
                dados = json.load(arquivo)
                lista = sorted(list(set(dados)))
        except Exception:
            lista = []


def salvar_lista():
    try:
        with open(ARQUIVO_LISTA, "w") as f:
            json.dump(lista, f, indent=4, ensure_ascii=False)
    except Exception as e:
        print(f"Erro ao salvar a lista: {e}")


def cabecalho(texto, char="-", largura=50, limpar=True):
    if limpar:
        os.system("cls" if os.name == "nt" else "clear")
    print(char * largura)
    print(texto.center(largura))
    print(char * largura)


def menu():
    while True:
        cabecalho("Lista de Convidados!")
        print("1 - Adicionar convidado")
        print("2 - Remover convidado")
        print("3 - Listar convidados")
        print("4 - Sair do programa")
        try:
            opcao = int(input("Escolha uma opção: "))
            if opcao == 1:
                adicionar_convidado()
            elif opcao == 2:
                remover_convidado()
            elif opcao == 3:
                listar_convidados()
            elif opcao == 4:
                sair()
            else:
                print("Opção inválida. Tente novamente.")
        except ValueError:
            print("Opção inválida. Tente novamente.")


def adicionar_convidado():
    cabecalho("Adicionar Convidado")
    nome = input("Digite o nome do convidado: ").strip().title()
    if not nome:
        print("Nome inválido. Por favor, digite um nome válido.")

    elif nome in lista:
        print("O convidado já está na lista.")

    else:
        lista.append(nome)
        salvar_lista()
        print(f"O convidado '{nome}' foi adicionado com sucesso.")
    input("Pressione ENTER para continuar...")


def remover_convidado():
    cabecalho("Remover Convidado")
    if not lista:
        print("A lista de convidados está vazia. Não há convidados para remover.")
        input("Pressione ENTER para continuar...")
        return

    else:
        print("Lista de Convidados:")
        for i, convidado in enumerate(lista, start=1):
            print(f"{i}. {convidado}")
    try:
        indice = int(input("Digite o número do convidado que deseja remover: ")) - 1
        if 0 <= indice < len(lista):
            nome_removido = lista.pop(indice)
            salvar_lista()
            print(f"O convidado '{nome_removido}' foi removido com sucesso.")
        else:
            print("Número de convidado inválido.")
    except ValueError:
        print("Entrada inválida. Por favor, digite um número.")

    input("Pressione ENTER para continuar...")


def listar_convidados():
    cabecalho("Lista de Convidados")
    if not lista:
        print("A lista de convidados está vazia.")
    else:
        print("Lista de Convidados:")
        for i, convidado in enumerate(lista, start=1):
            print(f"{i}. {convidado}")
    input("Pressione ENTER para continuar...")


def sair():
    salvar_lista()
    os.system("cls" if os.name == "nt" else "clear")
    print("Dados salvos. Programa Fechado.")
    exit()


def main():
    carregar_lista()
    menu()


if __name__ == "__main__":
    main()
1 resposta

Oii Daniel , tudo bem?

Parabéns por concluir o desafio.
O seu código está bem estruturado e atende às necessidades do problema proposto.

Bons estudos!

Sucesso

Imagem da comunidade