1
resposta

[Dúvida] Dúvida qual seria o melhor código?

O código do instrutor possui dois participantes.items(), ficou mais simples que o meu código, mas achei repetitivo. Então
decidir fazer dessas duas forma:
obs:(Gostaria de saber qual seria a melhor forma? )

-------> Código do Instrutor < ---------

participantes = { 

    "Workshop 1": {"Alice", "Bruno", "Carla", "Diego"}, 

    "Workshop 2": {"Fernanda", "Gustavo", "Helena"} 

} 

nome_remover = input("Digite o nome do participante a ser removido: ") 

for workshop, nomes in participantes.items(): 

    nomes.discard(nome_remover) 

print("Lista atualizada de participantes:") 

for workshop, nomes in participantes.items(): 

    print(f"{workshop}: {nomes}") 

1.Minha solução:

participantes = { 

    "Workshop 1": {"Alice", "Bruno", "Carla", "Diego"}, 

    "Workshop 2": {"Fernanda", "Gustavo", "Helena"} 

} 

print(f'\n Lista de participantes: {participantes}')

while True: 
  nome_participante=input('\n Digite o nome do participante a ser removido: ').title()

  for  values in participantes.values():
  
        if  nome_participante in values:
              values.remove(nome_participante)
              print('\nLista atualizada de participantes: ')
              
              for keys,values in participantes.items():
               print(f"\n- {keys}: {values} ")
              break
  else: 
    print('\n Esse participante não consta na lista, digite um participante válido')
  1. Com base no código do instrutor:
participantes = { 

    "Workshop 1": {"Alice", "Bruno", "Carla", "Diego"}, 

    "Workshop 2": {"Fernanda", "Gustavo", "Helena"} 

} 

nome_remover = input("Digite o nome do participante a ser removido: ").title()
print("Lista atualizada de participantes:") 

for workshop, nomes in participantes.items(): 
    nomes.discard(nome_remover) 
    print(f"{workshop}: {nomes}") 
1 resposta

Oii, Andressa! Tudo bem?

Excelente iniciativa de ir além do exercício e testar diferentes formas de resolver o mesmo problema. É exatamente assim que evoluímos na programação!

Você trouxe pontos muito interessantes. Vamos analisar as diferenças entre o código do instrutor e as suas duas soluções, focando em legibilidade, robustez e boas práticas.

  1. remove() vs discard()

Essa é a diferença técnica mais importante entre as abordagens.

  • No seu código (Solução 1): Você usou remove(). O remove() gera um erro (KeyError) se o elemento não existir no conjunto. Por isso, você precisou fazer a verificação if nome_participante in values: antes. Isso é correto e seguro.
  • No código do instrutor e Solução 2: Foi usado o discard(). O discard() tenta remover o item; se o item não existir, ele não faz nada e não gera erro.

Dica: Quando não temos certeza se o elemento está no conjunto, o discard() costuma deixar o código mais limpo, pois elimina a necessidade do if.

  1. Separação de Responsabilidades (O código do instrutor)

Você achou o código do instrutor repetitivo por ter dois loops (for). Entendo seu ponto, parece que estamos "trabalhando em dobro". Porém, existe um conceito chamado Separação de responsabilidades.

  1. O primeiro loop serve apenas para processar os dados (remover o aluno).
  2. O segundo loop serve apenas para exibir os dados (mostrar o resultado final).

Em sistemas reais, muitas vezes preferimos separar essas ações. Imagine que amanhã você não queira mais imprimir no console, mas sim salvar num arquivo. Se as lógicas estiverem separadas, é mais fácil alterar só a parte da exibição sem quebrar a lógica de remoção.

  1. A sua solução 1 (Interatividade)

A sua primeira solução é a mais completa em termos de Experiência do Usuário (UX).

  • Pontos fortes: O uso do .title() para garantir que a formatação do nome coincida com a lista (ex: "alice" vira "Alice") é ótimo! O loop while True também é excelente para garantir que o programa não encerre até que uma ação válida ocorra.
  • Ponto de atenção: O código ficou um pouco mais complexo de ler devido aos aninhamentos (while -> for -> if). O uso do else no final do for é um recurso avançado e interessante do Python, mas pode confundir quem está começando.
  1. A sua solução 2 (Otimização)

Esta solução é muito boa. Você combinou a limpeza de dados com a exibição. Pra scripts pequenos e exercícios, essa é uma solução muito elegante e performática, pois percorre a estrutura de dados apenas uma vez.

Qual é o "melhor"?

Não existe um "melhor" absoluto, depende do objetivo:

  • Se o foco for clareza e manutenção (padrão de mercado): O estilo do instrutor (separar ação de visualização) costuma ganhar.
  • Se o foco for interatividade: A sua Solução 1 ganha.
  • Se o foco for concisão/rapidez: A sua Solução 2 ganha.

Espero ter ajudado.

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