( 3,0 pontos) Em uma competiçăo de ginástica Olimpica, cada atleta recebo notas de 5 juizes.j As notas variam de 0 a 10 e são armazenadas em uma matriz, onde cada linha representa um atleta
cada coluna representa a nota dada por um dos juizes. O número de atletas da competiçăo pode variar, de forma que o número de linhas da matriz pode variar.
Você deve implementar uma função chamada medalhistas(notas) que recebe essa matriz como entrada. A funçāo deve calcular a média das notas de cada atleta (ignorando a maior e a menor nota recebida) e retornar uma lista contendo os indices dos três atletas com as malores médias, ordenados do primeiro ao terceiro lugar. Você pode desenvolver funçőes auxillares, se achar necessário.
Regras para o cálculo dalmédia:)
- Para cada atleta, remova a maior e a menor nota antes de calcular a média.
- Calcule a média das três notas restantes. some
Segue um exemplo, mostrando a saida esperada para uma dada entrada:
Entrada
Saida
notas
, # Atleta 1
, # Atleta 2
, # Atteta 3
, # Atleta 4
, # Atleta 5
Você deve implementar uma função chamada medalhistas(notas) que recebe essa matriz como entrada. A funçāo deve calcular a média das notas de cada atleta (ignorando a maior e a menor nota recebida) e retornar uma lista contendo os indices dos três atletas com as malores médias, ordenados do primeiro ao terceiro lugar. Você pode desenvolver funçőes auxillares, se achar necessário.
Regras para o cálculo dalmédia:)
Segue um exemplo, mostrando a saida esperada para uma dada entrada:
Entrada | Saida |
notas
|
|
|
|
|
|
|
|
|
|
|
Passo 1
Beleza, vamos resumir o que a questão pede! Temos uma competição de ginástica olímpica onde cada atleta recebe notas de 5 juízes, variando de 0 a 10. Essas notas estão organizadas em uma matriz, onde cada linha representa um atleta e cada coluna uma nota de um juiz. O número de atletas pode variar, então o número de linhas da matriz também pode mudar.
O que precisamos fazer é criar uma função chamada
medalhistas(notas)
que vai receber essa matriz de notas e calcular a média das notas de cada atleta. Para calcular essa média, vamos seguir duas regras importantes:- Remover a maior e a menor nota de cada atleta.
- Calcular a média das três notas restantes.
Depois disso, a função deve retornar uma lista com os índices dos três atletas que tiveram as maiores médias, ordenados do primeiro ao terceiro lugar.
Para resolver isso, vamos precisar:
- Entender como manipular listas e matrizes.
- Saber como encontrar o máximo e o mínimo de uma lista.
- Calcular médias.
- Ordenar os atletas com base nas médias calculadas.
Passo 2
Primeiro, vamos pensar em como percorrer cada atleta na matriz de notas. Cada linha da matriz representa um atleta, ent��o vamos iterar por cada linha.
Por exemplo, se tivermos:
notas = [
[9.0, 8.5, 9.5, 9.0, 8.0], # Atleta 0
[8.5, 8.0, 8.0, 8.5, 8.5], # Atleta 1
[9.5, 9.0, 9.5, 9.5, 9.0], # Atleta 2
[7.0, 8.0, 7.5, 8.0, 7.5], # Atleta 3
[8.0, 7.5, 8.0, 8.0, 8.0] # Atleta 4
]
Vamos percorrer cada atleta (cada sublista) para processar suas notas.
Passo 3
Para cada atleta, precisamos remover a maior e a menor nota antes de calcular a média das três restantes. Em Python, podemos usar as funções
max()
e min()
para encontrar esses valores.Por exemplo, para o Atleta 0:
notas_atleta = [9.0, 8.5, 9.5, 9.0, 8.0]
maior_nota = max(notas_atleta) # 9.5
menor_nota = min(notas_atleta) # 8.0
Agora, vamos remover essas notas da lista. Para isso, podemos usar o método
remove()
que remove a primeira ocorrência de um valor específico.notas_atleta.remove(maior_nota) # Remove 9.5
notas_atleta.remove(menor_nota) # Remove 8.0
Agora,
notas_atleta
fica assim: [9.0, 8.5, 9.0]
Passo 4
Depois de remover a maior e a menor nota, vamos calcular a média das três notas restantes. A média é a soma das notas dividida pela quantidade de notas.
Usando o exemplo anterior:
media = sum(notas_atleta) / 3 # (9.0 + 8.5 + 9.0) / 3 = 8.83
Vamos repetir esse processo para todos os atletas e armazenar as médias junto com os índices dos atletas.
Passo 5
Agora que temos as médias de todos os atletas, precisamos identificar os três atletas com as maiores médias. Para isso, vamos criar uma lista de tuplas onde cada tupla contém o índice do atleta e sua respectiva média.
Continuando o exemplo:
medias = [
(0, 8.83), # Atleta 0
(1, 8.33), # Atleta 1
(2, 9.33), # Atleta 2
(3, 7.67), # Atleta 3
(4, 8.00) # Atleta 4
]
Vamos ordenar essa lista com base nas médias de forma decrescente (do maior para o menor):
medias_ordenadas = sorted(medias, key=lambda x: x[1], reverse=True)
# Resultado: [(2, 9.33), (0, 8.83), (1, 8.33), (4, 8.00), (3, 7.67)]
Passo 6
Por fim, vamos pegar os índices dos três primeiros atletas dessa lista ordenada, que são os três com as maiores médias.
Continuando:
top3 = [medias_ordenadas[0][0], medias_ordenadas[1][0], medias_ordenadas[2][0]]
# Resultado: [2, 0, 1]
Resposta
A função
medalhistas(notas)
deve retornar a lista [2, 0, 1]
para o exemplo fornecido, indicando que os atletas com os maiores desempenhos são o atleta 2, seguido pelo atleta 0 e pelo atleta 1.Código Completo (Opcional)
def medalhistas(notas):
medias = []
for indice, notas_atleta in enumerate(notas):
maior_nota = max(notas_atleta)
menor_nota = min(notas_atleta)
notas_filtradas = notas_atleta.copy()
notas_filtradas.remove(maior_nota)
notas_filtradas.remove(menor_nota)
media = sum(notas_filtradas) / 3
medias.append((indice, media))
medias_ordenadas = sorted(medias, key=lambda x: x[1], reverse=True)
top3 = [medias_ordenadas[0][0], medias_ordenadas[1][0], medias_ordenadas[2][0]]
return top3
# Exemplo de uso:
notas = [
[9.0, 8.5, 9.5, 9.0, 8.0],
[8.5, 8.0, 8.0, 8.5, 8.5],
[9.5, 9.0, 9.5, 9.5, 9.0],
[7.0, 8.0, 7.5, 8.0, 7.5],
[8.0, 7.5, 8.0, 8.0, 8.0]
]
print(medalhistas(notas)) # Saída: [2, 0, 1]
Observação
Lembre-se de que, se houver empates nas médias, a ordenação pode depender da ordem dos atletas na lista original. Certifique-se de que a implementação considera sempre os três primeiros após a ordenação.