"**Escriba una rutina en python que reciba como entrada un numero entero, n, e imprima los numeros en la n-esima fila del triangulo de pascal. El programa debe verificar si el número n es entero, o arrojar un mensaje informando que ha habido un error del usuario.**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Anexamos una primera solución que utilizará ciclos for, condicionales if y uso de listas para la resolución del problema.\n",
"Comenzando con probar si un número es entero o nó, ya que, el programa descrito necesita un número \"n\" que sea entero."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Para lo antes descrito utilizamos un try/except, una herramienta de python que permite que el programa intente una secuencia de codigo y si falla obtenga otro camino o salida."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Por favor ingresa tu número entero: 4\n"
]
}
],
"source": [
"n = input(\"Por favor ingresa tu número entero: \") #Entrada de un numero entero\n",
"try:\n",
" n = int(n) #El programa tratará de probar si el numero es entero\n",
"except:\n",
" print(\"Error de usuario: entrada no valida/número decimal\")\n",
" #Si la condición no se cumple, se imprimirá el mensaje de arriba "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Creamos una lista vacia llamada \"pascal\", en donde mediante el ciclo for podremos ir agregando los diferentes elementos en el rango de el \"n\" que introducimos en el paso anterior.\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 3, 3, 1]\n"
]
}
],
"source": [
"pascal = [] #Nuestra lista vacia de pascal \n",
"for i in range(n): #abrimos un ciclo que cuente sobre el rango de \"n\"\n",
" pascal.append([]) #Agregamos un elemento vacio a la lista de pascal\n",
" pascal[i].append(1) #Por cada elemneto \"i\" se agregará un \"1\" a la lista\n",
" \n",
" #Creamos un segundo ciclo for, de donde, se tomaran elementos j desde \"1\" hasta \"i\"\n",
" val = int((math.factorial(m))/(math.factorial(m-j)*math.factorial(j)))\n",
" #val sera la ecuación que contiene todas las operaciones factoriales \n",
" return val\n",
"#Pedimos que el programa retorne val para cerrar el ciclo de la función"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Por favor ingresa tu número entero: 3\n",
"[1, 3, 3, 1]\n"
]
}
],
"source": [
"m = input(\"Por favor ingresa tu número entero: \") #Entrada de un numero entero\n",
"try:\n",
" m = int(m) #El programa tratará de probar si el numero es entero\n",
"except:\n",
" print(\"Error de usuario: entrada no valida/número decimal\")\n",
" #Si la condición no se cumple, se imprimirá el mensaje de arriba \n",
"\n",
"pascal = []\n",
"for i in range(0,m+1):\n",
" pascal.append(comb(m,i))\n",
" \n",
"print(pascal) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Nota importante:**\n",
"El primer codigo esta desfasado del segundo codigo en una unidad."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Modificar la rutina anterior para que rebiba un número variable de argumentos:n1,n2,n3 y retorne\n",
"una lista cuyo primer elemento es una lista conteniendo los numeros en la final n1 del triangulo\n",
"de Pascal, el segundo elemento una lista con los numeros en la fila n2 y así sucesivamente.**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Para hacer un codigo más simple, usaremos nuestra función combinatoria, la re-definimos con respecto a \"p\" para que no haya problemas con la función combinatoria definida antes en el apartado anterior.\n",
"\n",
"La función combinatoria fue explicada en el apartado anterior"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"import math\n",
"def comb1(p,j):\n",
" val = int((math.factorial(p))/(math.factorial(p-j)*math.factorial(j)))\n",
" return val"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Definimos ahora una nueva función que sea una fila de pascal que pueda ser llamada con varios valores que, en este caso, llamamos p. No sabemos cuantos argumentos de entrada usaremos asi que usamos (*args) para darle a entender a la función que son argumentos separados por una coma.\n",
"\n",
"Dentro de la nueva función de pascal, llamamos a nuestra función combinatoria y obtenemos el resultado deseado"
" for p in args: #Ciclo for que incluya todos los valores p contenidos en (*args)\n",
" try:\n",
" p = int(p) #El programa tratará de probar si el numero es entero\n",
" except:\n",
" print(\"Error de usuario: entrada no valida/número decimal\")\n",
" #Si la condición no se cumple, se imprimirá el mensaje de arriba \n",
" \n",
" pascal = [] #Creamos nuestra lista vacia pascal\n",
" for i in range(0,p+1): #Para cada elemento que vaya de 0 a p+1\n",
" pascal.append(comb1(p,i)) #agregamos dichos elementos a nuestra lista pascal con nuestra \n",
" #función combinatoria\n",
" \n",
" print(\"La fila de pascal correspondiente a\",p,\"es:\",pascal) \n",
" #Imprimimos un mensaje para el usuario que denota que numero se está usando y que fila del \n",
" #triangulo se obtiene."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Finalmente, llamamos a nuestra función con los argumentos deseados "
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"La fila de pascal correspondiente a 4 es: [1, 4, 6, 4, 1]\n",
"La fila de pascal correspondiente a 5 es: [1, 5, 10, 10, 5, 1]\n",
"La fila de pascal correspondiente a 8 es: [1, 8, 28, 56, 70, 56, 28, 8, 1]\n",
"La fila de pascal correspondiente a 9 es: [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]\n"
]
}
],
"source": [
"pascal_vars(4,5,8,9)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
%% Cell type:markdown id: tags:
### Ejercicio 2. Triángulo de Pascal.
#### Gerardo Semprúm.
#### Usuario de Mattermost: @semprumg
#### Universidad Central de Venezuela.
%% Cell type:markdown id: tags:
**Escriba una rutina en python que reciba como entrada un numero entero, n, e imprima los numeros en la n-esima fila del triangulo de pascal. El programa debe verificar si el número n es entero, o arrojar un mensaje informando que ha habido un error del usuario.**
%% Cell type:markdown id: tags:
Anexamos una primera solución que utilizará ciclos for, condicionales if y uso de listas para la resolución del problema.
Comenzando con probar si un número es entero o nó, ya que, el programa descrito necesita un número "n" que sea entero.
%% Cell type:markdown id: tags:
Para lo antes descrito utilizamos un try/except, una herramienta de python que permite que el programa intente una secuencia de codigo y si falla obtenga otro camino o salida.
%% Cell type:code id: tags:
``` python
n=input("Por favor ingresa tu número entero: ")#Entrada de un numero entero
try:
n=int(n)#El programa tratará de probar si el numero es entero
except:
print("Error de usuario: entrada no valida/número decimal")
#Si la condición no se cumple, se imprimirá el mensaje de arriba
```
%% Output
Por favor ingresa tu número entero: 4
%% Cell type:markdown id: tags:
Creamos una lista vacia llamada "pascal", en donde mediante el ciclo for podremos ir agregando los diferentes elementos en el rango de el "n" que introducimos en el paso anterior.
%% Cell type:code id: tags:
``` python
pascal=[]#Nuestra lista vacia de pascal
foriinrange(n):#abrimos un ciclo que cuente sobre el rango de "n"
pascal.append([])#Agregamos un elemento vacio a la lista de pascal
pascal[i].append(1)#Por cada elemneto "i" se agregará un "1" a la lista
#Creamos un segundo ciclo for, de donde, se tomaran elementos j desde "1" hasta "i"
forjinrange (1,i):
pascal[i].append(pascal[i-1][j-1]+pascal[i-1][j])
#Para cada elemento i en pascal se agregará otro elemento el cual resulta entre
#diferentes operaciones entre "j" e "i"
if (n!=0):#Si n es diferente a 0 agregaremos un 1 a la lista pascal
pascal[i].append(1)
print(pascal[-1])
#Pedimos imprimir el ultimo termino de la lista con pascal[-1]
```
%% Output
[1, 3, 3, 1]
%% Cell type:markdown id: tags:
**Forma alternativa de resolver el ejercicio**
El triangulo de pascal es el resultado de hacer multiples combinatorias, por lo tanto:
%% Cell type:markdown id: tags:
Importamos la libreria math, de donde pedimos por un elemento m y j para realizar combinaciones de la forma:
#val sera la ecuación que contiene todas las operaciones factoriales
returnval
#Pedimos que el programa retorne val para cerrar el ciclo de la función
```
%% Cell type:code id: tags:
``` python
m=input("Por favor ingresa tu número entero: ")#Entrada de un numero entero
try:
m=int(m)#El programa tratará de probar si el numero es entero
except:
print("Error de usuario: entrada no valida/número decimal")
#Si la condición no se cumple, se imprimirá el mensaje de arriba
pascal=[]
foriinrange(0,m+1):
pascal.append(comb(m,i))
print(pascal)
```
%% Output
Por favor ingresa tu número entero: 3
[1, 3, 3, 1]
%% Cell type:markdown id: tags:
**Nota importante:**
El primer codigo esta desfasado del segundo codigo en una unidad.
%% Cell type:markdown id: tags:
**Modificar la rutina anterior para que rebiba un número variable de argumentos:n1,n2,n3 y retorne
una lista cuyo primer elemento es una lista conteniendo los numeros en la final n1 del triangulo
de Pascal, el segundo elemento una lista con los numeros en la fila n2 y así sucesivamente.**
%% Cell type:markdown id: tags:
Para hacer un codigo más simple, usaremos nuestra función combinatoria, la re-definimos con respecto a "p" para que no haya problemas con la función combinatoria definida antes en el apartado anterior.
La función combinatoria fue explicada en el apartado anterior
Definimos ahora una nueva función que sea una fila de pascal que pueda ser llamada con varios valores que, en este caso, llamamos p. No sabemos cuantos argumentos de entrada usaremos asi que usamos (*args) para darle a entender a la función que son argumentos separados por una coma.
Dentro de la nueva función de pascal, llamamos a nuestra función combinatoria y obtenemos el resultado deseado