Construa um programa para fazer uma pequena entrevista com os alunos de uma turma. Na entrevista, são informados o sexo e a idade de cada aluno. Considere que o usuário não sabe quantos alunos existem na turma. O programa deve exibir a quantidade de homens acima de 18 anos e a quantidade de mulheres de qualquer idade. Para encerrar o programa, o usuário deve informar uma idade negativa.
Passo 1
O programa deve fazer uma entrevista repetida com os alunos da turma, pedindo para cada aluno o sexo e a idade, até que o usuário informe uma idade negativa. As saídas exigidas são:
- a quantidade de homens com idade maior que
anos; - a quantidade de mulheres de qualquer idade.
Informações fornecidas pelo enunciado:
- para cada aluno o programa recebe o sexo (texto) e a idade (número inteiro);
- a execução termina quando o usuário informar uma idade negativa (sentinela);
- o programa não sabe previamente quantos alunos existem na turma.
Passo 2
Decisão do método: vamos usar um laço “sentinela” (um laço que repete indefinidamente até encontrar um valor especial que indica fim). Aqui a idade negativa é exatamente esse sentinela. Por que isso é bom? Porque não precisamos saber quantos alunos há: lemos cada aluno e, se a idade for negativa, interrompemos. Conceito rápido: um laço while True inicia repetição infinita e usamos break quando a condição de término aparece.
Passo 3
Variáveis que vamos usar e seus significados (declaração conceitual):
-
: contador dos homens com idade > (inicialmente ); -
: contador das mulheres de qualquer idade (inicialmente ); -
: inteiro lido do usuário para cada aluno; -
: string lida do usuário para cada aluno, normalizada (sem espaços e em minúsculas).
Explicação de tipos:
- contadores são inteiros (números inteiros que aumentam de
em ); - idade será convertida para inteiro; se a conversão falhar, devemos avisar e pedir de novo;
- sexo é texto; vamos tratar maiúsculas/minúsculas com métodos que transformam para minúsculas.
Passo 4
Leitura e validação de entradas (passo a passo didático):
- Ler a idade como string e tentar converter para inteiro. Se a conversão falhar (usuário digitou algo não-numérico), mostrar mensagem de erro e pedir a idade novamente. Isso evita que o programa quebre.
- Se a idade lida for menor que
, interromper o laço (termina a entrevista). - Ler o sexo e normalizá-lo com métodos de string: primeiro aplicar
para remover espaços nas extremidades e depois para converter para minúsculas. - Aceitar formas comuns para masculino e feminino: por exemplo
, para masculino e , para feminino. Se o usuário digitar formato inválido, pedir novamente o sexo até que seja válido. Não vamos voltar a pedir a idade — só o sexo para aquele mesmo aluno.
Passo 5
Regras de contagem (a “lógica” do problema, explicada como se fosse uma mini-aula):
- Depois de obter uma idade válida (
) e um sexo válido ( ): - Se
indicar masculino e , incrementa em . - Se
indicar feminino, incrementa em .
- Se
- Observação: o enunciado pede “homens acima de
anos” — isso corresponde à condição matemática . Repare que "acima de " não inclui (ou seja, um homem com exatamente anos não conta).
Passo 6
Fluxograma simples em palavras (pseudocódigo):
- inicializar contadores
e ; - repetir:
- pedir idade;
- se não for inteiro, avisar e repetir pedir idade;
- se idade <
, sair do laço; - pedir sexo;
- enquanto sexo não for válido, pedir sexo novamente;
- aplicar regras de contagem (ver Passo 5);
- fim repetir;
- mostrar os dois contadores.
Passo 7
Exemplo passo a passo de execução com entradas fictícias (para você conseguir visualizar e reproduzir na prova):
- entrada 1: idade =
, sexo = -> condição é verdadeira, então passa de para . - entrada 2: idade =
, sexo = -> incrementa de para . - entrada 3: idade =
(valor negativo) -> laço termina; imprime resultados.
Esses passos mostram como atualizar os contadores manualmente, o que ajuda a entender o comportamento do programa.
Passo 8
Tratamento de exceções e boas práticas que valem na prova:
- sempre usar try/except ao converter idade para inteiro para evitar que uma entrada ruim encerre o programa abruptamente;
- normalizar o sexo com
e para aceitar variações como , , , etc.; - deixar mensagens claras para o usuário (por exemplo: “digite um número inteiro para idade” ou “digite ‘M’ ou ‘F’ para o sexo”);
- documentar (comentários curtos) para que o corretor entenda sua lógica se pedir código.
Passo 9
Motivação final e dica rápida para a prova
- Em prova, escreva primeiro o pseudocódigo do Passo 6 (mostra que você entendeu a lógica) e depois traduza para a linguagem pedida (ou para Python se o enunciado não exigir linguagem).
- Mantenha a validação simples: validar idade como inteiro e validar sexo com um conjunto pequeno de strings aceitáveis.
- Respira fundo — você consegue! Faz um passo de cada vez: estrutura do laço, leitura, validação, contagem e saída.
Resposta
def main():
homens_maior_18 = 0
mulheres = 0
print("Entrevista de alunos. Para encerrar, informe uma idade negativa.")
while True:
# Leitura e validação da idade
idade_str = input("Informe a idade do aluno (inteiro): ").strip()
try:
idade = int(idade_str)
except ValueError:
print("Idade inválida. Digite um número inteiro (ex.: 20).")
continue
# Sentinela: idade negativa encerra o programa
if idade < 0:
break
# Leitura e validação do sexo
while True:
sexo = input("Informe o sexo do aluno (M/F ou masculino/feminino): ").strip().lower()
if sexo in ('m', 'masculino', 'homem', 'h'):
tipo = 'M'
break
elif sexo in ('f', 'feminino', 'mulher'):
tipo = 'F'
break
else:
print("Sexo inválido. Digite 'M' para masculino ou 'F' para feminino.")
# Aplicar regras de contagem
if tipo == 'M':
if idade > 18:
homens_maior_18 += 1
else: # tipo == 'F'
mulheres += 1
# Resultado final
print(f"Quantidade de homens acima de 18 anos: {homens_maior_18}")
print(f"Quantidade de mulheres (qualquer idade): {mulheres}")
if __name__ == "__main__":
main()