Skip to content

Instantly share code, notes, and snippets.

@tarsisazevedo
Created May 19, 2011 01:53
Show Gist options
  • Save tarsisazevedo/980011 to your computer and use it in GitHub Desktop.
Save tarsisazevedo/980011 to your computer and use it in GitHub Desktop.
from unittest import TestCase
import math
class FatorialDeN(TestCase):
def test_soma_do_resultado_do_fatorial_de_10(self):
self.assertEquals(27, soma_do_fatorial_de_n(n=10))
def test_soma_do_resultado_do_fatorial_de_100(self):
self.assertEquals(648, soma_do_fatorial_de_n(n=100))
def soma_do_fatorial_de_n(n):
fatorial_n = math.factorial(n)
resultado = 0
for numero in str(fatorial_n):
resultado += int(numero)
return resultado
@tarsisazevedo
Copy link
Author

Obrigado renne, atualizei pro math.factorial. Boa contribuiçao.

Só nao troquei pra list comprehension porque fica meio ilegivel e nesse caso nao precisa de performance :D

@rennerocha
Copy link

Ilegível???? Para mim uma list comprehension atualmente é mais legível que uma função de 5 linhas :-) Mas eu entendo o seu ponto de vista ;-)

@tarsisazevedo
Copy link
Author

tarsisazevedo commented May 19, 2011 via email

@douglascamata
Copy link

Sugiro a seguinte função pra calcular o fatorial:

def fatorial(n):
    return reduce(lambda x, y: x*y, range(1,n+1))

Acho que ela vai propiciar uma performance bem maneira. Se combinar com o list comprehension que o @rennerocha sugeriu então, ficará ótimo!

@rennerocha
Copy link

Douglas,
A biblioteca padrão já possui a função math.factorial. Com certeza a performance dela já foi otimizada, então não vejo válido usar uma função lambda neste caso. Isso sim eu acho que reduz a legibilidade :-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment