Estudiante: Angie Nicole Hernández Durán - UIS
Escriba una rutina en python que reciba como entrada un número entero, n, e imprima losnúmeros en la n-ésimafila del triángulo de Pascal. El programa debe verificar si el número es entero, o arrojar un mensaje informando que ha habido un error del usuario en caso contrario.
Primero voy a hacer una función para hacer un triángulo de pascal hasta la n-ésima linea
import numpy as np
def triangulo_de_pascal(n):
pascal_matrix = np.zeros((n,n)) #Voy a comenzar con un arreglo de ceros donde poner mi triángulo
for i in range(n):
pascal_matrix[i,0] = 1 #todos los números sobre lado izquierdo del triángulo son 1
for j in range(n):
if i == j:
pascal_matrix[i,j] = 1 #todos los números sobre lado derecho del triángulo son 1 también
elif i != j:
pascal_matrix[i,j] = pascal_matrix[i-1,j-1] + pascal_matrix[i-1,j] #esta es la condición para
#todas las demás posiciones
return pascal_matrix #la función me devuelve el arreglo con el tríangulo de pascal
#hasta la fila n
Ahora continúo con una función que tome este triángulo de pascal y me imprima la fila deseada
def print_pascal(numero_entero):
check = isinstance(numero_entero, int) #Aquí reviso si el número introducido es entero
if check == True: #Si sí lo es, continúa al triángulo de pascal
triangle = triangulo_de_pascal(numero_entero) #Usando mi función anterior, obtengo la matriz
#que necesito
print(triangle[numero_entero-1,:]) #Finalmente, imprimo la última fila
else:
print("Error, no se introdujo un número entero.") #Si el 'check' nota que no se introdujo un número entero
#devuelve un mensaje de error
Ahora una pequeña prueba
print_pascal(9)
[ 1. 8. 28. 56. 70. 56. 28. 8. 1.]
print_pascal(12.3)
Error, no se introdujo un número entero.
Modifique la rutina anterior para que reciba un número variable de argumentos: n1, n2, n3,...y retorne una lista cuyo primer elemento es una lista conteniendo los números 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.
Para esto, modifico la anterior rutina para que revise que todas las entradas de la función sean enteros, obtengo el triángulo de pascal con tantas filas como necesite, es decir, hasta la mayor fila introducida. finalmente tomo solamente las líneas que indican los argumentos que se introducen en la función.
def print_pascal_var(*args):
lista = list(args)
check = [isinstance(x, int) for x in lista] #Reviso si todos los números introducidos son enteros
if False in check: #Si alguno no lo es (hay algún 'False' en check)
# imprimo un mensaje de error
print("Error, uno o más de los números introducidos no son enteros.")
else: #Si todo es 'True', osea si todos son números enteros,
max_num = int(max(lista)) #hallo el número mayor
triangle = triangulo_de_pascal(max_num) #saco la matriz que necesito con el número mayor
n = [list(triangle[i-1,:]) for i in lista] #hago la lista con las filas requeridas, queda una
#lista de listas
n = [[element for element in sub if element != 0.0] for sub in n]
#como comencé con una matriz de ceros,
#quito estos valores (0.0) de las filas que no son
#la más larga
return n #La función devuelve la lista de listas, 'nested list'.
Ahora unas pruebas
print_pascal_var(1,5,4.2,7,9,2,4)
Error, uno o más de los números introducidos no son enteros
print_pascal_var(4,2,7)
[[1.0, 3.0, 3.0, 1.0], [1.0, 1.0], [1.0, 6.0, 15.0, 20.0, 15.0, 6.0, 1.0]]