Skip to content
Snippets Groups Projects
Commit 2c056227 authored by Mariana Vivas's avatar Mariana Vivas
Browse files

Agregando tarea 2 - ipynb y html

parent f9347133
Branches master
No related tags found
No related merge requests found
.ipynb_checkpoints/
This diff is collapsed.
%% Cell type:markdown id: tags:
### Identificación
Usuario: vivasm.
Nombre: Mariana Vivas.
Institución: Universidad Central de Venezuela.
%% Cell type:markdown id: tags:
# Ejercicio 1 - Lista de palabras
Escriba un programa en python que acepte una lista de palabras separadas por guiones, e imprima de vuelta las mismas palabras, sin repetición y nuevamente separadas por guiones, después de ordenarlas alfabéticamente.
%% Cell type:markdown id: tags:
## Solución
Primero definimos las variables a utilizar:
%% Cell type:code id: tags:
``` python
#En 'text' estará la entrada del usuario
text=input('Inserte una lista de palabras separadas por guiones (ej. manzana-pera-piña-aguacate-manzana): ')
index = 0
lastindex=0
lista=[]
```
%% Output
Inserte una lista de palabras separadas por guiones (ej. manzana-pera-piña-aguacate-manzana): manzana-pera-piña-aguacate-manzana
%% Cell type:markdown id: tags:
Revisamos que se esté guardando el texto en la variable 'text' y que sea del tipo 'str':
%% Cell type:code id: tags:
``` python
print('{} es de tipo {}'.format(text,type(text)))
```
%% Output
manzana-pera-piña-aguacate-manzana es de tipo <class 'str'>
%% Cell type:markdown id: tags:
Vamos a almacenar las palabra en la variable 'lista' que es tipo lista. Por lo tanto, necesitamos hallar donde empieza y termina cada palabra, de manera que podamos extraerla:
%% Cell type:code id: tags:
``` python
while index < len(text):
index = text.find('-', index) #En la variable index almacenamos la posición de los guiones
if index == -1: #Si no encuentra guiones
#Inserta la última palabra a la lista
lista.append(text[lastindex:])
break
#Inserta en la lista la palabra entre dos guiones
lista.append(text[lastindex:index])
#Aumentamos el indice para que empiece el loop despues del último guión que consiguió
index += len('-')
#Guardamos el último indice hallado
lastindex=index
```
%% Cell type:markdown id: tags:
Revisamos que estemos obteniendo en la lista las palabras que se encuentran el la variable 'text':
%% Cell type:code id: tags:
``` python
print(lista)
```
%% Output
['manzana', 'pera', 'piña', 'aguacate', 'manzana']
%% Cell type:markdown id: tags:
Queremos la salida tipo 'str', ordenada por orden alfabético y sin repetición de palabras, por lo tanto:
%% Cell type:code id: tags:
``` python
#si convertimos la lista en un set, las entradas iguales se eliminan
duplicados=set(lista)
#convertimos el set en lista nuevamente y lo ordenamos por orden alfabético con .sort()
lista=list(duplicados)
lista.sort()
#imprimimos la lista de palabras separada por guiones
print('lista de entrada: {}'.format(text))
print('lista de salida: {}'.format('-'.join(lista)))
```
%% Output
lista de entrada: manzana-pera-piña-aguacate-manzana
lista de salida: aguacate-manzana-pera-piña
This diff is collapsed.
%% Cell type:markdown id: tags:
### Identificación
Usuario: vivasm.
Nombre: Mariana Vivas.
Institución: Universidad Central de Venezuela.
%% Cell type:markdown id: tags:
# Ejercicio 2 - Triángulo de Pascal
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úmero
n es entero, o arrojar un mensaje informando que ha habido un error del usuario en caso
contrario.
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:markdown id: tags:
## Solución
1. Para calcular la enésima fila del triángulo de Pascal:
[![Pascal](https://wikimedia.org/api/rest_v1/media/math/render/svg/23050fcb53d6083d9e42043bebf2863fa9746043)](https://en.wikipedia.org/wiki/Pascal%27s_triangle)
utilizaremos que se puede escribir con los coeficientes binomiales
[![Pascalbinomial](https://wikimedia.org/api/rest_v1/media/math/render/svg/1d13b3b68bb6bdda6b7b21001f5e40a84f46db5d)](https://en.wikipedia.org/wiki/Pascal%27s_triangle)
Donde:
$${n\choose k}=\frac{n!}{k!(n-k)!}$$
Por lo tanto, para calcular, por ejemplo, la tercera ($n=3$) fila del triangulo de Pascal, tenemos que calcular:
$$
\begin{align}
{3\choose 0} && {3\choose 1} && {3\choose 2} && {3\choose 3}
\end{align}
$$
%% Cell type:code id: tags:
``` python
# Importamos la librería 'math' para utilizar la función 'factorial'
import math
# Definimos una función que calcule el coeficiente binomial:
def nCk(n,k):
return int(math.factorial(n)/(math.factorial(k)*math.factorial(n-k)))
```
%% Cell type:markdown id: tags:
Comprobamos que la función de el valor correcto de la combinatoria
%% Cell type:code id: tags:
``` python
nCk(5,2)
```
%% Cell type:markdown id: tags:
Definimos la función que calcule los valores de la combinatoria para la n-ésima fila:
%% Cell type:code id: tags:
``` python
def fila(n):
fila=[] #para guardar la fila
#nos aseguramos que se haya insertado un número entero
try:
value = int(n)
#calculamos los valores de las combinatorias
for ii in range(value):
fila.append(nCk(value-1,ii)) #value-1 porque la primera fila es la combinatoria de {0,0}
#imprimimos los números separados por espacios
print(' '.join(str(jj) for jj in fila))
except:
print("Debe ser un número entero")
```
%% Cell type:markdown id: tags:
Comprobamos que la función arroja los valores deseados:
%% Cell type:code id: tags:
``` python
value=input('Inserte el número de fila: ') #el número insertado por el usuario
fila(value)
```
%% Output
Inserte el número de fila: 4
1 3 3 1
%% Cell type:markdown id: tags:
Comprobamos que si se inserta algo distinto a un numero entero la función arroja el mensaje esperado:
%% Cell type:code id: tags:
``` python
value=input('Inserte el número de fila: ') #el número insertado por el usuario
fila(value)
```
%% Output
Inserte el número de fila: hola
Debe ser un número entero
%% Cell type:markdown id: tags:
2. Para que el usuarion inserte las filas que desea del triángulo de Pascal, utilizaremos expresiones regulares:
%% Cell type:code id: tags:
``` python
import re
val=input('Inserte las filas del triangulo de pascal que desea (ej: 2,3,5): ')
lista=[int(s) for s in re.findall(r'\b\d+\b', val)]
#\b es el principio o final de la palabra
#\d+ entero de uno o más dígitos
```
%% Output
Inserte las filas del triangulo de pascal que desea (ej: 2,3,5): 2,4,5,hola,8
%% Cell type:markdown id: tags:
Nos aseguramos que la variable 'lista' contiene los números de tipo 'int' insertados por el usuario:
%% Cell type:code id: tags:
``` python
print('{} tiene entradas de tipo {}'.format(lista,[type(item) for item in lista]))
```
%% Output
[2, 4, 5, 8] tiene entradas de tipo [<class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>]
%% Cell type:markdown id: tags:
Utilizamos el código del item 1 y lo convertimos en una función que devuelva la fila del valor insertado:
%% Cell type:code id: tags:
``` python
def pascalfila(n):
fila=[] #guardamos los valores de la fila
for ii in range(n):
fila.append(nCk(n-1,ii)) #insertamos los valores de las combinatorias en la lista
return(fila)
```
%% Cell type:markdown id: tags:
Utilizamos esta función con un loop para obtener una lista de listas:
%% Cell type:code id: tags:
``` python
final=[] #la lista de las filas
for ii in lista:
final.append(pascalfila(ii)) #insertamos la lista de los valores de cada fila
print(final)
```
%% Output
[[1, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 7, 21, 35, 35, 21, 7, 1]]
This diff is collapsed.
This diff is collapsed.
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