( 0,6 pontos) Faça um programa que receba números inteiros do usuário enquanto ele não digitar
, sem aspas. A lista formada pelos números lidos chamamos nesse enunciado de lista1. Repita o processo para ler mais uma lista, lista2. Imprima a lista dos números que aparecem tanto na lista1 como na lista2, sem repetições na lista resultante.
EXTRA (0,4 pontos): Se não usar estruturas condicionais e usar no máximo uma estrutura de repetição. É permitido o uso de estruturas mais avançadas.
EXEMPLO
Entrada
Saída
5
4
s
4
9
7
s
EXEMPLO
| Entrada | Saída |
| 5 |
|
| 4 | |
| s | |
| 4 | |
| 9 | |
| 7 | |
| s |
Passo 1
O enunciado pede um programa que faça o seguinte:
- Ler uma sequência de entradas do usuário para formar a lista chamada lista1. A leitura deve parar quando o usuário digitar exatamente
s(sem aspas). - Ler uma segunda sequência de entradas para formar a lista chamada lista2. A leitura também para quando o usuário digitar
s. - Imprimir a lista dos números inteiros que aparecem tanto em lista1 como em lista2, sem repetições na lista resultante.
Informações relevantes dadas:
- As entradas válidas para as listas são números inteiros; a letra
sindica o fim da leitura de cada lista. - No exemplo, a primeira sequência foi
5,4,s; a segunda foi4,9,7,s. A saída esperada foi[4](apenas o número que aparece em ambas, sem repetição).
Passo 2
Vamos planejar a solução em passos simples (algoritmo):
- Ler entradas em loop até encontrar
s; converter entradas numéricas para inteiro e armazenar em lista1. - Repetir para lista2.
- Calcular quais números aparecem em ambas as listas.
- Remover repetições do resultado e imprimir a lista final.
Observação sobre decisão de formato de saída:
- A lista resultante não deve ter repetições. O enunciado não exige uma ordem específica, então podemos escolher uma ordem determinística (por exemplo ordenar os elementos em ordem crescente) para tornar a saída previsível.
Passo 3
Como fazer a leitura das entradas (detalhe passo a passo, sem pular etapas):
- Usar um loop que repete até o usuário digitar
s. - Em cada iteração, ler a linha com algo como
entrada = input()(string). - Se
entrada == 's', sair do loop. - Caso contrário, tentar interpretar
entradacomo inteiro:val = int(entrada). Se a conversão falhar por algum motivo, o programa pode mostrar uma mensagem de erro ou simplesmente ignorar a entrada (aqui assumimos que o usuário digita corretamente inteiros ous). - Acrescentar
valà lista correspondente (lista1 ou lista2).
Exemplo de iteração manual (conceitual):
- Usuário digita
5→int('5')vira5→ adicionar em lista1. - Usuário digita
4→ adicionar4. - Usuário digita
s→ parar leitura de lista1.
Passo 4
Eliminar repetições e computar interseção de maneira simples e eficiente:
- Uma ideia muito prática em Python (e em várias linguagens) é usar a estrutura de dados “conjunto” (set). Um conjunto não permite elementos repetidos e permite operações rápidas como interseção.
- Converter lista1 para um conjunto
set1 = set(lista1)e lista2 paraset2 = set(lista2). - A interseção é
set_inter = set1 & set2(ouset1.intersection(set2)), que contém todos os elementos presentes em ambos os conjuntos, sem repetições.
Passo 5
Detalhes sobre remoção de repetições e ordenação:
- Após obter
set_inter, podemos transformar em lista para imprimir:resultado = list(set_inter). - Para ter saída determinística e fácil de conferir em prova, ordenar
resultadocomresultado.sort()(ordem crescente). - Finalmente imprimir
resultadono formato de lista Python (por exemploprint(resultado)), que produz algo como[4].
Passo 6
Código completo explicado linha a linha (implementação em Python):
def ler_lista():define uma função que lê valores atés.- Dentro dela,
while True:inicia o loop de leitura. entrada = input()lê uma linha do usuário.if entrada == 's':verifica término da leitura e fazbreak.val = int(entrada)converte para inteiro;lista.append(val)armazena.- A função retorna a lista completa lida.
- Depois, chama-se
lista1 = ler_lista()elista2 = ler_lista(). - Converte-se para conjuntos e calcula-se interseção.
- Ordena-se e imprime-se a lista resultado.
Passo 7
Sobre tratamento de erros de entrada (boas práticas para prova/uso):
- Se quiser tornar o programa mais robusto, envolver
int(entrada)emtry/except ValueErrorpara capturar entradas inválidas (quando não for inteiro nems) e avisar o usuário. - Para a resolução da prova, pode-se assumir entradas corretas como no enunciado (apenas inteiros ou
s).
Passo 8
Versão “concisa” (sem repetições e com saída ordenada) — pronto para colar e executar em Python:
def ler_lista():
lista = []
while True:
entrada = input()
if entrada == 's':
break
lista.append(int(entrada))
return lista
lista1 = ler_lista()
lista2 = ler_lista()
set1 = set(lista1)
set2 = set(lista2)
resultado = list(set1 & set2) # interseção sem repetições
resultado.sort() # ordena para saída determinística
print(resultado)
Resposta
def ler_lista():
lista = []
while True:
entrada = input()
if entrada == 's':
break
lista.append(int(entrada))
return lista
lista1 = ler_lista()
lista2 = ler_lista()
set1 = set(lista1)
set2 = set(lista2)
resultado = list(set1 & set2)
resultado.sort()
print(resultado)