Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Documentação código questão 5

Olá. Acabei tendo um pouco de trabalho com a questão 5 pois ainda não dominei as funções def. Pra dificultar mais, tentei fazer o Hint, Default value e docstring das minhas funções. Queria ver se fiz da maneira correta, pra facilitar pra quem for conferir o código.

# Exercício 5

nota1 = float(input('Insira aqui sua nota '))
nota2 = float(input('Insira aqui sua nota '))
nota3 = float(input('Insira aqui sua nota '))
nota4 = float(input('Insira aqui sua nota '))
nota5 = float(input('Insira aqui sua nota '))

notas = [nota1, nota2, nota3, nota4, nota5]
notas_v = []

def notas_validas(lista_notas: list=[0]) -> list:
  ''' Função que gera lista sem os valores máximos e mínimos da primeira lista

  lista: list, default [0]
    Iterar com a lista com as notas dos juízes
    Desconsiderar índice com valor máximo
    Desconsiderar índice com valor mínimo
  return = nova lista 'notas_v' sem os valores max e min
  '''
  for i in range(len(notas)):
    if notas[i] != max(notas):
      if notas[i] != min(notas):
        notas_v.append(notas[i])
      
  return notas_v

notas_v = notas_validas(notas)

def media_manobra(lista_v:list=[0]) -> float:
  ''' Função que gera a média em float a partir de uma lista

    lista: list, default [0]
      Operação matemática para encontrar a variavel media
    return = valor único da média 'media' em formato float 
    '''
  media = sum(notas_v) / len(notas_v)
  return media

media = media_manobra(notas_v)

print(f'Nota da manobra: {media} pontos')
2 respostas
solução!

Olá, Filipe!

Pelo que pude ver, você fez um ótimo trabalho com a documentação e estruturação das suas funções. No entanto, notei que você está usando variáveis globais dentro das funções, o que não é uma boa prática. Vou explicar o porquê e como você pode alterar isso.

Quando você cria uma função, é uma boa prática passar todas as variáveis que ela vai usar como argumentos. Isso torna a função mais genérica e fácil de ser reutilizada. No seu código, você está usando as variáveis notas e notas_v dentro das funções, mas essas variáveis foram definidas fora das funções, no escopo global.

Vou mostrar como você pode alterar isso no seu código:

def notas_validas(lista_notas: list=[0]) -> list:
  '''
  Função que gera lista sem os valores máximos e mínimos da primeira lista

  lista: list, default [0]
    Iterar com a lista com as notas dos juízes
    Desconsiderar índice com valor máximo
    Desconsiderar índice com valor mínimo
  return = nova lista 'notas_v' sem os valores max e min
  '''
  notas_v = []
  for i in range(len(lista_notas)):
    if lista_notas[i] != max(lista_notas):
      if lista_notas[i] != min(lista_notas):
        notas_v.append(lista_notas[i])
      
  return notas_v

def media_manobra(lista_v:list=[0]) -> float:
  '''
  Função que gera a média em float a partir de uma lista

    lista: list, default [0]
      Operação matemática para encontrar a variavel media
    return = valor único da média 'media' em formato float 
    '''
  media = sum(lista_v) / len(lista_v)
  return media

Nesse código alterado, a função notas_validas agora recebe lista_notas como argumento e usa essa variável para fazer os cálculos, em vez de usar a variável global notas. A variável notas_v agora é definida dentro da função, em vez de ser uma variável global. A função media_manobra também foi corrigida para usar a variável lista_v passada como argumento, em vez da variável global notas_v.

  • Essa é apenas uma sugestão de melhoria. Se achar que faz sentido faça as mudanças.

Espero ter ajudado e bons estudos!

Muito bom. Aos poucos tô entendendo essa parte de escopo da função. Ainda não sei trabalhar bem com argumentos, exige um pouco mais de abstração. Agradeço a explicação