"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.\n",
"El programa debe verificar si el númerones entero, o arrojar un mensaje informando que ha habido un error del usuario en casocontrario."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"¿Que fila del triángulo de Pascal desea conocer?\n"
]
}
],
"source": [
"print('¿Que fila del triángulo de Pascal desea conocer?')"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"5\n"
]
}
],
"source": [
"n = input()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La construcción del triángulo está relacionada con los coeficientes binomiales según la fórmula [combinatoria](https://es.wikipedia.org/wiki/Combinatoria). Esta fórmula explica que los coeficientes (nodos del \"árbol\") de una fila dada del triángulo, se pueden calcular con la fórmula combinatoria de combinaciones de $n$ elementos de $k$ en $k$; expresado matemáticamente: $\\tbinom n k$, dónde $n$ es la ''fila - 1'' y $k$ la posición en la fila."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Función que genera los valores de las combinatorias"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"def binomial(n,k):\n",
" \"\"\"\n",
" Calcula la combinatoria de n en k\n",
" \"\"\"\n",
" if k > n-k: k = n-k # Simetría de la combinatoria\n",
" accum = 1\n",
" for i in range(1,k+1):\n",
" accum *= (n - (k - i))\n",
" accum /= i\n",
" accum = int(accum) # Lo vuelve integer\n",
" return accum"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Función que entrega la fila desea"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def ej2(num):\n",
" \"\"\"\n",
" Entrega la enésima fila\n",
" del triángulo de Pascal\n",
" \"\"\"\n",
" num = int(num) #la entrada debe ser entero, en caso de ser decimal usa la parte entera\n",
" fila = [] # Lista vacía\n",
" for i in range(num): \n",
" fila.append(binomial(num-1,i)) # se va añadiendo cada término de combinatoria de la enesima fila\n",
" return print(fila)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"La fila deseada es:\n",
"[1, 4, 6, 4, 1]\n"
]
}
],
"source": [
"print(\"La fila deseada es:\")\n",
"ej2(n)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Parte 2\n",
"\n",
"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."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"def ej2pt2(*args):\n",
" \"\"\"\n",
" Entrega la enésima fila\n",
" del triángulo de Pascal\n",
" de los números introducidos\n",
" \"\"\"\n",
" for x in args: #loop por cada elemento introducido\n",
" x = int(x) #entrada enteras, en caso de ser decima solo considera parte entera\n",
" fila = []\n",
" for i in range(x):\n",
" fila.append(binomial(x-1,i))# fila vacía, se añaden los términos de combinatoria que corresponden\n",
" print(fila)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"En el caso de querer conocer, por ejemplo, las filas 3, 6 y 9:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Las filas deseadas son:\n",
"[1, 2, 1]\n",
"[1, 5, 10, 10, 5, 1]\n",
"[1, 8, 28, 56, 70, 56, 28, 8, 1]\n"
]
}
],
"source": [
"print(\"Las filas deseadas son:\")\n",
"ej2pt2(3,6,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:
# Triángulo de Pascal
%% Cell type:markdown id: tags:
## Parte 1
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úmerones entero, o arrojar un mensaje informando que ha habido un error del usuario en casocontrario.
%% Cell type:code id: tags:
``` python
print('¿Que fila del triángulo de Pascal desea conocer?')
```
%% Output
¿Que fila del triángulo de Pascal desea conocer?
%% Cell type:code id: tags:
``` python
n=input()
```
%% Output
5
%% Cell type:markdown id: tags:
La construcción del triángulo está relacionada con los coeficientes binomiales según la fórmula [combinatoria](https://es.wikipedia.org/wiki/Combinatoria). Esta fórmula explica que los coeficientes (nodos del "árbol") de una fila dada del triángulo, se pueden calcular con la fórmula combinatoria de combinaciones de $n$ elementos de $k$ en $k$; expresado matemáticamente: $\tbinom n k$, dónde $n$ es la ''fila - 1'' y $k$ la posición en la fila.
%% Cell type:markdown id: tags:
#### Función que genera los valores de las combinatorias
%% Cell type:code id: tags:
``` python
defbinomial(n,k):
"""
Calcula la combinatoria de n en k
"""
ifk>n-k:k=n-k# Simetría de la combinatoria
accum=1
foriinrange(1,k+1):
accum*=(n-(k-i))
accum/=i
accum=int(accum)# Lo vuelve integer
returnaccum
```
%% Cell type:markdown id: tags:
#### Función que entrega la fila desea
%% Cell type:code id: tags:
``` python
defej2(num):
"""
Entrega la enésima fila
del triángulo de Pascal
"""
num=int(num)#la entrada debe ser entero, en caso de ser decimal usa la parte entera
fila=[]# Lista vacía
foriinrange(num):
fila.append(binomial(num-1,i))# se va añadiendo cada término de combinatoria de la enesima fila
returnprint(fila)
```
%% Cell type:code id: tags:
``` python
print("La fila deseada es:")
ej2(n)
```
%% Output
La fila deseada es:
[1, 4, 6, 4, 1]
%% Cell type:markdown id: tags:
## Parte 2
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.
%% Cell type:code id: tags:
``` python
defej2pt2(*args):
"""
Entrega la enésima fila
del triángulo de Pascal
de los números introducidos
"""
forxinargs:#loop por cada elemento introducido
x=int(x)#entrada enteras, en caso de ser decima solo considera parte entera
fila=[]
foriinrange(x):
fila.append(binomial(x-1,i))# fila vacía, se añaden los términos de combinatoria que corresponden
print(fila)
```
%% Cell type:markdown id: tags:
En el caso de querer conocer, por ejemplo, las filas 3, 6 y 9: