def preencher_listas(nome: str) -> list[str]:
"""
Recebe o nome da lista (EX: Lista de Ana)
Pede para inserir itens na lista e retorna esses itens.
Caso a lista fique vazia, retorna ao começo.
"""
lista = []
print(f'\nPreenchendo a lista de compras de {nome}:')
while True:
item = (input(f'Digite os itens da lista de compras de {nome}: ')).strip()
if not item:
print('A lista não pode estar vazia. Tente novamente.')
continue
lista.append(item)
if not continuar_programa(f"Deseja adicionar outro item à lista de {nome}? (s/n): "):
break
return lista
def continuar_programa(mensagem):
"""
Recebe uma mensagem personalizada perguntando se o usuário deseja continuar (EX: "Deseja continuar adicionando itens à lista? s/n")
Retorna True para 's' e False para 'n'.
"""
while True:
continuar = input(mensagem).strip().lower()
if continuar in ('s', 'n'):
return continuar == 's'
print('Por favor, responda com "s" ou "n".')
def mostrar_itens_em_comum(listas: dict[str, list[str]]) -> None:
"""
Recebe o dicionário com as listas e compara elas, mostrando os itens que tem em comum.
"""
nomes = list(listas.keys())
for i in range(len(nomes)):
for j in range(i + 1, len(nomes)):
nome1 = nomes[i]
nome2 = nomes[j]
set1 = set(map(str.lower, listas[nome1]))
set2 = set(map(str.lower, listas[nome2]))
comuns = set1 & set2
if comuns:
print('\nItens em ambas as listas: ')
for item in sorted(comuns):
print(f'- {item}')
else:
print(f'As listas de {nome1} e {nome2} não possui itens em comum.')
def main():
listas = {}
while True:
nome = input('Digite o dono da lista de compras: ').strip().capitalize()
if not nome:
print('O nome não pode estar vazio')
continue
if not nome.isalpha():
print('O nome deve conter apenas letras (sem números ou símbolos).')
continue
listas[nome] = preencher_listas(nome)
if not continuar_programa("Deseja criar outra lista de compras? (s/n): "):
break
print("\nListas de compras: ")
for pessoa, itens in listas.items():
print(f'\nLista de {pessoa}: ')
for item in itens:
print(f'- {item}')
mostrar_itens_em_comum(listas)
if __name__ == '__main__':
main()