( 0,6 pontos) Faça um programa que receba números inteiros do usuário enquanto ele não digitar \mathbf{s}, 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]
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 s indica o fim da leitura de cada lista.
  • No exemplo, a primeira sequência foi 5, 4, s; a segunda foi 4, 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):
  1. Ler entradas em loop até encontrar s; converter entradas numéricas para inteiro e armazenar em lista1.
  2. Repetir para lista2.
  3. Calcular quais números aparecem em ambas as listas.
  4. 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 entrada como 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 ou s).
  • Acrescentar val à lista correspondente (lista1 ou lista2).
Exemplo de iteração manual (conceitual):
  • Usuário digita 5int('5') vira 5 → adicionar em lista1.
  • Usuário digita 4 → adicionar 4.
  • 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 para set2 = set(lista2).
  • A interseção é set_inter = set1 & set2 (ou set1.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 resultado com resultado.sort() (ordem crescente).
  • Finalmente imprimir resultado no formato de lista Python (por exemplo print(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 faz break.
  • val = int(entrada) converte para inteiro; lista.append(val) armazena.
  • A função retorna a lista completa lida.
  • Depois, chama-se lista1 = ler_lista() e lista2 = 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) em try/except ValueError para capturar entradas inválidas (quando não for inteiro nem s) 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)

Exercícios relacionados