Pular navegação

Meu irmão tá cursando o primeiro período de Ciência da Computação na UESB, então estamos sempre batendo um papo sobre programação e compartilhando o que estamos aprendendo. Essa noite. ele comentou que quebrou a cabeça até descobrir como escrever um código para calcular o fatorial de um número inserido pelo usuário.

Eu também passei horas tentando descobrir o caminho. O mais surpreendente é que, no final, o código é muito simples…

#!/bin/python
#calculador de fatorial

n = int(raw_input(‘Digite um numero: ‘))

resultado = 1

lista = range(1,n+1)

for x in lista:

resultado = x * resultado

print ‘%s! = %s’ % (n, resultado)

O fatorial de um número é ele multiplicado por todos os números positivos e menores que ele. Exemplo 5! = 5 x 4 x 3 x 2 x 1.

A lógica do programa está em gerar uma lista que começa no número 1 e vai até o número digitado pelo usuário [ range(1,n+1) ]. O range(1,6) por exemplo, gera a lista [1, 2, 3, 4, 5]. Antes disso, eu havia atribuído o valor 1 à variável ‘resultado’. Em seguida, cada número da lista é multiplicado pelo resultado da multiplicação anterior.

A última linha apenas imprime o resultado do fatorial.

Se alguém tiver mais sugestões de bons desafios de programação, deixem comentários.

11 Comments

  1. Ótima solução. É um problema basicamente simples de se pensar, mas implementar em uma linguagem de programação requer um pouco de esforço. Parabéns!

  2. Só mais um comentário, ficaria mais enxuto assim:
    #!/bin/python
    #calculador de fatorial

    n = int(raw_input(’Digite um numero: ‘))

    resultado = 1

    for x in range(1,n+1):

    resultado = x * resultado

    print ‘%s! = %s’ % (n, resultado)

  3. @katsutoshi

    tinha pensado nisso, mas acabei esquecendo de modificar o código…

  4. @wille
    Acontece…
    Mas uma coisa que eu estava olhando, não seria mais lógico na ultima linha colocar (x,resultado) do que (n,resultado) ? Assim toda linha mostra os valores do fatorial da faixa do range(). Bem, não sei se seria melhor, ou se era seu objetivo, é só uma pergunta.

  5. essa é uma boa sugestão, lembrando que a linha do print deveria ser identada para ficar dentro do laço do for.

    porém minha intenção era apenas mostrar o fatorial do número que o usuário digitou mesmo…

  6. Não creio que vc passou horas pensando nisso e creio menos ainda que você imagine que isso é simples, é fácil…

    Prefirimos quando vc mexe com animação.

    Abraços…

  7. Tiago e Dani, adoro lógica e isso atualmente me dá muito mais prazer que vídeo e animação.

  8. WIlle =)
    vim aqui fazer uma visita.. hehe

    to tendo um monte de questao dificil pra resolver agora… essa ai foi facil…

    depois eu passo aqui e deixo uns desafios…

    flw
    abçss

  9. Ahn… Quero ver a máquina duvidar.

  10. Eu sei que o posto eh meio antigo, mas eu tive que vir e perguntar “como assim desafio?”…. é só fazer assim…

    n = input()
    fat = reduce(lambda x,y: x*y, range(1,n+1))

    =)

  11. Pode utilizar-se a função prod do numpy.

    from numpy import prod
    n = int(raw_input(‘Digite um numero: ‘))
    print ‘%s! = %s’ % ( n , prod(xrange(1, n+1)) )


Deixar mensagem para katsutoshi Cancelar resposta