Melhorar programação

Boa tarde galera, fiz um exercício, função ‘maximo’, que devolve o maior valor dentre dois inteiros recebidos, para que ela passe a receber 3 valores inteiros como parâmetros e devolva o maior dentre eles, consegui realizar esta tarefa, mas no código não há nada de elegante, alguma dica para retirar as repetições de if ?

def maximo(n1,n2,n3):

  if n1 > n2 and n1 > n3:
   return(n1)
  if n2 > n1 and n2 > n3:
   return(n2)
  if n3 > n1 and n3 > n2:
   return(n3)
  if n1 == n2 and n1 > n3:
   return(n1)
  if n1 == n3 and n1 > n2:
   return(n1)
  if n2 == n3 and n2 > n1:
   return(n2)
  if n1 == n2 and n1 == n3:
   return(n1)

Um esqueminha com sorted

def maximo(n1, n2, n3):
    lista = sorted([n1, n2, n3])
    maior = lista[-1] # ultima posicao
    return maior

Se quiser ainda deixar a quantidade de parâmetros indefinida…

def maximo(*numeros):
    lista = sorted(numeros)
    maior = lista[-1] # ultima posicao
    return maior

Para fins de aprendizado tranquilo, mas no dia a dia, não reinvente a roda e busque conhecer a API padrão

É vou ter que ler muito mesmo, porque ainda não aprendi a função sorted.

Boa tarde Rodrigo,

Você pode utilizar a função MAX do Python que retorna o maior valor dentre os argumentos passados.
Alterei a função para que espere receber uma lista com exatos 3 valores e retorne o maior dentre eles assim evitando que caso você deseja aumentar o número de argumentos não necessite de adicionar novos parâmetros (n1, n2, n3, n4, nX…).

O código final ficou da seguinte forma:

def maximo(valores):
    if not len(valores) == 3:
        return "Sua lista deve conter exatamente 3 valores"

    return max(valores)

print maximo( (100, 5000, 12) )

Ou pode simplificar:

def maximo(*valores):
    return max(valores)

print maximo(1, 2, 300, 20, 40)
1 curtida

O problema de usar o sorted é quanto maior o número de argumentos menor a performance.

1 curtida

Concordo, foi apenas para fins didáticos, por isso indiquei a função max assim como você o fez…

1 curtida