1
resposta

[Dúvida] Praticando Python - Organizando notas de um concurso de redação

Fiz essa solução tentando buscar loops para entradas erradas de usuário. Senti o código com muitas repetições, algumas dicas para melhora-lo?

lista_de_notas = []

def escolhe_nota():
    continuar = ''
    while True:
        try:
            nota = float(input('Digite sua nota (0 - 100): '))
            if 0 <= nota <= 100:
                lista_de_notas.append(nota)

            continuar = input('Quer continuar? [S/N]: ').upper().strip()[0]
            while continuar not in 'SN':
                continuar = input('Entrada inválida. Digite apenas [S/N]: ').upper().strip()[0]
            if continuar == 'N':
                break
            elif continuar == 'S':
                continue

            else:
                print('Nota não adicionada, fora do limite (0-100).')

        except ValueError:
            print('Entrada Inválida. Digite um número entre 0 a 100')
        except IndexError:
            continuar = input('Digite [N] para sair: ').upper().strip()[0]


def exibir_resultado():
    lista_em_ordem = sorted(lista_de_notas)
    media = sum(lista_em_ordem) / len(lista_em_ordem)
    print(f'\nEsta é a lista de notas em ordem: {lista_em_ordem}')
    print(f'E esta é a média das notas {media:.2f}')

escolhe_nota()
exibir_resultado()
1 resposta

Oi Vitor! Como vai?

Seu código está no caminho certo, mas realmente podemos fazer algumas melhorias para torná-lo mais eficiente e legível. Vou sugerir algumas alterações:

  1. Remover Repetições: Você pode simplificar a parte que lida com a entrada inválida do usuário para continuar ou não, evitando o uso de um loop interno.

  2. Organização do Código: Separar a lógica de validação da nota e a lógica de continuar ou não em funções distintas pode ajudar na clareza.

  3. Uso de Funções: Podemos criar uma função para validar a nota e outra para validar a continuação.

Aqui está uma versão melhorada do seu código:

lista_de_notas = []

def valida_nota():
    while True:
        try:
            nota = float(input('Digite sua nota (0 - 100): '))
            if 0 <= nota <= 100:
                return nota
            else:
                print('Nota fora do limite (0-100).')
        except ValueError:
            print('Entrada Inválida. Digite um número entre 0 a 100')

def quer_continuar():
    while True:
        continuar = input('Quer continuar? [S/N]: ').upper().strip()
        if continuar in 'SN':
            return continuar == 'S'
        else:
            print('Entrada inválida. Digite apenas [S/N].')

def escolhe_nota():
    while True:
        nota = valida_nota()
        lista_de_notas.append(nota)
        if not quer_continuar():
            break

def exibir_resultado():
    lista_em_ordem = sorted(lista_de_notas)
    media = sum(lista_em_ordem) / len(lista_em_ordem)
    print(f'\nEsta é a lista de notas em ordem: {lista_em_ordem}')
    print(f'E esta é a média das notas {media:.2f}')

escolhe_nota()
exibir_resultado()

Com essas alterações, o código fica mais modular e fácil de entender. As funções valida_nota e quer_continuar cuidam de partes específicas da lógica, o que facilita a manutenção e possíveis futuras modificações.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.