Como calcular Fatorial em Python

Neste tutorial de nosso Curso de Python Online Grátis, vamos te ensinar o que é o número fatorial, para que serve, e como implementar ele tanto usando o laço FOR como o laço WHILE.

Já pensou em ir além de apenas aprender Python...e trabalhar com isso?
Leia:

Fatorial na Matemática

O fatorial é uma operação matemática, representada pelo símbolo de exclamação: !



A fórmula de fatorial de um número n é:
n! = n * (n-1) * (n-2) * ... * 3 * 2 * 1

Ou seja, o valor de n! (leia-se: n fatorial) é o produto de 1, por 2, por 3, ..., por (n-1) e n.

Por exemplo:
4! = 4 x 3 x 2 x 1 = 24
5! = 5 x 4 x 3 x 2 x 1 = 120 (ou: 5! = 5 x 4! = 5x24 = 120)

E por ai vai.

O fatorial é muito usado em um ramo da Matemática chamado Análise Combinatória. Muito mesmo. Se você fez ensino médio, certamente sabe o que é um fatorial.

Agora, vamos levar isso pro nosso amado Python.


Fatorial com o laço WHILE em Python

Vamos aprender agora como calcular o fatorial de número usando o laço While em Python.



Vamos lá, tente o máximo que puder:
Crie um programa em Python que pede um número inteiro ao usuário e calcule seu fatorial.


Vamos pedir um número inteiro e positivo ao usuário, e armazenar na variável numero.

Agora precisamos calcular o produto:
1*2*3*...*(numero-1) * numero

Vamos armazenar esse produto na variável resultado.
Inicialmente, vamos iniciar a variável resultado com 1:

resultado = 1

Agora vamos precisar de um contador, vamos usar a variável count para ir de 1 até numero, a cada iteração do laço WHILE, ela é incrementada.

Então, dentro do laço while, fazemos com que resultado seja multiplicado por count, pois count vai assumir os valores de 1, 2, 3, ..., até numero.

Quando chegar em numero, nosso looping while deve parar.
Logo, o teste condicional do while deve ser: count <= numero , ok?

Veja como ficou nosso script em Python:


numero = int(input("Fatorial de: ") )

resultado=1
count=1

while count <= numero:
    resultado *= count
    count += 1

print(resultado)


Lembrando que:
  • resultado *= count é o mesmo que: resultado = resultado * count
Ou seja, o novo valor de 'resultado' vai ser o valor antigo multiplicado por 'count'.

  • Já: count += 1 significa: count = count + 1
Ou seja, estamos incrementando o valor de 'count' em uma unidade, a cada iteração do laço WHILE.


Calcular fatorial usando laço FOR em Python

A lógica deve ser a mesma. Na verdade, tudo que um laço WHILE faz o FOR faz, e vice-versa.



"Ué, então pra que criar os dois?"
Porque tem situações que é melhor usar um e situações que é melhor usar outro.

Neste caso, você vai ver que é melhor usar o FOR.

Vamos repetir a ideia: Precisamos fazer várias multiplicações, do número 1 até o valor inserido pelo usuário, numero.
Do intervalo 1 até numero.

Isso te lembra algo? Intervalo?

Sim, range.
Nossa querida, amada função range do Python, que é unha e carne com o laço FOR.

Como queremos um intervalo que vai de 1 até numero, basta usarmos:
range(1, numero+1)

Veja como nosso código fica bem mais enxuto e fodástico usando o laço FOR:

numero = int(input("Fatorial de: ") )

resultado=1
for n in range(1,numero+1):
    resultado *= n

print(resultado)

Exercício de Python

Seu  professor de Matemática, cansado de ficar fazendo multiplicações para achar o fatorial, te encomendou um script em Python (obviamente pagou, pois você possui um certificado do curso de Python).

Porém, ele quer fazer vários e vários cálculos.
Nos exemplos anteriores a gente pede o número uma vez, mostra o fatorial e fecha o script.

Ele não, ele quer um looping infinito, que só acabe quando ele fornecer o número 0 como entrada.

Se garante? Faça aí e poste nos comentários.

2 comentários:

  1. nfat = 1
    while nfat != 0:
    nfat = int(input('Fatorial de:'))
    resul = 1
    for i in range(1, nfat + 1):
    resul *= i
    print(resul)
    print('Fim')

    ResponderExcluir
  2. from termcolor import colored, cprint
    n = ''
    c = 1
    while n != 0:
    n = int(input(colored('fatorial de: ',color='red')))
    if n == 0:
    break
    for i in range(n,0,-1):
    c *= i
    cprint(f'{i}{"x" if i > 1 else "=" }','red',end='')
    cprint(c,'blue')
    cprint('fim','cyan')

    ResponderExcluir