"Escriba una rutina en python que reciba como entrada un número entero, *n*, e imprima los números en la *n-ésima* fila del triángulo 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 en caso contrario."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Solución 1 (mathy)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Los números en la *n-ésima* (empezando en cero) fila del triángulo de Pascal corresponden a los coeficientes binomiales ${n\\choose 0},\\,{n\\choose 1},\\,...,\\,{n\\choose n}$ donde\n",
"$$ {n\\choose k} = \\frac{n!}{k!(n-k)!} .$$"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def pascal1(n):\n",
" if int(n)==n: # reviso que el número sea entero\n",
" row = ''\n",
" for i in range(n+1): # calculo cada uno de los coeficientes binomiales y lo almaceno en fila \n",
" print('Error: el número ingresado no es entero')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\t\n"
]
}
],
"source": [
"pascal1(0)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\t4\t6\t4\t1\t\n"
]
}
],
"source": [
"pascal1(4)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Error: el número ingresado no es entero\n"
]
}
],
"source": [
"pascal1(3.3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Solución 2 (cody)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La otra opción es construir el triángulo de pascal hasta la *n-ésima* fila e imprimirla."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"def pascal2(n):\n",
" if int(n) != n:\n",
" print('Error: el número ingresado no es entero')\n",
" elif n == 0: # sabemos que la primera fila es un 1\n",
" print('1')\n",
" else:\n",
" prow = (int(1)) # guardando la primera fila, se usan tuplas para que sea inmutable\n",
" row =[] # lista donde se crearán las filas\n",
" for i in range(1,n+1): # iterando sobre el número de filas\n",
" for k in range(i+1): # segunda iteración (shame on me) para moverse en \"columnas\"\n",
" if k == 0 or k == i:\n",
" row.append(int(1)) # el primer y el último número es 1\n",
" else:\n",
" row.append(prow[k-1]+prow[k]) # elementos interiores como suma de elementos de la fila anterior\n",
" prow = tuple(row) # re asigno la fila anterior (como una tupla) para la nueva iteración\n",
" frow = row # guardo la fila actual\n",
" row = [] # vacío la fila para volverla a llenar\n",
" print(''.join([str(number) + '\\t' for number in frow])) # imprimo los número separados por tab"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\n"
]
}
],
"source": [
"pascal2(0)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\t1\t\n"
]
}
],
"source": [
"pascal2(1)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\t2\t1\t\n"
]
}
],
"source": [
"pascal2(2)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\t3\t3\t1\t\n"
]
}
],
"source": [
"pascal2(3)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Error: el número ingresado no es entero\n"
]
}
],
"source": [
"pascal2(3.1)"
]
}
],
"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:
# David Ramos - UIS
%% Cell type:markdown id: tags:
## Problema: Triángulo de Pascal
%% Cell type:markdown id: tags:
Escriba una rutina en python que reciba como entrada un número entero, *n*, e imprima los números en la *n-ésima* fila del triángulo 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 en caso contrario.
%% Cell type:markdown id: tags:
## Solución 1 (mathy)
%% Cell type:markdown id: tags:
Los números en la *n-ésima* (empezando en cero) fila del triángulo de Pascal corresponden a los coeficientes binomiales ${n\choose 0},\,{n\choose 1},\,...,\,{n\choose n}$ donde
$$ {n\choose k} = \frac{n!}{k!(n-k)!} .$$
%% Cell type:code id: tags:
``` python
importnumpyasnp
```
%% Cell type:code id: tags:
``` python
defpascal1(n):
ifint(n)==n:# reviso que el número sea entero
row=''
foriinrange(n+1):# calculo cada uno de los coeficientes binomiales y lo almaceno en fila