Skip to content
Snippets Groups Projects
Commit 8649262d authored by Alfonso De Jesus Navas Gomez's avatar Alfonso De Jesus Navas Gomez
Browse files

Tarea terminada

parent 405d62cc
No related branches found
No related tags found
No related merge requests found
.ipynb_checkpoints/
source diff could not be displayed: it is too large. Options to address this: view the blob.
%% Cell type:markdown id: tags:
## Ejercicio No. 1 - Lista de palabras
%% Cell type:markdown id: tags:
Soy Alfonso Navas (**@navasa**) y en este cuaderno presentaré mi solución para el **ejercicio No. 1 - Lista de palabras.**
%% Cell type:markdown id: tags:
En este ejercicio, se pretende escribir programa que acepta una lista de palabras separadas por guiones e imprime de vuelta las mismas palabras, sin repetición, nuevamente separadas por guiones y ordenadas alfabéticamente.
%% Cell type:markdown id: tags:
Utilizando la función `input()`, se le solicita al usuario que ingrese una secuencia de palabras separadas por guiones.
%% Cell type:code id: tags:
``` python
sec_in = input('Por favor, ingrese una secuencia de palabras separadas por guiones: ')
```
%% Output
Por favor, ingrese una secuencia de palabras separadas por guiones: naranja-avión-melodía-tupla-avión
%% Cell type:markdown id: tags:
Usando el método `split()`, obtenemos una lista que contiene las palabras ingresadas.
%% Cell type:code id: tags:
``` python
lista_in = sec_in.split('-')
print(lista_in)
```
%% Output
['naranja', 'avión', 'melodía', 'tupla', 'avión']
%% Cell type:markdown id: tags:
Convirtiendo una lista ( `list` ) en un conjunto ( `set` ) eliminamos las palabras repetidas.
%% Cell type:code id: tags:
``` python
set_in = set(lista_in)
print(set_in)
```
%% Output
{'avión', 'melodía', 'tupla', 'naranja'}
%% Cell type:markdown id: tags:
Usando la función `sorted()` ordenamos alfabéticamente las palabras del conjunto.
%% Cell type:code id: tags:
``` python
lista_out = sorted(set_in)
print(lista_out)
```
%% Output
['avión', 'melodía', 'naranja', 'tupla']
%% Cell type:code id: tags:
``` python
#Nótese que la función sorted() nos arroja una lista y no un conjuto
print(type(lista_out))
```
%% Output
<class 'list'>
%% Cell type:markdown id: tags:
Por último, escribimos e imprimimos la secuencia de salida a partir de `lista_out`.
%% Cell type:code id: tags:
``` python
#Escribimos la primera palabra en nuestra secuencia de salida
sec_out = lista_out[0]
#Creamos esta variable para adicionar las palabras que hacen falta
n = len(lista_out) - 1
#Usando un ciclo sencillo adicionamos las demás palabras separadas por guiones
for i in range(n):
sec_out += '-' + lista_out[i+1]
#Imprimimos la secuencia de palabras sin repetición ordenadas alfabéticamente
print(sec_out)
```
%% Output
avión-melodía-naranja-tupla
source diff could not be displayed: it is too large. Options to address this: view the blob.
%% Cell type:markdown id: tags:
## Ejercicio No. 2 - Triángulo de Pascal
%% Cell type:markdown id: tags:
Soy Alfonso Navas (**@navasa**) y en este cuaderno presentaré mi solución para el **ejercicio No. 2 - Triángulo de Pascal.**
%% Cell type:markdown id: tags:
Este ejercicio consta de 2 incisos, pero en vez de enfrentarlos directamente primero definiremos algunas funciones que nos serán de utilidad.
%% Cell type:markdown id: tags:
### Pasos preliminares:
%% Cell type:markdown id: tags:
Creamos la función `factorial()`, la cual recibe como argumento un número entero y devuelve su factorial.
%% Cell type:code id: tags:
``` python
def factorial(n = 1):
if (n <= 1):
return 1
else:
return n * factorial(n-1) # hacemos uso de la recursividad para calcular el factorial de un número
```
%% Cell type:code id: tags:
``` python
print(factorial(5)) # comprobando que nuestra función funciona bien, 5! = 120
```
%% Output
120
%% Cell type:markdown id: tags:
Usando la función `factorial()`, creamos la función `combinatorio()`, la cual, a partir de dos argumentos *n* y *k*, calcula *nCk*.
%% Cell type:code id: tags:
``` python
def combinatorio (n=1, k =0):
combinatorio = factorial(n)/(factorial(k)*factorial(n - k))
return int(combinatorio)
```
%% Cell type:code id: tags:
``` python
print(combinatorio(5,3)) # comprobando que nuestra función funciona bien, 5C3 = 10
```
%% Output
10
%% Cell type:markdown id: tags:
### Primer problema
%% Cell type:markdown id: tags:
Se pretende escribir una rutina que acepta como entrada un número entero *n* y devuelve la *n*-ésima fila del triángulo de Pascal.
%% Cell type:markdown id: tags:
Utilizando la función `input()`, se le solicita al usuario que ingrese un número entero positivo. Adicionalmente, se verificamos que *n* es entero positivo, en caso contrario se imprime un mensaje de error.
%% Cell type:code id: tags:
``` python
n = input('Por favor, ingrese un numero entero postivo: ')
try:
n = int(n)
except:
print('¡Error! Por favor, intente ingresando un número entero positivo')
if (isinstance(n, int) and n <= 0):
print('¡Error! Por favor, intente ingresando un número entero positivo')
```
%% Output
Por favor, ingrese un numero entero postivo: 5
%% Cell type:markdown id: tags:
Usando la función `combinatorio()`podemos generar un en una lista con los elementos de la *n*-ésima fila del triángulo de Pascal.
%% Cell type:code id: tags:
``` python
fila_pascal = []
for k in range(n):
numero = combinatorio(n - 1, k)
fila_pascal.append(numero)
print(fila_pascal)
```
%% Output
[1, 4, 6, 4, 1]
%% Cell type:markdown id: tags:
En este caso es conveniente escribir una función que sintetice esta rutina, considerando que nos será de utilidad para el punto siguiente. Esta función recibe como argumento un número entero positivo *n* y regresa los números en la *n*-ésima fila del triángulo de Pascal. En caso de que lo que se ingrese no sea un número entero postivo, la función regresará un mensaje de error.
%% Cell type:code id: tags:
``` python
def fun_pascal(n = 1):
if (isinstance(n, int) and n > 0):
fila_pascal = []
for k in range(n):
numero = combinatorio(n - 1, k)
fila_pascal.append(numero)
return fila_pascal
return '¡Error! Por favor, intente ingresando un número entero positivo'
```
%% Cell type:code id: tags:
``` python
print(fun_pascal(-5)) # comprobando que nuestra función funciona bien
print(fun_pascal(5.1))
print(fun_pascal('julio'))
print(fun_pascal(5))
```
%% Output
¡Error! Por favor, intente ingresando un número entero positivo
¡Error! Por favor, intente ingresando un número entero positivo
¡Error! Por favor, intente ingresando un número entero positivo
[1, 4, 6, 4, 1]
%% Cell type:markdown id: tags:
### Segundo problema
%% Cell type:markdown id: tags:
En esta parte modificaremos la rutina anterior y crearemos una función que reciba un número variable de argumentos: *n1*, *n2*, *n3*, ... y retone una lista cuyo primer elemento es una lista conteniendo los número en la fila 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
def fun_pascalX(*args):
lista = []
for n in args:
lista.append(fun_pascal(n)) #usamos la función definida en el paso 5
return lista
```
%% Cell type:code id: tags:
``` python
print(fun_pascalX(-5)) # comprobando que nuestra función funciona bien
print(fun_pascalX(5.1))
print(fun_pascalX('julio'))
print(fun_pascalX(5, 'a'))
```
%% Output
['¡Error! Por favor, intente ingresando un número entero positivo']
['¡Error! Por favor, intente ingresando un número entero positivo']
['¡Error! Por favor, intente ingresando un número entero positivo']
[[1, 4, 6, 4, 1], '¡Error! Por favor, intente ingresando un número entero positivo']
%% Cell type:code id: tags:
``` python
l = fun_pascalX(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
print(l[0])
print(l[1])
print(l[2])
print(l[3])
print(l[4])
print(l[5])
print(l[6])
print(l[7])
print(l[8])
print(l[9])
print(l[10])
```
%% Output
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
[1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1]
source diff could not be displayed: it is too large. Options to address this: view the blob.
%% Cell type:markdown id: tags:
## Ejercicio No. 3 - Amigos congeros
%% Cell type:markdown id: tags:
Soy Alfonso Navas (**@navasa**) y en este cuaderno presentaré mi solución para el **ejercicio No. 3 - Amigos congueros.**
%% Cell type:markdown id: tags:
Creamos un diccionario para cada persona.
%% Cell type:code id: tags:
``` python
acerot = {
'nombre' : 'Tatiana',
'apellido' : 'Cuellar',
'país' : 'Colombia',
'residencia' : 'Bogotá',
'edad' : 23,
'institución' : 'UNAL',
'hobbie' : 'Anime'
}
andreatugores = {
'nombre' : 'Andrea',
'apellido' : 'Tugores',
'país' : 'Venezuela',
'residencia' : 'Caracas',
'edad' : 24,
'institución' : 'UCV',
'hobbie' : 'Tennis'
}
bermudezj = {
'nombre' : 'Jesús',
'apellido' : 'Bermudez',
'país' : 'Colombia',
'residencia' : 'Bogotá',
'edad' : 25,
'institución' : 'UNAL',
'hobbie' : 'Senderismo'
}
carrilloj = {
'nombre' : 'Juan',
'apellido' : 'Carrillo',
'país' : 'Colombia',
'residencia' : 'Bogotá',
'edad' : 25,
'institución' : 'UNAL',
'hobbie' : 'Baloncesto'
}
floreza = {
'nombre' : 'Andrés',
'apellido' : 'Flórez',
'país' : 'Colombia',
'residencia' : 'Cali',
'edad' : 22,
'institución' : 'Univalle',
'hobbie' : 'Movement Culture'
}
ramosm = {
'nombre' : 'María',
'apellido' : 'Ramos',
'país' : 'Venezuela',
'residencia' : 'Mérida',
'edad' : 23,
'institución' : 'ULA',
'hobbie' : 'Escribir'
}
hernandezj = {
'nombre' : 'Juan',
'apellido' : 'Hernandez',
'país' : 'Colombia',
'residencia' : 'Bogotá',
'edad' : 24,
'institución' : 'UNAL',
'hobbie' : 'Lectura'
}
vivasm = {
'nombre' : 'Mariana',
'apellido' : 'Vivas',
'país' : 'Venezuela',
'residencia' : 'Caracas',
'edad' : 23,
'institución' : 'UCV',
'hobbie' : 'Ballet'
}
martinezj = {
'nombre' : 'Jocabed',
'apellido' : 'Martinez',
'país' : 'Venezuela',
'residencia' : 'Caracas',
'edad' : 22,
'institución' : 'UCV',
'hobbie' : 'Música'
}
ramosd = {
'nombre' : 'David',
'apellido' : 'Ramos',
'país' : 'Colombia',
'residencia' : 'Bucaramanga',
'edad' : 24,
'institución' : 'UIS',
'hobbie' : 'Guitarra'
}
arturos = {
'nombre' : 'Arturo',
'apellido' : 'Sanchez',
'país' : 'Venezuela',
'residencia' : 'Ginebra',
'edad' : 34,
'institución' : 'LAPP',
'hobbie' : 'Ciclismo'
}
juan_pineda = {
'nombre' : 'Juan',
'apellido' : 'Basto',
'país' : 'Colombia',
'residencia' : 'Bucaramanga',
'edad' : 37,
'institución' : 'UIS',
'hobbie' : 'Divulgación científica'
}
```
%% Cell type:markdown id: tags:
Creamos el diccionario `compas`, el cual contiene como elementos a todos los diccionarios creados en la primera parte, donde la llave de cada uno está determinada por el usuario de mattermost de la persona a la cual corresponden.
%% Cell type:code id: tags:
``` python
compas = {
'acerot' : acerot,
'andreatugores' : andreatugores,
'bermudezj' : bermudezj,
'carrilloj' : carrilloj,
'floreza' : floreza,
'ramosm' : ramosm,
'hernandezj' : hernandezj,
'vivasm' : vivasm,
'martinezj' : martinezj,
'ramosd' : ramosd,
'arturos' : arturos,
'juan-pineda' : juan_pineda
}
```
%% Cell type:markdown id: tags:
Ahora, creamos una función que reciba como entrada el diccionario `compas` y un país de origen, y retorne las informaciones completas de todas las personas de ese país trabuladas en una forma fácil de entender.
%% Cell type:code id: tags:
``` python
def informacion_pais(diccionario, pais):
# Imprimimos el encabezado de nuestra tabla
print('{:^15}{:^15}{:^15}{:^15}{:^15}{:^15}{:^18}'.format('Nombre', 'Apellido', 'País', 'Residencia', 'Edad',
'Institución', 'Hobbie'))
for i in diccionario:
usuario = diccionario[i]
if (usuario['país'] == pais): #Para cada usuario, verificamos si su pais corresponde al del argumento
# Si es así, imprimimos los datos del usuario en formato de tabla
print('{:^15}{:^15}{:^15}{:^15}{:^15}{:^15}{:^18}'.format(usuario['nombre'], usuario['apellido'],
usuario['país'], usuario['residencia'],
usuario['edad'], usuario['institución'],
usuario['hobbie']))
```
%% Cell type:code id: tags:
``` python
informacion_pais(compas, 'Venezuela')
```
%% Output
Nombre Apellido País Residencia Edad Institución Hobbie
Andrea Tugores Venezuela Caracas 24 UCV Tennis
María Ramos Venezuela Mérida 23 ULA Escribir
Mariana Vivas Venezuela Caracas 23 UCV Ballet
Jocabed Martinez Venezuela Caracas 22 UCV Música
Arturo Sanchez Venezuela Ginebra 34 LAPP Ciclismo
%% Cell type:code id: tags:
``` python
informacion_pais(compas, 'Colombia')
```
%% Output
Nombre Apellido País Residencia Edad Institución Hobbie
Tatiana Cuellar Colombia Bogotá 23 UNAL Anime
Jesús Bermudez Colombia Bogotá 25 UNAL Senderismo
Juan Carrillo Colombia Bogotá 25 UNAL Baloncesto
Andrés Flórez Colombia Cali 22 Univalle Movement Culture
Juan Hernandez Colombia Bogotá 24 UNAL Lectura
David Ramos Colombia Bucaramanga 24 UIS Guitarra
Juan Basto Colombia Bucaramanga 37 UIS Divulgación científica
%% Cell type:markdown id: tags:
En este punto, calulamos el promedio de todas las edades de las personas en el diccionario `compas`.
%% Cell type:code id: tags:
``` python
diccionario = compas
# Iniciamos una lista para almacenar las edades de los miembros del diccionario compas
edades = []
for i in diccionario:
usuario = diccionario[i]
edades.append(usuario['edad'])
# A partir de la lista creada, calculamos el promedio
promedio = sum(edades)/len(edades)
promedio = round(promedio, 2)
# Imprimimos el resultado
print ('el promedio de edad es ' + str(promedio))
```
%% Output
el promedio de edad es 25.5
%% Cell type:markdown id: tags:
Por último, mostramos las instituciones de las personas en el diccionario `compas` (sin repetición).
%% Cell type:code id: tags:
``` python
diccionario = compas
# En este string guardaremos los nombres
nombres = ''
for i in diccionario:
usuario = diccionario[i]
institucion = usuario['institución']
if not(institucion in nombres): #Si un nombre no se encuentra en el string nombres, lo adicionamos
nombres += institucion + ' '
print('Los nombres de las instituciones de los integrantes del diccionario compas son: ' + nombres)
```
%% Output
Los nombres de las instituciones de los integrantes del diccionario compas son: UNAL UCV Univalle ULA UIS LAPP
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