<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span> <span class="c1"># calculo cada uno de los coeficientes binomiales y lo almaceno en fila </span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'Error: el número ingresado no es entero'</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">n</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="c1"># sabemos que la primera fila es un 1</span>
" \"\"\"Prints the n-row of Pascal's triangle.\"\"\"\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",
...
...
@@ -134,6 +135,7 @@
"outputs": [],
"source": [
"def pascal2(n):\n",
" \"\"\"Prints the nth-row of Pascal's triangle.\"\"\"\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",
...
...
@@ -259,6 +261,7 @@
"outputs": [],
"source": [
"def multipascal(*args):\n",
" \"\"\"Returns a list with the arg1, arg2, arg3 th-row of Pascal's triangle.\"\"\"\n",
" nmax = max(*args)\n",
" rows = []\n",
" if not all(int(n) == n for n in args): # usando all() para verificar que todos los números sean enteros\n",
...
...
%% 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):
"""Prints the n-row of Pascal's triangle."""
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
La otra opción es construir el triángulo de pascal hasta la *n-ésima* fila e imprimirla.
%% Cell type:code id: tags:
``` python
defpascal2(n):
"""Prints the nth-row of Pascal's triangle."""
ifint(n)!=n:
print('Error: el número ingresado no es entero')
elifn==0:# sabemos que la primera fila es un 1
print('1')
else:
prow=(int(1))# guardando la primera fila, se usan tuplas para que sea inmutable
row=[]# lista donde se crearán las filas
foriinrange(1,n+1):# iterando sobre el número de filas
forkinrange(i+1):# segunda iteración (shame on me) para moverse en "columnas"
ifk==0ork==i:
row.append(int(1))# el primer y el último número es 1
else:
row.append(prow[k-1]+prow[k])# elementos interiores como suma de elementos de la fila anterior
prow=tuple(row)# re asigno la fila anterior (como una tupla) para la nueva iteración
frow=row# guardo la fila actual
row=[]# vacío la fila para volverla a llenar
print(''.join([str(number)+'\t'fornumberinfrow]))# imprimo los número separados por tab
```
%% Cell type:code id: tags:
``` python
pascal2(0)
```
%% Output
1
%% Cell type:code id: tags:
``` python
pascal2(1)
```
%% Output
1 1
%% Cell type:code id: tags:
``` python
pascal2(2)
```
%% Output
1 2 1
%% Cell type:code id: tags:
``` python
pascal2(3)
```
%% Output
1 3 3 1
%% Cell type:code id: tags:
``` python
pascal2(3.1)
```
%% Output
Error: el número ingresado no es entero
%% Cell type:markdown id: tags:
**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:markdown id: tags:
Para este caso la estrategia será buscar el número más alto de los brindados por el usuario y la estructura de la rutina es la misma, la única diferencia es que se guardan algunas de las filas intermedias.
%% Cell type:code id: tags:
``` python
defmultipascal(*args):
"""Returns a list with the arg1, arg2, arg3 th-row of Pascal's triangle."""
nmax=max(*args)
rows=[]
ifnotall(int(n)==nforninargs):# usando all() para verificar que todos los números sean enteros
print('Error: uno o más de los números ingresados no es entero')
elifnmax==0:# sabemos que la primera fila es un 1
rows.append([int(1)])
returnrows
else:
prow=(int(1))# guardando la primera fila, se usan tuplas para que sea inmutable
row=[]# lista donde se crearán las filas
foriinrange(1,nmax+1):# iterando sobre el número de filas
forkinrange(i+1):# segunda iteración (shame on me) para moverse en "columnas"
ifk==0ork==i:
row.append(int(1))# el primer y el último número es 1
else:
row.append(prow[k-1]+prow[k])# elementos interiores como suma de elementos de la fila anterior
prow=tuple(row)# re asigno la fila anterior (como una tupla) para la nueva iteración