1
resposta

Revisão de código

Quero opiniões sobre o código, sobre abstração, se ele está maior do que deveria, etc. Obrigado a todos da comunidade!

def lista_compras():
    lista_ana = set()
    lista_laura = set()
    
    while True:
        escolha_lista = input('Escolha em qual lista será adicionada: Ana ou Laura (digite "sair" para fechar o programa): ').lower()
            
        if escolha_lista == 'sair':
                print('\nEncerrando...')
                break
        elif escolha_lista not in ('ana', 'laura'):    
            print('Opção inválida!')
            continue
            
        while True:     
            print('Digite "voltar" a qualquer momento para voltar ao seletor da lista\n')
            adiciona_item = input('Adcionando: ').lower().strip()
                     
            if adiciona_item == 'voltar':
                break
            
            if escolha_lista == 'ana':
                    lista_ana.add(adiciona_item)
            elif escolha_lista == 'laura':
                    lista_laura.add(adiciona_item)

    print('Lista da Ana: ' + str(lista_ana))
    print('Lista da Laura: ' + str(lista_laura))
    print('Itens em comum: ' + str(lista_ana.intersection(lista_laura)))    
            
                

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

Oi, Alexandre! Tudo bem?

Parabéns por compartilhar seu código com a comunidade, buscar revisão é uma das formas mais rápidas de evoluir.

Seu código já está bem sólido: você usou corretamente set com .add() e .intersection(), e o tratamento de entrada com .lower().strip() está ótimo.

Sobre abstração e tamanho do código, dá pra deixar mais enxuto e escalável usando um dicionário, o que é mais avançado, mas sua forma é funcional ok? em vez de if/elif separados para Ana e Laura. Assim, você elimina repetição e ganha flexibilidade:

def lista_compras():
    listas = {
        'ana': set(),
        'laura': set()
    }
    
    while True:
        escolha_lista = input(
            'Escolha a lista (Ana ou Laura) ou "sair": '
        ).lower().strip()
            
        if escolha_lista == 'sair':
            print('\nEncerrando...')
            break
        if escolha_lista not in listas:
            print('Opção inválida!')
            continue
            
        while True:
            print('Digite "voltar" para retornar\n')
            item = input(
                f'Adicionando na lista da {escolha_lista.capitalize()}: '
            ).lower().strip()
                     
            if item == 'voltar':
                break
            
            listas[escolha_lista].add(item)

    print('Lista da Ana:', listas['ana'])
    print('Lista da Laura:', listas['laura'])
    print('Itens em comum:', listas['ana'].intersection(listas['laura']))


if __name__ == "__main__":
    lista_compras()

Por que isso melhora?
Com o dicionário (listas), você não precisa alterar a lógica se quiser adicionar mais pessoas, basta incluir novas chaves. O código cresce sem virar um monte de if.

Segue nesse ritmo, você está no caminho certo. Espero ter ajudado.

Bons estudos!

Sucesso

Imagem da comunidade