Leia o nome de pessoas até que se digite a palavra a ‘fim’. Após isso, apresente as pessoas cujo nome iniciam com a letra ‘j’ ou ‘J’ e ‘a’ ou ‘A’. Use repetição.

Passo 1

O enunciado pede o seguinte: ler nomes de pessoas até que seja digitada a palavra ‘fim’. Depois de terminar a leitura, apresentar (mostrar) apenas os nomes que começam com a letra ‘j’ ou ‘J’ e também os que começam com ‘a’ ou ‘A’. Informações relevantes que o enunciado dá:
  • Entrada: uma sequência de nomes (cada nome é uma string). A leitura termina quando for digitada exatamente a palavra ‘fim’ (aceitamos qualquer caixa — por exemplo, ‘FIM’, ‘Fim’ — o enunciado não especifica, então vamos tratar isso de forma case-insensitive).
  • Saída: listar os nomes lidos que iniciam com as letras ‘j’ ou ‘J’ e ‘a’ ou ‘A’ (ou seja, início com ‘j’ ou ‘a’, indiferente de maiúscula/minúscula).
  • Deve usar repetição (loop) para fazer a leitura e o processamento.

Passo 2

Visão geral do método que vamos aplicar (sem ainda implementar): usar um loop que pede nomes continuamente; quando o usuário digitar ‘fim’ (ignorando maiúsculas/minúsculas) saímos do loop. Enquanto lemos nomes válidos, guardamos numa lista. Depois que o loop terminar, filtramos essa lista para manter só os nomes cujo primeiro caractere, em minúscula, seja ‘j’ ou ‘a’. Finalmente imprimimos esses nomes, um por linha. Esse método usa estruturas básicas: repetição (while), armazenamento em lista, e teste de strings.

Passo 3

Conceitos de string que precisamos entender (explicação didática):
  • strip(): remove espaços no começo e no final da string. Ex.: ao digitar " João " o resultado de " João ".strip() é "João". Isso evita que espaços atrapalhem.
  • lower() / upper(): convertem todos os caracteres para minúsculas / maiúsculas. Ex.: "João".lower() vira "joão". Usamos isso para comparar sem nos preocupar com caixa.
  • acessar o primeiro caractere: em Python, nome[0] é o primeiro caractere se nome não for vazio. Por isso devemos garantir que a string não seja vazia antes de pegar nome[0].
  • startswith(): método que verifica se a string começa com determinado prefixo. Ex.: nome.lower().startswith('j') retorna True se o nome começar com ‘j’ ou ‘J’.
Exemplos rápidos:
  • "Ana".strip().lower()"ana". O primeiro caractere é "a".
  • " jose".strip().lower()"jose". O primeiro caractere é "j".
  • "" (string vazia) não tem nome[0]; precisamos checar antes.

Passo 4

Estrutura de repetição (loop com sentinel ‘fim’):
  • Usaremos while True: para criar um loop que só termina quando encontrarmos o sentinel.
  • A cada iteração, pedimos a entrada com input(), aplicamos strip() para limpar espaços e então verificamos if nome.lower() == 'fim': break.
  • Esse padrão é comum: loop infinito controlado por break quando a condição de parada (sentinel) aparece.

Passo 5

Detalhes sobre armazenar e filtrar:
  • Enquanto lemos, guardamos os nomes em uma lista nomes.
  • Depois que o loop termina, fazemos uma lista nova selecionados contendo só os nomes que passam no critério:
    • verificar que o nome não é vazio (if nome:).
    • acessar o primeiro caractere com nome[0].lower() e testar se está em ('j', 'a').
  • Por que guardar e só mostrar depois? Porque o enunciado pede: “Após isso, apresente…” — isto sugere que a apresentação ocorra depois do término da leitura. Guardar facilita fazê-lo depois.

Passo 6

Tratamento de acentos (observação prática):
  • Se um nome começar com letra acentuada, por exemplo "Álvaro", então nome[0].lower() será 'á', que não é igual a 'a'. Dependendo do que o professor espera, pode ser desejável tratar 'Á' como 'A'.
  • Para remover acentos usaríamos o módulo unicodedata e normalização NFD, transformando 'Á' em 'A'. Isso é um passo extra; vou comentar essa possibilidade no código final como alternativa, mas manterei a versão simples (sem remoção de acento) para facilitar a compreensão — se você quer que 'Álvaro' conte como começando com ‘A’, posso mostrar a versão com normalização também.

Passo 7

Exemplo passo a passo de execução (sem acentos):
Suponha que as entradas (cada linha) sejam:
  • Mariana
  • joão
  • Carlos
  • Ana
  • José
  • fim
Operação do programa:
  • Mariana → guarda
  • joão → guarda
  • Carlos → guarda
  • Ana → guarda
  • José .strip() vira José → guarda
  • fim → detecta sentinel → para de ler
    Filtragem:
  • Marianam → não entra
  • joãoj → entra
  • Carlosc → não entra
  • Anaa → entra
  • Joséj → entra
    Resultado impresso:
  • joão
  • Ana
  • José

Passo 8

Código final (explicado linha a linha): a seguir vou fornecer um código em Python simples, legível e que faz exatamente o pedido. Comentários no código explicam cada parte. Se você nunca programou em Python, pense que input() lê uma linha do usuário; print() escreve na tela; listas ([]) guardam vários valores; for e if são estruturas de repetição e decisão bem básicas.

Resposta

# Programa para ler nomes até 'fim' e depois mostrar os que começam com 'j'/'J' ou 'a'/'A'.

nomes = []

# Leitura dos nomes
while True:
    nome = input().strip()  # lê uma linha e remove espaços nas extremidades
    if nome.lower() == 'fim':  # condição de parada (sentinel), case-insensitive
        break
    nomes.append(nome)  # guarda o nome na lista

# Filtragem dos nomes que começam com 'j' ou 'a' (independente de maiúscula/minúscula)
selecionados = []
for nome in nomes:
    if nome:  # garante que a string não é vazia
        primeira = nome[0].lower()  # pega o primeiro caractere em minúscula
        if primeira in ('j', 'a'):
            selecionados.append(nome)

# Apresentação dos resultados (um por linha)
for n in selecionados:
    print(n)

Exercícios relacionados