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):
  • \text{homens\_maior\_18}: contador dos homens com idade > ... (inicialmente ...);
  • \text{mulheres}: contador das mulheres de qualquer idade (inicialmente ...);
  • \text{idade}: inteiro lido do usuário para cada aluno;
  • \text{sexo}: 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):
  1. 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.
  2. Se a idade lida for menor que ..., interromper o laço (termina a entrevista).
  3. Ler o sexo e normalizá-lo com métodos de string: primeiro aplicar .strip() para remover espaços nas extremidades e depois .lower() para converter para minúsculas.
  4. Aceitar formas comuns para masculino e feminino: por exemplo 'm', 'masculino' para masculino e 'f', 'feminino' 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 ( \text{idade}) e um sexo válido ( \text{sexo}):
    • Se \text{sexo} indicar masculino e \text{idade} > 18, incrementa \text{homens\_maior\_18} em ....
    • Se \text{sexo} indicar feminino, incrementa \text{mulheres} em ....
  • Observação: o enunciado pede “homens acima de ... anos” — isso corresponde à condição matemática \text{idade} > 18. 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 \text{homens\_maior\_18} \leftarrow 0 e \text{mulheres} \leftarrow 0;
  • 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 = 'm' -> condição \text{idade} > 18 é verdadeira, então \text{homens\_maior\_18} passa de ... para ....
  • entrada 2: idade = ..., sexo = 'f' -> incrementa \text{mulheres} 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 .strip() e .lower() para aceitar variações como ' M ', 'Masculino', 'F', 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()

Exercícios relacionados