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 senomenão for vazio. Por isso devemos garantir que a string não seja vazia antes de pegarnome[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 temnome[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(), aplicamosstrip()para limpar espaços e então verificamosif nome.lower() == 'fim': break. - Esse padrão é comum: loop infinito controlado por
breakquando 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
selecionadoscontendo 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').
- verificar que o nome não é vazio (
- 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ãonome[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
unicodedatae normalizaçãoNFD, 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:
Suponha que as entradas (cada linha) sejam:
MarianajoãoCarlosAnaJoséfim
Operação do programa:
- Lê
Mariana→ guarda - Lê
joão→ guarda - Lê
Carlos→ guarda - Lê
Ana→ guarda - Lê
José→.strip()viraJosé→ guarda - Lê
fim→ detecta sentinel → para de ler
Filtragem: Mariana→m→ não entrajoão→j→ entraCarlos→c→ não entraAna→a→ entraJosé→j→ entra
Resultado impresso:joãoAnaJosé
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)