-
-
Save natan20200679/934259a125d64c25d459980f6104f9a6 to your computer and use it in GitHub Desktop.
| """ Foram anotadas as idades e alturas de 30 alunos. Faça um Programa que determine quantos alunos com mais de 13 anos possuem | |
| altura inferior à média de altura desses alunos.""" | |
| idades = [] | |
| alturas = [] | |
| q = 0 | |
| soma = 0 | |
| for i in range(1,31): | |
| idade = int(input("Idade:")) | |
| idades.append(idade) | |
| altura = float(input("Altura:")) | |
| alturas.append(altura) | |
| soma += altura | |
| i += 1 | |
| media = soma / len(alturas) | |
| if idade > 13 and altura < media: | |
| q += 1 | |
| print("\nIdades:",idades) | |
| print("Alturas:",alturas) | |
| print("Média Alturas: %.2f" % media) | |
| print("Alunos com 14 anos ou mais com altura inferior à média:",q) |
Oi Emerson! Vamos lá...quanto à eu ter colocado um range(1,3), foi apenas pra eu poder fazer o teste do código de forma mais rápida, entende?! Realmente esqueci de deixar isso claro, rsrs.
Não consegui entender como fazer isso: "Uma possibilidade é calcular a média fora do "for" após todas as idades e alturas serem adicionadas em cima do tamanho da estrutura de dados que você decidiu usar (lista ou tupla) aí pode usar o função len() para saber o tamanho dela e dividir a soma das idades pelo tamanho da lista ou tupla."
Falo isso pq apesar de você ter dito que era apenas um teste de range(1,3) você está dividindo embaixo como tivesse recebido 30 alturas quando só recebeu apenas duas. E tem a questão do escopo onde você está colocando o a variável de média. Você conhece ou já ouviu falar em teste de mesa de algoritmos? Dê uma pesquisada para fazer esse teste com seu código para poder entender o erro. Só compreendendo o erro será possível avançar na construção de algoritmos que resolvam problemas.
Qual o erro em: "E tem a questão do escopo onde você está colocando o a variável de média."?
Sobre o teste de mesa, vi agora e entendi. Faço isso apenas analisando o que cada linha de código executa.
Sim... E também simulando o loop e a tomada de decisão no if. Sugiro você dá uma olhada no curso gratuito de lógica de programação do curso em vídeo de Gustavo Guanabara, já ouviu falar?
Sobre o escopo para lhe mostra, vou fazer o seguinte daqui para mais tarde te mostro como pensei este algoritmo. Blz?
Eu fiz 2 cursos de Lógica de Programação a partir de 2 sites diferentes. Não precisa de preocupar em me mostrar um exemplo de código pronto amigo, basta vc me apontar os erros que estou cometendo, e que estão levando ao erro no cálculo que mencionei no código, mas se vc acha melhor me mostrar um exemplo de código que resolve, tudo bem.
Só consigo colocar aqui entre acentos agudos...
from random import randint, random
alunos = list()
# Cria uma estrutura randômica de lista de dicionarios com x alunos
for i in range(31):
idade = randint(10, 20) # cria uma idade entre 10 e 20 anos
altura = round(1 + (1*random()), 2) # cria uma altura ente 1 e 2 metros
aluno = {'idade': idade, 'altura': altura} # cria um novo aluno
alunos.append(aluno) # preenche a lista de alunos com mais um aluno
# Resposta começa aqui...
print(alunos)
media_alturas = round(float(sum([aluno.get('altura')
for aluno in alunos])) / len(alunos), 2)
alunos_13_abaixo_media_altura = [1 if aluno.get('idade') > 13 and aluno.get(
'altura') < media_alturas else 0 for aluno in alunos]
print(
f"Exitem {sum(alunos_13_abaixo_media_altura)} aluno(s) com 14 anos ou mais" +
f"que possuem altura inferior à média ({media_alturas}) de altura do grupo."
)
Testa aí qualquer coisa estamos a disposição.
Se preferir esse mais detalhado em pedaços, para ir estudando parte por parte...
from random import randint, random
alunos = list()
# Cria uma estrutura randômica de lista de dicionarios com x alunos
for i in range(31):
idade = randint(10, 20) # cria uma idade entre 10 e 20 anos
altura = round(1 + (1*random()), 2) # cria uma altura ente 1 e 2 metros
aluno = {'idade': idade, 'altura': altura} # cria um novo aluno
alunos.append(aluno) # preenche a lista de alunos com mais um aluno
# Resposta começa aqui...
print(alunos)
lista_alturas = [aluno.get('altura') for aluno in alunos]
print(lista_alturas)
soma_alturas = round(sum(lista_alturas), 2)
print(soma_alturas)
media_alturas = round(soma_alturas / len(alunos), 2)
print(media_alturas)
alunos_13_abaixo_media_altura = [1 if aluno.get('idade') > 13 and aluno.get(
'altura') < media_alturas else 0 for aluno in alunos]
print(alunos_13_abaixo_media_altura)
print(
f"Exitem {sum(alunos_13_abaixo_media_altura)} aluno(s) com 14 anos ou mais" +
f"que possuem altura inferior à média ({media_alturas}) de altura do grupo."
)
Cara, vou ser bem sincero contigo...achei suas sugestões um pouco rebuscadas ou mais difíceis de compreender, principalmente na segunda linha após o for, e no último parágrafo de código. De qualquer forma te agradeço muito o tempo que gastou comigo, e vou analisar se é melhor eu me basear neste último código que me mostrou, ou se é melhor eu modificar o meu, incluindo idéias do seu.
De boa, a ideia é ver que existem várias possibilidades. No processo de aprendizado é assim... Vamos juntos. No que puder ajudar me coloco a disposição. Tudo de bom.
Oi Natanael tudo bem?
Vamos lá...
Você está pedido para entrar apenas com duas alturas pois a função range funciona da seguinte forma recebendo até três parâmetros e no mínimo um:
Logo a sua iteração com o "for" na linha 3 só irá solicitar duas alturas e não 30 como você coloca para dividir a soma na linha 13 para achar a média.
Existem muitas outras questões no seu código, como a indentação para definir que trecho de código pertence ao "for" pois o que vai acontecer no que está descrito acima é que você a cada repetição irá calcular uma soma diferente, uma média diferente e vai realizar a verificação da idade e altura sempre em relação a uma média equivocada, parcial.
Uma possibilidade é calcular a média fora do "for" após todas as idades e alturas serem adicionadas em cima do tamanho da estrutura de dados que você decidiu usar (lista ou tupla) aí pode usar o função len() para saber o tamanho dela e dividir a soma das idades pelo tamanho da lista ou tupla.
Está é uma possiblidade, primeiro você achar a média depois verificar em outro "for" quais alunos atendem as condições impostas pela questão.
A propósito, o que vc acha de armazenar idade e altura juntos em uma lista de dicionários? Você poderia tentar... tipo [{'idade': 13, 'altura':1.57}, {'idade': 14, 'altura':1.67},{'idade': 13, 'altura':1.27}, ...]
São apenas sugestões e espero que possa lhe ajudar a ajustar o código. Qualquer coisa pode falar lá no grupo. Estou apendendo também e suas duvidas me instigam e pesquisar e a estudar também. Espero que lhe ajude. Bons estudos!