Leia o nome completo de uma pessoa. Depois apresente o último sobrenome e a primeira letra do nome dela. Use repetição.
Passo 1
O que o enunciado pede: ler o nome completo de uma pessoa e, usando repetição, apresentar duas coisas: o último sobrenome e a primeira letra do nome dela.
Informações dadas (assumidas): o nome completo é uma sequência de caracteres (string) contendo pelo menos um nome; as palavras (nome e sobrenomes) são separadas por espaços; pode haver espaços extras no início/fim ou múltiplos espaços entre palavras.
O que devemos produzir: duas saídas — (1) o último sobrenome (a última palavra não vazia da string) e (2) a primeira letra do primeiro nome (primeira letra da primeira palavra não vazia).
Informações dadas (assumidas): o nome completo é uma sequência de caracteres (string) contendo pelo menos um nome; as palavras (nome e sobrenomes) são separadas por espaços; pode haver espaços extras no início/fim ou múltiplos espaços entre palavras.
O que devemos produzir: duas saídas — (1) o último sobrenome (a última palavra não vazia da string) e (2) a primeira letra do primeiro nome (primeira letra da primeira palavra não vazia).
Passo 2
Ideia geral (sem resolver ainda): vamos percorrer a string caractere a caractere (repetição), identificar onde começam e terminam as palavras, guardar a primeira letra da primeira palavra que encontramos e também detectar qual é a última palavra encontrada até o fim da string. No final, retornamos o último sobrenome e a primeira letra do primeiro nome.
Passo 3
Conceitos básicos que vamos usar (explicadinho, devagar e amigo):
- String: é uma sequência de caracteres, por exemplo a cadeia “Maria Silva”. Pense nela como uma fila de letras e espaços, cada letra tem uma posição.
- Índice: posição de um caractere na string. Vamos numerar posições de
até , onde é o comprimento da string. - Repetição (loop): vamos usar um laço que visita todos os índices
de até . Em cada passo do laço olhamos o caractere atual e decidimos o que fazer. - Estado durante o loop: guardamos três coisas (variáveis):
(primeira letra já encontrada do primeiro nome), (índice onde começou a última palavra detectada), e (booleano que diz se estamos atualmente dentro de uma palavra). Essas variáveis vão sendo atualizadas à medida que percorremos a string.
Passo 4
Descrição detalhada do algoritmo (passo a passo lógico):
- Remova espaços extras nas pontas? Não é necessário se usarmos o loop corretamente, mas podemos ignorar espaços iniciais até achar a primeira letra.
- Inicialize:
, , . - Para cada índice
de até : - Seja
o caractere na posição . - Se
não for espaço (ou seja, é uma letra): - Se
é falso, então começamos uma nova palavra aqui: coloque e . - Se
ainda é nulo, então (aqui armazenamos a primeira letra do primeiro nome).
- Se
- Se
for espaço: coloque (terminamos uma palavra se estávamos dentro).
- Seja
- Ao final do loop, a última palavra começa em
. Para extrair o último sobrenome, colhemos os caracteres desde até o fim da palavra (ou seja, até o próximo espaço ou até o fim da string). Como fizemos o loop até o fim, o último sobrenome é a substring da string original começando em até o final da última palavra. - Formate a saída: apresente o último sobrenome e a primeira letra (em maiúscula se desejar). Se
ainda for nulo no fim, a string tinha só espaços — trate como caso inválido (mostrar vazio ou mensagem).
Passo 5
Explicando com um exemplo concreto (para você visualizar cada atualização das variáveis): nome = " Maria Aparecida Souza "
- Começamos com
nulo, , falso. - Percorremos os dois primeiros caracteres que são espaços: nada muda.
- Ao achar ‘M’ em alguma posição
: passa a verdadeiro, , e como é nulo, definimos ‘M’. Continuamos até o próximo espaço; ao ver o espaço, colocamos falso. - Pulamos espaços múltiplos e, ao achar ‘A’ de “Aparecida”, novo início de palavra:
atualiza para essa nova posição; já não é nulo, então não mudamos. - Finalmente, ao achar ‘S’ de “Souza”,
atualiza para posição de ‘S’. No fim do loop, o último sobrenome é a substring começando em — ou seja “Souza”. A continua ‘M’. Resultado: último sobrenome = “Souza”, primeira letra do nome = ‘M’.
Passo 6
Pseudocódigo bem mastigado (você poderia escrever isso num caderno durante a prova):
Passo 7
Implementação prática em Python (usa repetição explicitamente). Cole no seu editor e testa com qualquer nome. O código abaixo trata espaços múltiplos e espaços nas pontas:
def ultimo_sobrenome_e_primeira_letra(nome):
n = len(nome)
first_letter = None
last_start = -1
in_word = False
for i in range(n):
c = nome[i]
if c != ' ':
if not in_word:
in_word = True
last_start = i
if first_letter is None:
first_letter = c
else:
in_word = False
if last_start == -1:
return "", "" # string vazia ou só espaços
# extrair a última palavra: ir de last_start até encontrar um espaço ou fim
j = last_start
sobrenome_chars = []
while j < n and nome[j] != ' ':
sobrenome_chars.append(nome[j])
j += 1
ultimo_sobrenome = ''.join(sobrenome_chars)
return ultimo_sobrenome, first_letter
Exemplo de uso:
nome = " Maria Aparecida Souza "
sobrenome, primeira = ultimo_sobrenome_e_primeira_letra(nome)
print(sobrenome) # Souza
print(primeira) # M
Passo 8
Casos especiais e dicas rápidas (o que levar para a prova):
- Se houver só um nome, o último sobrenome será esse mesmo nome e a primeira letra é a primeira letra dele.
- Se quiser normalizar (maiuscula/minuscula), aplique .strip() ou .title() depois de extrair.
- Sempre use repetição (for ou while) para satisfazer a exigência do enunciado; não use apenas funções prontas como split() se a instrução pedir explicitamente “use repetição”.
- No caderno, explique rapidamente que você percorre a string e marca início de palavras — isso convence o corretor que você usou repetição.
Resposta
def ultimo_sobrenome_e_primeira_letra(nome):
n = len(nome)
first_letter = None
last_start = -1
in_word = False
for i in range(n):
c = nome[i]
if c != ' ':
if not in_word:
in_word = True
last_start = i
if first_letter is None:
first_letter = c
else:
in_word = False
if last_start == -1:
return "", ""
j = last_start
sobrenome_chars = []
while j < n and nome[j] != ' ':
sobrenome_chars.append(nome[j])
j += 1
ultimo_sobrenome = ''.join(sobrenome_chars)
return ultimo_sobrenome, first_letter