martes, 21 de diciembre de 2010

Factorial de un número en Python

No se si sabéis que el factorial de un número, por ejemplo del número 3, es el número multiplicado por sus números naturales anteriores (a excepción del 0). Se representa así: 3!

Por ejemplo: 3!=3*2*1=6

Si vamos a trabajar con factoriales con nuestros programas en Python, o símplemente queremos hacer un macro que nos calcule directamente el factorial sin tener que sacar la calculadora (o por curiosidad), aquí pongo este tutorial, sobre cómo sacar el factorial de un número con Python (en este caso Python 3):

# Inicio del codigo
def f(n):
    a=1
    if n<0:
        return 0
    elif n==0:
        return 0
    else:
        for i in range(2,n+1):
            a=a*i
        return a
# Fin del codigo

Este código se puede meter en la línea de comandos directamente, o dentro de un programa, y si haces ésto último, asegúrate de que estableces el valor de n antes de llamar a la función.

Creamos una función llamada f, como la de arriba, a la que le pasamos un parámetro, n, que va a ser el número del que queremos sacar su factorial. Si el número introducido es negativo o 0, la respuesta por pantalla será 0. En cambio si es positivo, multiplicamos 1 (a) por los naturales anteriores de n. Por ejemplo si es 3, multiplicaremos por 3 y 2 (el 1 es despreciable). Para que Python me tomara n dentro del rango, tuve que poner n+1.
Así si introducimos el 3, el rango será de 2 a 4, pero el 4 no me lo toma, asique es de 2 a 3, por lo que multiplicaremos 2*3*1=6.
Tras haber calculado esto, mostraremos en pantalla el factorial.

Hemos acabado de hacer la función. Recuerda que estas 9 líneas de código no se ejecutarán si no llamamos a la función, asique vamos a llamarla.
Para llamar a la funcion (o sacar el factorial de un número) tecleamos (en la consola):

>>> f(3)

Esto nos sacará por pantalla el factorial del 3, que es 6. Y así con todos:

>>> f(6)
720
>>> f(10)
3628800

La ventaja de haber creado una función con esto es que podemos trabajar con factoriales dentro de nuestro programa, por ejemplo:

>>> f(4)+3
27

También podemos operar con varios factoriales a la vez:

>>> (f(5)+f(4))-f(3)
138