O acampamento de férias “Brincando com saúde” está fazendo sua programação para receber as crianças nas próximas férias. A coordenadora resolveu dividir as crianças em grupos, de acordo com a idade:
Grupo
Idade
A
entre 2 e 4 anos
B
entre 5 e 7 anos
C
entre 8 e 10 anos
D
entre 11 e 13 anos
As crianças serão direcionadas para sítios diferentes, de acordo com o peso em relação à faixa etária a que pertencem. As que estiverem acima do peso da média do seu grupo irão para o sítio “Curtindo a vida”, onde terão alimentação e brincadeiras apropriadas. Os que estiverem com o peso abaixo ou igual à média do seu grupo, irão para o sítio “Divertidamente”.
Faça um programa que receba a quantidade de crianças que irão para o acampamento. Para cada criança, deverá ser informado o nome, a idade e o peso. Essas informações deverão ser salvas em um dicionário. O programa deverá exibir uma lista com os nomes das crianças que irão para o sítio “Curtindo a vida” e outra com os nomes das crianças que irão para o sítio “Divertidamente”.
Entradas:
- Quantidade de crianças
- Para cada criança, nome, idade e peso (dicionário), na mesma linha.
Saídas:
- Listas dos nomes das crianças que irão para o sítio “Curtindo a vida”;
- Listas dos nomes das crianças que irão para o sítio “Divertidamente”.
| Grupo | Idade |
| A | entre 2 e 4 anos |
| B | entre 5 e 7 anos |
| C | entre 8 e 10 anos |
| D | entre 11 e 13 anos |
Passo 1
O que o enunciado pede e quais são os dados que temos:
- Entrada 1: a quantidade de crianças (um número inteiro).
- Entrada 2: para cada criança, em uma linha, três informações: nome, idade e peso.
- Saídas: duas listas de nomes:
- lista com os nomes das crianças que irão para o sítio “Curtindo a vida” (essas são as crianças cujo peso é maior que a média do seu grupo de idade);
- lista com os nomes das crianças que irão para o sítio “Divertidamente” (essas têm peso menor ou igual à média do seu grupo de idade).
- Além disso, o enunciado pede explicitamente que as informações de cada criança sejam salvas em um dicionário (ou seja, cada criança deverá ser representada por um dicionário com suas chaves).
Observações importantes que já identifico aqui (sem resolver ainda):
- Os grupos de idade estão definidos assim:
- Grupo A: entre 2 e 4 anos (inclusive).
- Grupo B: entre 5 e 7 anos.
- Grupo C: entre 8 e 10 anos.
- Grupo D: entre 11 e 13 anos.
- Precisamos calcular a média de peso de cada grupo (soma dos pesos no grupo dividido pelo número de crianças do grupo) e comparar cada criança com a média do seu próprio grupo.
- Se a entrada de nome tiver espaços (ex.: “Ana Maria”), devemos ler a linha inteira e extrair do final os valores idade e peso, juntando o resto como nome.
Passo 2
Estratégia geral e estruturas de dados:
- Vou usar uma lista chamada
criancaspara guardar todos os dicionários, onde cada dicionário tem as chaves'nome','idade','peso'e'grupo'. - Vou manter também um registro por grupo para calcular médias: para cada grupo (A, B, C, D) guardo a soma dos pesos e a contagem de crianças. Por exemplo:
grupo_info = {'A': {'soma': 0.0, 'cont': 0}, 'B': {...}, 'C': {...}, 'D': {...}}
- Depois de ler todas as crianças, calculo a média de cada grupo como
media = soma / cont(quandocont > 0). - Por fim, faço uma segunda passagem pela lista
criancase separo os nomes em duas listas:curtindopara aqueles compeso > media_do_grupo,divertidamentepara aqueles compeso <= media_do_grupo.
- Formato de saída: exibir os nomes (um por linha) em duas seções, com um cabeçalho identificando cada sítio.
A vantagem dessa estratégia: só preciso calcular médias uma vez, com duas passagens simples (leitura e classificação).
Passo 3
Como determinar o grupo a partir da idade (regras precisas):
- Regra para mapear uma idade inteira
idadeao grupo:- se
2 <= idade <= 4então grupo ='A' - se
5 <= idade <= 7então grupo ='B' - se
8 <= idade <= 10então grupo ='C' - se
11 <= idade <= 13então grupo ='D' - caso a idade esteja fora desses intervalos (por exemplo menor que 2 ou maior que 13), o enunciado não comenta — nesse programa vamos simplesmente não atribuir grupo (ou ignorar), mas normalmente em provas convém assumir que todas as idades estarão dentro dos intervalos. Vou tratar esses casos com cuidado no código (ignorar ou avisar), mas a lógica principal usa os intervalos acima.
- se
Passo 4
Como ler cada linha de entrada robustamente (nome com espaços e separação correta):
- A linha de entrada para uma criança pode ter o nome com espaços; por isso não uso
split()simples assumindo 3 partes. - Leitura robusta:
- leio a linha inteira com
linha = input().strip(). - divido em tokens:
tokens = linha.split(). - os dois últimos tokens devem ser
idadeepeso(nessa ordem). Ou seja:idade_str = tokens[-2]peso_str = tokens[-1]
- o nome será a junção dos tokens anteriores:
nome = ' '.join(tokens[:-2]) - converto
idade = int(idade_str)epeso = float(peso_str)— notando que, para aceitar entradas que usem vírgula como separador decimal (ex.:20,5), basta antes substituir','por'.'empeso_str.
- leio a linha inteira com
- Isso garante que nomes com espaços sejam lidos corretamente.
Passo 5
Fórmula da média que vamos usar e pequenos lembretes:
- Para cada grupo, a média do peso é dada por:
- média = (soma de todos os pesos do grupo) / (número de crianças no grupo)
- Em notação informal: média = soma / cont
- Se
cont == 0(grupo vazio), não existe média; nesse caso não há crianças para classificar naquele grupo (logo não produziremos nomes para esse grupo).
Passo 6
Passo a passo do algoritmo (em alto nível), que depois será implementado no código:
- Ler
n= quantidade de crianças. - Inicializar
criancas = []egrupo_infocom soma e cont zerados para A, B, C, D. - Para
ide1atén:- Ler a linha, extrair
nome,idade,pesoconforme Passo 4. - Determinar
grupousando a regra do Passo 3. - Criar dicionário
child = {'nome': nome, 'idade': idade, 'peso': peso, 'grupo': grupo}e fazercriancas.append(child). - Se
grupofor válido, atualizargrupo_info[grupo]['soma'] += pesoegrupo_info[grupo]['cont'] += 1.
- Ler a linha, extrair
- Após ler todas as crianças, calcular
grupo_mediasonde para cada grupo:- se
cont > 0entãomedia = soma / cont - caso contrário
media = None(ou não existir).
- se
- Inicializar
curtindo = []edivertidamente = []. - Para cada
childemcriancas:- pegar
g = child['grupo']epeso = child['peso']. - se
grupo_medias[g]for None (grupo vazio) então pular (não ocorre na prática se não houver crianças). - se
peso > grupo_medias[g]entãocurtindo.append(child['nome']) - senão
divertidamente.append(child['nome'])
- pegar
- Imprimir as duas listas de nomes com cabeçalhos.
Passo 7
Exemplo pequeno (manual) para fixar a lógica:
- Suponha 4 crianças:
- “Ana”, 3, 16
- “Bruno”, 4, 18
- “Carlos”, 6, 20
- “Dora”, 6, 17
- Grupos:
- Ana e Bruno → Grupo A. Pesos A: 16 e 18 → média A = (16+18)/2 = 17.
- Carlos e Dora → Grupo B. Pesos B: 20 e 17 → média B = (20+17)/2 = 18,5.
- Classificação:
- Ana (16) ≤ 17 → Divertidamente.
- Bruno (18) > 17 → Curtindo a vida.
- Carlos (20) > 18,5 → Curtindo a vida.
- Dora (17) ≤ 18,5 → Divertidamente.
- Resultado esperado:
- Curtindo a vida: [“Bruno”, “Carlos”]
- Divertidamente: [“Ana”, “Dora”]
Passo 8
Dicas de implementação para a prova (linguagem Python, sem pular etapas):
- Lembre de converter tipos:
intpara idade,floatpara peso. - Antes de converter
peso_strpara float, fazerpeso_str = peso_str.replace(',', '.')para aceitar vírgula decimal. - Sempre verifique se
tokenstem pelo menos 3 elementos ao ler cada linha; se não tiver, trate como entrada inválida (na prova normalmente as entradas são corretas). - Use nomes de variáveis claros:
criancas,grupo_info,grupo_medias,curtindo,divertidamente. - Ao imprimir, exiba os nomes um por linha sob um cabeçalho. Isso facilita leitura e correção automática.
Passo 9
Agora, o programa completo em Python (pronto para usar em um problema de prova ou exercício). Ele segue exatamente os passos explicados: leitura robusta, dicionários por criança, cálculo de médias por grupo e classificação final.
Resposta
def idade_para_grupo(idade):
if 2 <= idade <= 4:
return 'A'
if 5 <= idade <= 7:
return 'B'
if 8 <= idade <= 10:
return 'C'
if 11 <= idade <= 13:
return 'D'
return None # idade fora dos intervalos definidos
def main():
try:
n = int(input().strip())
except:
print("Entrada inválida para a quantidade de crianças.")
return
criancas = []
grupo_info = {
'A': {'soma': 0.0, 'cont': 0},
'B': {'soma': 0.0, 'cont': 0},
'C': {'soma': 0.0, 'cont': 0},
'D': {'soma': 0.0, 'cont': 0},
}
for _ in range(n):
linha = input().strip()
tokens = linha.split()
if len(tokens) < 3:
# Linha inválida: não tem pelo menos nome, idade e peso
continue
idade_str = tokens[-2]
peso_str = tokens[-1].replace(',', '.')
nome = ' '.join(tokens[:-2])
try:
idade = int(idade_str)
peso = float(peso_str)
except:
# Conversão inválida: pula esta entrada
continue
grupo = idade_para_grupo(idade)
child = {'nome': nome, 'idade': idade, 'peso': peso, 'grupo': grupo}
criancas.append(child)
if grupo in grupo_info:
grupo_info[grupo]['soma'] += peso
grupo_info[grupo]['cont'] += 1
# calcular médias por grupo
grupo_medias = {}
for g in ['A', 'B', 'C', 'D']:
cont = grupo_info[g]['cont']
soma = grupo_info[g]['soma']
if cont > 0:
grupo_medias[g] = soma / cont
else:
grupo_medias[g] = None
# classificar crianças
curtindo = []
divertidamente = []
for child in criancas:
g = child['grupo']
peso = child['peso']
nome = child['nome']
if g is None:
# idade fora dos intervalos; por segurança, colocar em Divertidamente
divertidamente.append(nome)
continue
media = grupo_medias.get(g)
if media is None:
# não há média definida (grupo sem crianças) — não deve ocorrer para crianças desse grupo
divertidamente.append(nome)
else:
if peso > media:
curtindo.append(nome)
else:
divertidamente.append(nome)
# imprimir resultados
print("Curtindo a vida:")
for nome in curtindo:
print(nome)
print("Divertidamente:")
for nome in divertidamente:
print(nome)
if __name__ == "__main__":
main()