Skip to content
Snippets Groups Projects
Commit 2db02449 authored by David Ramos Salamanca's avatar David Ramos Salamanca
Browse files

some final touches

parent 0ebf31be
Branches master
No related tags found
No related merge requests found
......@@ -14304,6 +14304,7 @@ $$ {n\choose k} = \frac{n!}{k!(n-k)!} .$$
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="CodeMirror cm-s-jupyter">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">pascal1</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Prints the n-row of Pascal&#39;s triangle.&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">n</span><span class="p">)</span><span class="o">==</span><span class="n">n</span><span class="p">:</span> <span class="c1"># reviso que el número sea entero</span>
<span class="n">row</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
<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>
......@@ -14441,6 +14442,7 @@ $$ {n\choose k} = \frac{n!}{k!(n-k)!} .$$
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="CodeMirror cm-s-jupyter">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">pascal2</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Prints the nth-row of Pascal&#39;s triangle.&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">n</span><span class="p">)</span> <span class="o">!=</span> <span class="n">n</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Error: el número ingresado no es entero&#39;</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>
......@@ -14659,6 +14661,7 @@ $$ {n\choose k} = \frac{n!}{k!(n-k)!} .$$
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
<div class="CodeMirror cm-s-jupyter">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">multipascal</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns a list with the arg1, arg2, arg3 th-row of Pascal&#39;s triangle.&quot;&quot;&quot;</span>
<span class="n">nmax</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
<span class="n">rows</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">n</span><span class="p">)</span> <span class="o">==</span> <span class="n">n</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">args</span><span class="p">):</span> <span class="c1"># usando all() para verificar que todos los números sean enteros</span>
......
%% 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
import numpy as np
```
%% Cell type:code id: tags:
``` python
def pascal1(n):
"""Prints the n-row of Pascal's triangle."""
if int(n)==n: # reviso que el número sea entero
row = ''
for i in range(n+1): # calculo cada uno de los coeficientes binomiales y lo almaceno en fila
row += str(int(np.math.factorial(n)/(np.math.factorial(i)*np.math.factorial(n-i)))) + '\t'
print(row)
else:
print('Error: el número ingresado no es entero')
```
%% Cell type:code id: tags:
``` python
pascal1(0)
```
%% Output
1
%% Cell type:code id: tags:
``` python
pascal1(4)
```
%% Output
1 4 6 4 1
%% Cell type:code id: tags:
``` python
pascal1(3.3)
```
%% Output
Error: el número ingresado no es entero
%% Cell type:markdown id: tags:
## Solución 2 (cody)
%% Cell type:markdown id: tags:
La otra opción es construir el triángulo de pascal hasta la *n-ésima* fila e imprimirla.
%% Cell type:code id: tags:
``` python
def pascal2(n):
"""Prints the nth-row of Pascal's triangle."""
if int(n) != n:
print('Error: el número ingresado no es entero')
elif n == 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
for i in range(1,n+1): # iterando sobre el número de filas
for k in range(i+1): # segunda iteración (shame on me) para moverse en "columnas"
if k == 0 or k == 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' for number in frow])) # 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
def multipascal(*args):
"""Returns a list with the arg1, arg2, arg3 th-row of Pascal's triangle."""
nmax = max(*args)
rows = []
if not all(int(n) == n for n in args): # 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')
elif nmax == 0: # sabemos que la primera fila es un 1
rows.append([int(1)])
return rows
else:
prow = (int(1)) # guardando la primera fila, se usan tuplas para que sea inmutable
row =[] # lista donde se crearán las filas
for i in range(1,nmax+1): # iterando sobre el número de filas
for k in range(i+1): # segunda iteración (shame on me) para moverse en "columnas"
if k == 0 or k == 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
rows.append(row) # guardo la fila actual
row = [] # vacío la fila para volverla a llenar
return rows
```
%% Cell type:code id: tags:
``` python
multipascal(1,2,3,4)
```
%% Output
[[1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]
%% Cell type:code id: tags:
``` python
multipascal(1,2,3,4.1)
```
%% Output
Error: uno o más de los números ingresados no es entero
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment