1
resposta

[Projeto] Projetinho que engloba um pouco das 3 aulas vistas até agora no curso.

Gostaria de saber se eu poderia melhorar algo nesse mini projetinho que eu fiz envolvendo as 3 aulas vistas.

from random import uniform
from faker import Faker
fake = Faker()

def criar_atletas():
    atletas = int(input('Digite o número de atletas: '))

    atl = [fake.name() for _ in range(1, atletas + 1)]

    return atl

def criar_lista(lista_atletas):
    lista_notas = []

    for _ in lista_atletas:
        notas = []
        for _ in range(1,6):
            notas.append(round(uniform(0,10),2))
        lista_notas.append(notas)
        
    return sorted(lista_notas)

def notas(lista_notas):    
    lista_medias = []

    for lista in lista_notas:

        lista.remove(max(lista))
        lista.remove(min(lista))

        media = round(sum(lista) / len(lista),2)
        lista_medias.append(media)

    return lista_medias

def situacao(lista_medias):
    lista_situacoes = []
  
    situacao = ['Próxima fase' if media >= 7.0 else 'Eliminado' for media in lista_medias]
    lista_situacoes.extend(situacao)

    return lista_situacoes

def listar_atletas_classificados(lista_atletas, lista_medias, lista_situacao):
    lista_todos_resultados = []

    for atleta, media, sit in zip(lista_atletas, lista_medias, lista_situacao):
        print(f'Atleta {atleta} - Nota da manobra: {media} - Situação: {sit}')
        lista_todos_resultados.append((atleta,media,sit))

    atletas_classificados = [tupla[0] for tupla in lista_todos_resultados if tupla[1] >= 7.0]

    return atletas_classificados

def atleta_vencedor(lista_classificados):

    lista_notas = criar_lista(lista_classificados) 
    medias = notas(lista_notas)
    maior_media = 0
    melhores_notas = []

    for i in range(len(lista_classificados)):
        print(f'Atleta {lista_classificados[i]} - Nota da manobra: {medias[i]}')
        if medias[i] > maior_media:
            maior_media = medias[i]
            vencedor = lista_classificados[i]
            melhores_notas.clear()
            melhores_notas.extend(lista_notas[i])

    return(vencedor,maior_media,melhores_notas)

def main():
    atleta = criar_atletas() #LISTA DE ATLETAS
    lista_notas = criar_lista(atleta) #LISTA DE LISTA DE NOTAS
    medias = notas(lista_notas) #LISTA DE MEDIAS
    sit = situacao(medias) #LISTA DE SITUACOES
    
    classificados = listar_atletas_classificados(atleta,medias,sit)
    nomes_formatados = ', '.join(classificados)

    if not classificados:
        print('\nNenhum atleta classificado para a próxima fase.')
    elif len(classificados) == 1:
        print('\n-----------------------------------------------------------------------------------------')
        print(f'Como apenas um atleta passou para a próxima fase, o vencedor foi: {nomes_formatados} ')
        print('-----------------------------------------------------------------------------------------')
    else:
        print(f'\nAtletas classificados: {nomes_formatados}\n')
        print('---------------------------------------------')
        venceu, media, melhor_nota = atleta_vencedor(classificados)
        print('---------------------------------------------')
        print(f'\nO vencedor foi {venceu} com uma média de {media} pontos. Notas: {melhor_nota}')

if __name__ == "__main__":
    main()

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta

Ei, Nicolas! Tudo bem?

Que iniciativa bacana de ir além e criar seu próprio projeto! Seu código está muito bem estruturado com funções e mostra que você absorveu o conteúdo das aulas. Parabéns!

Uma melhoria seria em def situacao. Por exemplo, você usa list comprehensions que já retorna a lista final, para torná-la mais enxuta e eliminar o lista_situacoes.extend(situacao), você pode fazer o seguinte:

# Em 'situacao' - a comprehension já retorna a lista final
def situacao(lista_medias):
    # Remove a necessidade de criar lista_situacoes = [] e usar extend
    return ['Próxima fase' if media >= 7.0 else 'Eliminado' for media in lista_medias]

Teste e veja o seu funcionamento. Caso queira ver o meu teste, deixo aqui o notebook usado: https://colab.research.google.com/drive/1l67B1OZo1iqPX0cg0OA6QpsUDzFQlmgN?usp=sharing

Continue se dedicando aos estudos e qualquer dúvida, compartilhe no fórum.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!