## 5. Você foi contratado(a) como cientista de dados de uma associação de skate. Para analisar as notas recebidas de skatistas em algumas competições ao longo do ano, você precisa criar um código que calcula a pontuação dos(as) atletas. Para isso, o seu código deve receber 5 notas digitadas pelas pessoas juradas. Para calcular a pontuação de um(a) skatista, você precisa eliminar a maior e a menor pontuação dentre as 5 notas e tirar a média das 3 notas que sobraram. Retorne a média para apresentar o texto: "Nota da manobra: [media]"
# Lista que armazenará os nomes dos jurados
jurados = []
# Dicionário com todas as notas dos jurados por critério
notas = {
'Dificuldade': [],
'Estilo': [],
'Fluidez': [],
'Precisão': [],
'Originalidade': []
}
# Dicionário com notas filtradas (sem menor e maior) por critério
notas_filtradas = {}
# Dicionário com médias calculadas por critério
medias = {}
# Função que adiciona o nome de um jurado à lista
def add_jurado(jurados):
jurados.append(input('Digite o nome do jurado: '))
# Função genérica para exibir mensagens e capturar entradas do usuário
def prompt(msg):
return input(msg)
# Função que valida se a nota está entre 0 e 100
def valid_nota(nota):
while nota < 0 or nota > 100:
print('A nota deve estar entre 0 e 100.')
nota = float(prompt('Digite a nota: '))
return nota
# Função que coleta as notas de um jurado para cada critério
def add_nota(jurado):
for crit in notas.keys():
nota = float(prompt(f'Digite a nota do jurado {jurado} para {crit}: '))
nota = valid_nota(nota)
notas[crit].append(nota)
# Função que remove a menor e a maior nota (se possível) e guarda as filtradas
def remove_nota():
for key in notas.keys():
if len(notas[key]) >= 3:
temp = notas[key][:]
temp.remove(max(temp))
temp.remove(min(temp))
notas_filtradas[key] = temp
else:
notas_filtradas[key] = notas[key][:] # Cópia direta se não há 3 notas
# Função que calcula a média com base nas notas filtradas
def media_nota():
for key in notas_filtradas.keys():
if len(notas_filtradas[key]) > 0:
medias[key] = sum(notas_filtradas[key]) / len(notas_filtradas[key])
else:
medias[key] = 0
# Função que exibe as notas filtradas e as médias por critério
def print_resultados():
print('\nNotas utilizadas no cálculo da média (sem extremos):')
for key in notas_filtradas.keys():
print(f'{key}: {notas_filtradas[key]}')
print('\nMédia das Notas por critério:')
for key in medias.keys():
print(f'{key}: {medias[key]:.2f}')
# Função que exibe a média geral final da manobra
def print_media_final():
if medias:
media_final = sum(medias.values()) / len(medias)
print(f'\nNota da manobra: {media_final:.2f}')
# Função principal que orquestra o fluxo do programa
def main():
num_jurados = int(input("Quantos jurados deseja adicionar? "))
# Adiciona os jurados
for _ in range(num_jurados):
add_jurado(jurados)
# Coleta as notas de cada jurado
for jurado in jurados:
add_nota(jurado)
# Remove extremos e calcula médias
remove_nota()
media_nota()
# Mostra os resultados
print_resultados()
print_media_final()
# Ponto de entrada do programa
if __name__ == '__main__':
main()
print('\nPrograma encerrado.')