Soy Alfonso Navas (@navasa) y en este cuaderno presentaré mi solución para el ejercicio No. 2 - Triángulo de Pascal.
Este ejercicio consta de 2 incisos, pero en vez de enfrentarlos directamente primero definiremos algunas funciones que nos serán de utilidad.
Creamos la función factorial()
, la cual recibe como argumento un número entero y devuelve su factorial.
def factorial(n = 1):
if (n <= 1):
return 1
else:
return n * factorial(n-1) # hacemos uso de la recursividad para calcular el factorial de un número
print(factorial(5)) # comprobando que nuestra función funciona bien, 5! = 120
120
Usando la función factorial()
, creamos la función combinatorio()
, la cual, a partir de dos argumentos n y k, calcula nCk.
def combinatorio (n=1, k =0):
combinatorio = factorial(n)/(factorial(k)*factorial(n - k))
return int(combinatorio)
print(combinatorio(5,3)) # comprobando que nuestra función funciona bien, 5C3 = 10
10
Se pretende escribir una rutina que acepta como entrada un número entero n y devuelve la n-ésima fila del triángulo de Pascal.
Utilizando la función input()
, se le solicita al usuario que ingrese un número entero positivo. Adicionalmente, se verificamos que n es entero positivo, en caso contrario se imprime un mensaje de error.
n = input('Por favor, ingrese un numero entero postivo: ')
try:
n = int(n)
except:
print('¡Error! Por favor, intente ingresando un número entero positivo')
if (isinstance(n, int) and n <= 0):
print('¡Error! Por favor, intente ingresando un número entero positivo')
Por favor, ingrese un numero entero postivo: 5
Usando la función combinatorio()
podemos generar un en una lista con los elementos de la n-ésima fila del triángulo de Pascal.
fila_pascal = []
for k in range(n):
numero = combinatorio(n - 1, k)
fila_pascal.append(numero)
print(fila_pascal)
[1, 4, 6, 4, 1]
En este caso es conveniente escribir una función que sintetice esta rutina, considerando que nos será de utilidad para el punto siguiente. Esta función recibe como argumento un número entero positivo n y regresa los números en la n-ésima fila del triángulo de Pascal. En caso de que lo que se ingrese no sea un número entero postivo, la función regresará un mensaje de error.
def fun_pascal(n = 1):
if (isinstance(n, int) and n > 0):
fila_pascal = []
for k in range(n):
numero = combinatorio(n - 1, k)
fila_pascal.append(numero)
return fila_pascal
return '¡Error! Por favor, intente ingresando un número entero positivo'
print(fun_pascal(-5)) # comprobando que nuestra función funciona bien
print(fun_pascal(5.1))
print(fun_pascal('julio'))
print(fun_pascal(5))
¡Error! Por favor, intente ingresando un número entero positivo ¡Error! Por favor, intente ingresando un número entero positivo ¡Error! Por favor, intente ingresando un número entero positivo [1, 4, 6, 4, 1]
En esta parte modificaremos la rutina anterior y crearemos una función que reciba un número variable de argumentos: n1, n2, n3, ... y retone una lista cuyo primer elemento es una lista conteniendo los número en la fila en la fila n1 del triángulo de Pascal, el segundo elemento una lista con los números en la fila n2, y así sucesivamente.
def fun_pascalX(*args):
lista = []
for n in args:
lista.append(fun_pascal(n)) #usamos la función definida en el paso 5
return lista
print(fun_pascalX(-5)) # comprobando que nuestra función funciona bien
print(fun_pascalX(5.1))
print(fun_pascalX('julio'))
print(fun_pascalX(5, 'a'))
['¡Error! Por favor, intente ingresando un número entero positivo'] ['¡Error! Por favor, intente ingresando un número entero positivo'] ['¡Error! Por favor, intente ingresando un número entero positivo'] [[1, 4, 6, 4, 1], '¡Error! Por favor, intente ingresando un número entero positivo']
l = fun_pascalX(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
print(l[0])
print(l[1])
print(l[2])
print(l[3])
print(l[4])
print(l[5])
print(l[6])
print(l[7])
print(l[8])
print(l[9])
print(l[10])
[1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1] [1, 5, 10, 10, 5, 1] [1, 6, 15, 20, 15, 6, 1] [1, 7, 21, 35, 35, 21, 7, 1] [1, 8, 28, 56, 70, 56, 28, 8, 1] [1, 9, 36, 84, 126, 126, 84, 36, 9, 1] [1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1]