Passo 2:

Situação:

A Sra. Helena precisa de um sistema simples para cadastrar pacientes e calcular algumas estatísticas básicas da clínica.

Problema:

Desenvolva um programa em Python que:
  1. Permita cadastrar informações de pacientes (nome, idade, telefone)
  2. Calcule e exiba:
  • Número total de pacientes cadastrados
  • Idade média dos pacientes
  • Paciente mais novo e mais velho
  1. Permita buscar um paciente pelo nome

4. Exiba todos os pacientes cadastrados de forma organizada

Passo 1

O enunciado pede que a gente crie um programa em Python para cadastrar pacientes (com nome, idade e telefone) e, a partir desse cadastro, calcular estatísticas básicas (total, média de idade, paciente mais novo e mais velho), além de oferecer busca por nome e exibir todos os registros de forma organizada. Para resolver isso vamos precisar de conceitos básicos de estrutura de dados em Python (listas e dicionários), funções para organizar o código, laços de repetição para montar um menu interativo e operações simples sobre listas (como soma, máximo e mínimo).

Passo 2

Definimos uma lista pacientes onde cada elemento é um dicionário com as chaves "nome", "idade" e "telefone". Em seguida, criamos funções separadas para cada tarefa:
  1. cadastrar_paciente() para ler os dados e inserir na lista;
  2. calcular_estatisticas() para retornar total, média, mais novo e mais velho;
  3. buscar_paciente(nome) que percorre a lista e retorna o dicionário se encontrar o nome;
  4. exibir_todos() para imprimir todos os pacientes de forma organizada.

Passo 3

Na função calcular_estatisticas() fazemos:
  • total = len(pacientes)
  • idades = [p["idade"] for p in pacientes]
  • media = sum(idades) / total (com cuidado para quando total == 0)
  • usamos min(idades) e max(idades) para achar as idades extremas e depois procuramos qual paciente tem essa idade para mostrar nome e telefone.

Passo 4

Em buscar_paciente(nome) percorremos cada dicionário em pacientes e comparamos p["nome"].lower() com nome.lower(). Se bater, retornamos o paciente; caso contrário, informamos que não achou nada.

Passo 5

A função exibir_todos() simplesmente testa se a lista está vazia e, se não, faz um for sobre pacientes, imprimindo índice, nome, idade e telefone de cada um de forma alinhada.

Passo 6

Por fim, montamos um laço while True que exibe um menu numerado:
  1. Cadastrar paciente
  2. Exibir estatísticas
  3. Buscar por nome
  4. Exibir todos
  5. Sair
    e chama a função correspondente até o usuário digitar 5.

Resposta

def cadastrar_paciente(pacientes):
    nome = input("Nome: ").strip()
    try:
        idade = int(input("Idade: ").strip())
    except ValueError:
        print("Idade inválida. Use um número inteiro.")
        return
    telefone = input("Telefone: ").strip()
    pacientes.append({"nome": nome, "idade": idade, "telefone": telefone})
    print(f"Paciente '{nome}' cadastrado com sucesso.\n")

def calcular_estatisticas(pacientes):
    total = len(pacientes)
    if total == 0:
        print("Nenhum paciente cadastrado.\n")
        return
    idades = [p["idade"] for p in pacientes]
    media = sum(idades) / total
    idade_min = min(idades)
    idade_max = max(idades)
    mais_novo = next(p for p in pacientes if p["idade"] == idade_min)
    mais_velho = next(p for p in pacientes if p["idade"] == idade_max)
    print(f"Total de pacientes: {total}")
    print(f"Idade média: {media:.2f}")
    print(f"Mais novo: {mais_novo['nome']} ({mais_novo['idade']} anos)")
    print(f"Mais velho: {mais_velho['nome']} ({mais_velho['idade']} anos)\n")

def buscar_paciente(pacientes, termo):
    termo = termo.lower()
    encontrados = [p for p in pacientes if p["nome"].lower() == termo]
    if encontrados:
        for p in encontrados:
            print("Paciente encontrado:")
            print(f"  Nome: {p['nome']}")
            print(f"  Idade: {p['idade']}")
            print(f"  Telefone: {p['telefone']}\n")
    else:
        print("Nenhum paciente com esse nome.\n")

def exibir_todos(pacientes):
    if not pacientes:
        print("Nenhum paciente cadastrado.\n")
        return
    print("=== Lista de Pacientes ===")
    for i, p in enumerate(pacientes, start=1):
        print(f"{i}. Nome: {p['nome']} | Idade: {p['idade']} | Telefone: {p['telefone']}")
    print()

def main():
    pacientes = []
    while True:
        print("Menu:")
        print("1. Cadastrar paciente")
        print("2. Exibir estatísticas")
        print("3. Buscar por nome")
        print("4. Exibir todos os pacientes")
        print("5. Sair")
        escolha = input("Escolha uma opção: ").strip()
        print()
        if escolha == "1":
            cadastrar_paciente(pacientes)
        elif escolha == "2":
            calcular_estatisticas(pacientes)
        elif escolha == "3":
            nome = input("Nome para busca: ").strip()
            print()
            buscar_paciente(pacientes, nome)
        elif escolha == "4":
            exibir_todos(pacientes)
        elif escolha == "5":
            print("Encerrando o programa.")
            break
        else:
            print("Opção inválida. Tente novamente.\n")

if __name__ == "__main__":
    main()

Exercícios relacionados