Mandar um café pro programador

Pode me ajudar a transformar cafeína em código?

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.

38 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
    Respostas
    1. fat = 1
      n = int(input())
      while(n != 0):
      for i in range(1, n+1):
      fat *= i
      print(fat)
      n = int(input())
      fat = 1

      Excluir
    2. numero = int(input("Fatorial de: ") )

      resultado=1
      count= 1

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

      if resultado != 1:
      print(resultado)
      else:
      print("fim")

      Excluir
  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
  3. #ecoding:utf-8

    num= 1

    while True:
    numero=int(input("fatorial de:"))
    resultado= 1
    for i in range(1,numero+1):
    resultado*= i
    print (resultado)

    ResponderExcluir
  4. numero = 1
    while numero !=0:
    numero = int(input('Fatorial de: '))
    resultado = 1

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

    print("final do trabalho!!")

    ResponderExcluir
  5. #! /usr/bin/python3
    #! coding: utf-8

    def fatorial(n):
    if n <= 1:
    return 1

    return n * fatorial(n -1)


    print(fatorial(5))

    ResponderExcluir
  6. Respostas
    1. n = int(input("Digite seu número:"))
      for i in range(1, n):
      resultado = (i*n)
      n = resultado
      print (resultado)

      Excluir
  7. fatorial = 1
    while fatorial != 0 :
    fatorial = int(input('Entre com o fatorial: '))
    aux = 1

    for i in range (1, fatorial+1):
    aux *= i
    if fatorial != 0:
    print(aux)

    ResponderExcluir
  8. Usando apenas while e for:

    res = 1; fat = 1

    while fat != 0:
    fat = int(input("Insira o fatorial: "))
    for val in range(1,fat+1):
    res *= val
    print(fat,"! =", res)
    res = 1

    ResponderExcluir

  9. numero = 1
    while numero !=0:
    numero = int(input('Fatorial de: '))
    resultado = 1
    for n in range (1, numero+1):
    resultado *= n

    print(resultado)
    print('Fim ')

    ResponderExcluir
  10. m=int(input('Digite um Nr para fatorial: '))
    i=1
    count=1

    while i<m:
    i+=1
    count*=i
    print(count)

    ResponderExcluir
  11. num=int(input('Digite um numero: '))
    fat=num
    while num>1:
    num-=1
    fat*=num

    print("O fatorial eh: ",fat)

    ResponderExcluir
  12. fecho = 0
    while fecho < 1:
    num = int(input('Fatorial de: '))
    fatorial = 1
    while num > 1:
    fatorial = fatorial * num
    num -= 1
    if num == 0:
    print('Fim do Programa')
    break
    print(fatorial)

    ResponderExcluir
  13. count = int(input("Insira o valor de count: "))

    while count > 0:
    print(count)
    count += 1

    ResponderExcluir
  14. n = int(input("Digite um número inteiro positivo: "))
    while n > 0:
    fatorial = 1
    while n > 1:
    fatorial *=n
    n = n-1
    print(fatorial)
    n = int(input("Digite um número inteiro positivo: "))

    ResponderExcluir
  15. def fator(n):
    cont=1
    fator=1
    while cont<=n:
    fator*=cont
    cont+=1
    return(fator)


    n= int(input('digite o numero para saber o fatorial: '))
    while n!=0:
    resultado = fator(n)
    print (' o fatorial de {} é:{}'.format(n, resultado))
    if n==0:
    print('o programa foi encerrado!')
    else:
    n=int(input('digite o numero para saber o fatorial: '))
    print('o programa foi encerrado!')

    ResponderExcluir
  16. Segue o meu código:

    num = int(input('Fatorial de: '))
    while num >= 1:
    res = 1
    for n in range(1, num+1):
    res *= n
    print(res)
    num = int(input('Fatorial de: '))

    ResponderExcluir
    Respostas
    1. num=1
      while num >= 1:
      num = int(input('Fatorial de: '))
      res = 1
      for n in range(1, num+1):
      res *= n
      print(res)

      Excluir
  17. consegui dar o loop no fatorial e parar quando a entrada for 0, porém ele sempre soma o resultado anterior + novo.

    numero = int(input("Um número inteiro e positivo: "))
    resultado = 1

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

    print(resultado)

    numero = int(input("Um número inteiro e positivo: "))

    ResponderExcluir
    Respostas
    1. o resultado voce pode colocar dentro do while pra ele ficar sempre resetando o valor pra 1
      ------------------------------//----------------------------------

      #Requisitando confirmação do usuário
      confirm=int(input('Digite 1 para sim e 0 para não: Deseja iniciar? '))

      #Estrutura de repetição de confirmação
      while(confirm == 1):
      #Requisitando valores ao usuário
      num=int(input('Digite um número para o fatorial: '))
      result=1
      #Estrutura de repetição da fatorial
      for n in range(1,num+1):
      result*=n
      #Imprimindo resultado da fatorial
      print(result)
      confirm=int(input('Digite 1 para continuar e 0 para encerrar: '))
      #Imprimindo fim do programa
      print('Programa encerrado! Obrigado por utiliza-lo')

      Excluir
  18. Boa noite, como eu deveria fazer, caso eu precise calcular a fatorial de por exemplo 10 números diferentes? E no final
    apresentar o somatório da fatorial de cada valor lido.

    ResponderExcluir
  19. eu fiz soh com o for, okay!?

    def fatore_multi():
    number = int(input("Qual eh o inteiro a ser fatorado agr, professor? "))
    while number != 0:
    fator = 1
    for i in range(1, number + 1):
    fator *= i
    print(fator)
    number = int(input("Qual eh o inteiro a ser fatorado agr, professor? "))
    print("0 nao se fatora, professor. Tenha um bom dia!")

    ResponderExcluir
  20. from math import factorial
    n = int(input('Fatorial de: '))
    print(f'{n}! = ', factorial(n))

    ResponderExcluir
  21. looping infinito, que só acaba quando n=0 como entrada.
    n = None
    while n != 0:
    n = int(input('Fatorial de: '))
    c = n
    f = 1
    while c > 0:
    f *= c
    c -= 1
    print(f)

    ResponderExcluir
  22. E se a condição fosse:
    Dado um inteiro positivo N, vc deve escrever um programa para determinar o menor numero k tal que
    N = a1! + a2! + . . . + ak!, onde cada ai
    , para 1 ≤ i ≤ k, ´e um numero inteiro positivo.

    ResponderExcluir
  23. continuar = 'S'
    while 'S' in continuar:
    digito = int(input('De qual número você deseja o fatorial -->'))
    if 0 > digito or digito > 16:
    while True:
    print('\033[31mERROR\033[m \nDigite números inteiros e positivos menores que 16')
    digito = int(input('De qual número você deseja o fatorial -->'))
    if 0 < digito < 16:
    break
    savepoint = digito
    num = digito
    while True:
    if savepoint > 0:
    savepoint -= 1
    if savepoint >= 1:
    digito *= savepoint
    if savepoint == 0:
    break
    print(f'\033[34m {num} \033[m! = \033[32m {digito} \033[m')
    continuar = str(input('\033[33m Deseja continuar? \033[m \n[S] sim [N] não'
    '\nSua resposta -->')).upper()
    if 'S' not in continuar and 'N' not in continuar:
    while True:
    print('\033[31m ERROR \033[m \nInsira uma resposta válida')
    continuar = str(input('\033[33m Deseja continuar? \033[m \n[S] sim [N] não'
    '\nSua resposta -->')).upper()
    if 'S' in continuar or 'N' in continuar:
    break
    if 'S' in continuar:
    continue
    if 'N' in continuar:
    break
    print('\033[32mPrograma finalizado com sucesso.')

    ResponderExcluir
  24. Deu 33 linhas meu código...

    ResponderExcluir
  25. numero = 1
    resultado = 1

    while numero:
    resultado = 1
    numero = int (input ("Qual número você quer fatorar?\n"))
    for total in range (1,numero + 1):
    resultado *= total
    print ("Resultado:(",resultado,")")
    print ()

    ResponderExcluir
  26. Alguém me ajuda? Sou muito iniciante, tenham paciência por favor!
    Tentei fazer, mas meu código meio que desconsidera o primeiro comando, e não sei como fazer pra encerrar quando digitar 0.
    Sabe me ajudar?

    numero = int(input('Digite um número'))
    while numero >= 0:
    numero = int(input('Digite um número'))
    fatorial = 1
    for item in range(1,numero +1):
    fatorial = fatorial * item
    print(fatorial)

    ResponderExcluir
    Respostas
    1. modificando seu apenas um pouco seu código.
      numero = int(input('Digite um número '))
      while True:
      if numero == 0:
      break
      else:
      fatorial = 1
      for item in range(1,numero +1):
      fatorial = fatorial * item
      print(fatorial)
      numero = int(input('Digite um número '))

      Excluir
  27. numero = int(input('Digite um número'))
    while numero >= 0:
    numero = int(input('Digite um número'))
    fatorial = 1
    for item in range(1,numero +1):
    fatorial = fatorial * item
    print(fatorial)

    ResponderExcluir
  28. existe farias formar de fazer esse exercício, pode usar função, pode usar recursividade ou não, eu vou só modificar um pouco seu código:
    numero = int(input('Digite um número '))
    while True:
    if numero == 0:
    break
    else:
    fatorial = 1
    for item in range(1,numero +1):
    fatorial = fatorial * item
    print(fatorial)
    numero = int(input('Digite um número '))

    ResponderExcluir
  29. Respostas
    1. O curso segue um sumário, e neste ponto estamos estudando os laços FOR e WHILE, e o exercício foi fazer usando eles.

      Excluir
  30. código refatorado abrangendo todas possibilidades

    while True:
    try:
    numero = int(input("Fatorial de: "))
    except ValueError:
    print("Informe apenas números inteiros.")
    else:
    count, resultado= 1, 1
    if numero < 0:
    print("Não existe fatorial para números negativos.")
    elif 0 < numero < 1:
    print(1)
    else:
    while count <= numero:
    resultado *= count
    count += 1
    print(resultado)
    cont = input("Continuar? (s/n)? ").lower()[0]
    if cont == 'n':
    print('FIM!')
    break

    ResponderExcluir

Bora fazer evoluir o ensino da Programação no Brasil ?

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo