1
resposta

Compreendendo laços - RESOLUÇÃO

import os

clientes = ["João", "Maria", "Carlos", "Ana", "Beatriz"]

clientes = [{'nome': 'João', 'categoria':'Financeiro', 'ativo' :False}, 
                {'nome': 'Maria', 'categoria':'RH', 'ativo' :True},
                {'nome': 'Carlos', 'categoria':'Suporte Técnico', 'ativo' :True},
                {'nome': 'Ana', 'categoria':'Cobrança', 'ativo' :True},
                {'nome': 'Beatriz', 'categoria':'Serviços Gerais', 'ativo' :False},]

def exibir_opcoes():
    print('1. Cadastrar Cliente')
    print('2. Listar Cliente')
    print('3. Alterar Status do Cliente')
    print('4. Sair\n')

def finalizar_app():
    exibir_subtitulo('Finalizando o app\n')
    

def retornar_ao_menu_principal():
    input('\n Pressione a tecla ENTER para voltar ao menu principal e reiniciar o processo por favor.')
    main()

def opcao_invalida():
    input('\n Esta opção não é valida para o cadastro.')
    main()


def exibir_subtitulo(texto):
    os.system('cls')
    # o comando abaixo pode ser colocado com ou sem numero >> "linha = '*' * (len(texto) + 4) ou inha = '*' * (len(texto))"
    linha = '*' * (len(texto) + 4)
    print(linha)
    print(texto)
    print(linha)
    print()

def cadastrar_novo_cliente():
    '''Essa função é responsavel por cadastrar um novo cliente
    
    Inputs:
    - Nome do cliente
    - Categoria 

    Output:
    - Adiciona um novo cliente a lista de clientes
    
    '''
    exibir_subtitulo('Cadastre o novo cliente')    
    nome_do_cliente = input('Digite o nome do cliente que deseja cadastrar: ')
    categoria = input(f'Digite o nome da Categoria do cliente {nome_do_cliente}:')
    dados_do_cliente = {'nome' :nome_do_cliente, 'categoria':categoria, 'ativo':False}
    clientes.append(dados_do_cliente)

    clientes.append(nome_do_cliente)
    print(f'O colaborador {nome_do_cliente} foi cadastrado com sucesso!\n')

    retornar_ao_menu_principal()
    

def listar_clientes():
    exibir_subtitulo('Listando os Clientes')

    print(f' {'Nome do cliente'.ljust(22)} | {'Categoria'.ljust(20)} | Status\n')
    for cliente in clientes:
        nome_cliente = cliente['nome']
        categoria = cliente['categoria']
        ativo = 'ativado' if cliente['ativo'] else 'desativado'
        print(f' - {nome_cliente.ljust(20)} | {categoria.ljust(20)} | {ativo}')

    retornar_ao_menu_principal()

def alternar_estado_cliente(): 
    exibir_subtitulo('Altere o status do cliente')
    nome_cliente = input('Digite o nome do cliente que deseja alterar o status: ')
    cliente_encontrado = False

    for cliente in clientes:
        if nome_cliente == cliente['nome']:
            cliente_encontrado = True 
            cliente['ativo'] = not cliente['ativo']
            mensagem = f'O status do colaborador {nome_cliente} está ativo.' if cliente['ativo'] else f'O status do colaborador {nome_cliente} não está mais ativo.'
            print(mensagem)
            
    if not cliente_encontrado:
        print('O cliente não foi encontrado')

    retornar_ao_menu_principal() 

def escolher_opcao():
    try:
        opcao_escolhida = int(input('Esolha uma Opção: '))
        # opcao_escolhida = int(opcao_escolhida)


        if opcao_escolhida == 1:
            cadastrar_novo_cliente()
        elif opcao_escolhida == 2:
           listar_clientes()
        elif opcao_escolhida == 3:
            alternar_estado_cliente()
        elif opcao_escolhida == 4:
            finalizar_app()
        else:
            opcao_invalida()
    except:
        opcao_invalida()    

def main():
    os.system('cls')
    exibir_opcoes()
    escolher_opcao()

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

Oi, Luciano! Como vai?

Seu projeto mostra um bom domínio da estrutura de menus e controle de fluxo com funções. A parte de alternar o estado do cliente ficou clara e bem organizada. Um ponto que chamou atenção foi o trecho clientes.append(nome_do_cliente), que parece estar duplicando o nome ao invés de adicionar apenas o dicionário com os dados.

Uma dica interessante para o futuro é usar o método lower() ao comparar nomes, ajudando a evitar erros por causa de letras maiúsculas ou minúsculas. Veja este exemplo:


nome_cliente = input('Digite o nome do cliente: ').lower()
for cliente in clientes:
    if cliente['nome'].lower() == nome_cliente:
        # Código de alteração

Isso torna a busca mais flexível e evita erros por diferenças na capitalização.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!