Skip to content
Snippets Groups Projects
Commit eab5e414 authored by Tatiana Acero Cuellar's avatar Tatiana Acero Cuellar
Browse files

solucion ej 1, 2

parent 405d62cc
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags:
# Tatiana Acero Cuellar
## Universidad Nacional de Colombia
### Ejercicios semana 2
%% Cell type:markdown id: tags:
# Ejercicio No. 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.
Ejemplo de entrada: naranja-avión-melodía-tupla-avión
<br>Salida esperada: avión-melodía-naranja-tupla
%% Cell type:code id: tags:
``` python
import unidecode
```
%% Cell type:code id: tags:
``` python
def lista_de_palabras(words_list):
'''
Definir una función que reciba una lista de palabras separada por guiones y retorne las palabras
únicas ordenadas alfabéticamente.
'''
# -- revisa el tipo de variable
# -- si es string separa de acuerdo al guion si es una entrada tipo lista, toma el elemento y separa el string
if type(words_list) == str:
words = words_list.split('-')
elif type(words_list) == list:
words = words_list[0].split('-')
# -- convierte a variable tipo conjunto para tener valores repetidos.
# -- acá estariamos haciendo caso omiso de palabras como avión y avion,
# -- estas se tomarian como palabras diferentes
unique_words = set(words)
# -- crear una lista auxiliar sin acento y en minuscula
unique_words_aux = [unidecode.unidecode(i.lower()) for i in unique_words]
# -- ordenada la lista sin acentos y en minuscula y la lista original se ordena siguiendo la otra
sorted_words_aux = sorted(zip(unique_words_aux,unique_words), key=lambda x: x[0])
# -- ordena la variable anterior, de tal manera que quede cada lista separada
sorted_words = list(zip(*sorted_words_aux))[1]
# -- une las palabras para que quede un string separado por guiones
new_words_list = '-'.join(sorted_words)
return new_words_list
```
%% Cell type:code id: tags:
``` python
print(lista_de_palabras('naranja-avión-melodía-tupla-avión-tupla'))
print(lista_de_palabras(['naranja-avión-melodía-tupla-avión-tupla']))
print(lista_de_palabras(['Z-X-A-O-r-t']))
print(lista_de_palabras(['AMOR-ZApato-hELicoptero-regular-ZIPOTLE']))
print(lista_de_palabras(['avión-aviones-papá-papa-país']))
```
%% Output
avión-melodía-naranja-tupla
avión-melodía-naranja-tupla
A-O-r-t-X-Z
AMOR-hELicoptero-regular-ZApato-ZIPOTLE
avión-aviones-país-papa-papá
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
# Tatiana Acero Cuellar
## Universidad Nacional de Colombia
### Ejercicios semana 2
%% Cell type:markdown id: tags:
# Ejercicio No. 2 - Triángulo de Pascal
* 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.
* 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
# -- importar librerias necesarias para calcular los valores de triángulo de pascal
import numpy as np
import math
```
%% Cell type:markdown id: tags:
## Función 1
Función que recibe un número n, comprueba si es entero y mayor a 0, retorna la n-ésima fila del triángulo de pascal
%% Cell type:code id: tags:
``` python
def triangulo_pascal(numero):
'''
Función que recibe un número n, comprueba si es entero y mayor a 0,
retorna la n-ésima fila del triángulo de pascal
'''
# -- comprueba si el numero es negativo
if numero <= 0:
return 'Numero negativo, ingrese número nuevamente'
# -- intenta determinar la fila de valores, sino lanza una excepción con mensaje
try:
# -- guarda cada fila del triángulo en una lista
values = []
for i in range(numero):
row = []
for j in range(i+1):
# -- los valores se pueden construir como una combinatoria de números
rel = np.math.factorial(i) / (np.math.factorial(j)*(np.math.factorial(i-j)))
# -- guarda el entero del valor de la combinatoria
row.append(int(rel))
# -- guarda los valores de la fila
values.append(row)
# -- imprime unicamente la último fila
return values[-1]
except:
return 'El numero ingresado no es correcto: error'
```
%% Cell type:code id: tags:
``` python
print('línea 10: {}'.format(triangulo_pascal(10)))
print('línea 10.1: {}'.format(triangulo_pascal(10.1)))
print('línea -1: {}'.format(triangulo_pascal(-1)))
print('línea 1: {}'.format(triangulo_pascal(1)))
print('línea 13: {}'.format(triangulo_pascal(13)))
```
%% Output
línea 10: [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
línea 10.1: El numero ingresado no es correcto: error
línea -1: Numero negativo, ingrese número nuevamente
línea 1: [1]
línea 13: [1, 12, 66, 220, 495, 792, 924, 792, 495, 220, 66, 12, 1]
%% Cell type:markdown id: tags:
## Función 2
Función que recibe n números y retorna los valores del triángulo de pascal correspondiente a cada línea dada por cada uno de esos n números.
%% Cell type:code id: tags:
``` python
# -- * para poder recibir n cantidad de entradas
def triangulo_pascal_lista(*numero):
'''
Función que recibe n números y retorna los valores del triángulo de pascal correspondiente a cada línea dada
por cada uno de esos n números.
'''
# -- para guardar la n fila de cada *numero
final_values = []
# -- iterar sobre cada argumento recibido
for num in numero:
try:
values = []
for i in range(num):
row = []
for j in range(i+1):
rel = np.math.factorial(i) / (np.math.factorial(j)*(np.math.factorial(i-j)))
row.append(int(rel))
values.append(row)
final_values.append(values[-1])
# -- si alguno de los argumentos arroja la excepción, llenar en la lista con el string 'error, revise número'
except:
final_values.append('error, revise número')
return final_values
```
%% Cell type:code id: tags:
``` python
# -- ejemplos con números positivos
print(triangulo_pascal_lista(3,4,10))
print('línea 3: {} \nlínea 4: {} \nlínea 10: {}'. format(triangulo_pascal_lista(3,4,10)[0],
triangulo_pascal_lista(3,4,10)[1],
triangulo_pascal_lista(3,4,10)[2]))
print()
# -- ejemplos con números positivos
print(triangulo_pascal_lista(1,2,3))
print('línea 1: {} \nlínea 2: {} \nlínea 3: {}'. format(triangulo_pascal_lista(1,2,3)[0],
triangulo_pascal_lista(1,2,3)[1],
triangulo_pascal_lista(1,2,3)[2]))
print()
# -- ejemplos con un número decimal
print(triangulo_pascal_lista(1.1,2,3))
print('línea 1.1: {} \nlínea 2: {} \nlínea 3: {}'. format(triangulo_pascal_lista(1.1,2,3)[0],
triangulo_pascal_lista(1.1,2,3)[1],
triangulo_pascal_lista(1.1,2,3)[2]))
print()
# -- ejemplos con un número decimal y uno negativo
print(triangulo_pascal_lista(1.1,-2,3))
print('línea 1.1: {} \nlínea -2: {} \nlínea 3: {}'. format(triangulo_pascal_lista(1.1,-2,3)[0],
triangulo_pascal_lista(1.1,-2,3)[1],
triangulo_pascal_lista(1.1,-2,3)[2]))
print()
# -- ejemplos con mas numeros
print(triangulo_pascal_lista(10,1,3,14))
print('línea 10: {} \nlínea 1: {} \nlínea 3: {} \nlínea 14: {}'. format(triangulo_pascal_lista(10,1,3,14)[0],
triangulo_pascal_lista(10,1,3,14)[1],
triangulo_pascal_lista(10,1,3,14)[2],
triangulo_pascal_lista(10,1,3,14)[3]))
```
%% Output
[[1, 2, 1], [1, 3, 3, 1], [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]]
línea 3: [1, 2, 1]
línea 4: [1, 3, 3, 1]
línea 10: [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
[[1], [1, 1], [1, 2, 1]]
línea 1: [1]
línea 2: [1, 1]
línea 3: [1, 2, 1]
['error, revise número', [1, 1], [1, 2, 1]]
línea 1.1: error, revise número
línea 2: [1, 1]
línea 3: [1, 2, 1]
['error, revise número', 'error, revise número', [1, 2, 1]]
línea 1.1: error, revise número
línea -2: error, revise número
línea 3: [1, 2, 1]
[[1, 9, 36, 84, 126, 126, 84, 36, 9, 1], [1], [1, 2, 1], [1, 13, 78, 286, 715, 1287, 1716, 1716, 1287, 715, 286, 78, 13, 1]]
línea 10: [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
línea 1: [1]
línea 3: [1, 2, 1]
línea 14: [1, 13, 78, 286, 715, 1287, 1716, 1716, 1287, 715, 286, 78, 13, 1]
%% Cell type:code id: tags:
``` python
```
This diff is collapsed.
This diff is collapsed.
%% Cell type:markdown id: tags:
# Tatiana Acero Cuellar
## Universidad Nacional de Colombia
### Ejercicios semana 2
%% Cell type:markdown id: tags:
# Ejercicio No. 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.
Ejemplo de entrada: naranja-avión-melodía-tupla-avión
<br>Salida esperada: avión-melodía-naranja-tupla
%% Cell type:code id: tags:
``` python
import unidecode
```
%% Cell type:code id: tags:
``` python
def lista_de_palabras(words_list):
'''
Definir una función que reciba una lista de palabras separada por guiones y retorne las palabras
únicas ordenadas alfabéticamente.
'''
# -- revisa el tipo de variable
# -- si es string separa de acuerdo al guion si es una entrada tipo lista, toma el elemento y separa el string
if type(words_list) == str:
words = words_list.split('-')
elif type(words_list) == list:
words = words_list[0].split('-')
# -- convierte a variable tipo conjunto para tener valores repetidos.
# -- acá estariamos haciendo caso omiso de palabras como avión y avion,
# -- estas se tomarian como palabras diferentes
unique_words = set(words)
# -- crear una lista auxiliar sin acento y en minuscula
unique_words_aux = [unidecode.unidecode(i.lower()) for i in unique_words]
# -- ordenada la lista sin acentos y en minuscula y la lista original se ordena siguiendo la otra
sorted_words_aux = sorted(zip(unique_words_aux,unique_words), key=lambda x: x[0])
# -- ordena la variable anterior, de tal manera que quede cada lista separada
sorted_words = list(zip(*sorted_words_aux))[1]
# -- une las palabras para que quede un string separado por guiones
new_words_list = '-'.join(sorted_words)
return new_words_list
```
%% Cell type:code id: tags:
``` python
print(lista_de_palabras('naranja-avión-melodía-tupla-avión-tupla'))
print(lista_de_palabras(['naranja-avión-melodía-tupla-avión-tupla']))
print(lista_de_palabras(['Z-X-A-O-r-t']))
print(lista_de_palabras(['AMOR-ZApato-hELicoptero-regular-ZIPOTLE']))
print(lista_de_palabras(['avión-aviones-papá-papa-país']))
```
%% Output
avión-melodía-naranja-tupla
avión-melodía-naranja-tupla
A-O-r-t-X-Z
AMOR-hELicoptero-regular-ZApato-ZIPOTLE
avión-aviones-país-papa-papá
%% Cell type:code id: tags:
``` python
```
This diff is collapsed.
%% Cell type:markdown id: tags:
# Tatiana Acero Cuellar
## Universidad Nacional de Colombia
### Ejercicios semana 2
%% Cell type:markdown id: tags:
# Ejercicio No. 2 - Triángulo de Pascal
* 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.
* 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
# -- importar librerias necesarias para calcular los valores de triángulo de pascal
import numpy as np
import math
```
%% Cell type:markdown id: tags:
## Función 1
Función que recibe un número n, comprueba si es entero y mayor a 0, retorna la n-ésima fila del triángulo de pascal
%% Cell type:code id: tags:
``` python
def triangulo_pascal(numero):
'''
Función que recibe un número n, comprueba si es entero y mayor a 0,
retorna la n-ésima fila del triángulo de pascal
'''
# -- comprueba si el numero es negativo
if numero <= 0:
return 'Numero negativo, ingrese número nuevamente'
# -- intenta determinar la fila de valores, sino lanza una excepción con mensaje
try:
# -- guarda cada fila del triángulo en una lista
values = []
for i in range(numero):
row = []
for j in range(i+1):
# -- los valores se pueden construir como una combinatoria de números
rel = np.math.factorial(i) / (np.math.factorial(j)*(np.math.factorial(i-j)))
# -- guarda el entero del valor de la combinatoria
row.append(int(rel))
# -- guarda los valores de la fila
values.append(row)
# -- imprime unicamente la último fila
return values[-1]
except:
return 'El numero ingresado no es correcto: error'
```
%% Cell type:code id: tags:
``` python
print('línea 10: {}'.format(triangulo_pascal(10)))
print('línea 10.1: {}'.format(triangulo_pascal(10.1)))
print('línea -1: {}'.format(triangulo_pascal(-1)))
print('línea 1: {}'.format(triangulo_pascal(1)))
print('línea 13: {}'.format(triangulo_pascal(13)))
```
%% Output
línea 10: [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
línea 10.1: El numero ingresado no es correcto: error
línea -1: Numero negativo, ingrese número nuevamente
línea 1: [1]
línea 13: [1, 12, 66, 220, 495, 792, 924, 792, 495, 220, 66, 12, 1]
%% Cell type:markdown id: tags:
## Función 2
Función que recibe n números y retorna los valores del triángulo de pascal correspondiente a cada línea dada por cada uno de esos n números.
%% Cell type:code id: tags:
``` python
# -- * para poder recibir n cantidad de entradas
def triangulo_pascal_lista(*numero):
'''
Función que recibe n números y retorna los valores del triángulo de pascal correspondiente a cada línea dada
por cada uno de esos n números.
'''
# -- para guardar la n fila de cada *numero
final_values = []
# -- iterar sobre cada argumento recibido
for num in numero:
try:
values = []
for i in range(num):
row = []
for j in range(i+1):
rel = np.math.factorial(i) / (np.math.factorial(j)*(np.math.factorial(i-j)))
row.append(int(rel))
values.append(row)
final_values.append(values[-1])
# -- si alguno de los argumentos arroja la excepción, llenar en la lista con el string 'error, revise número'
except:
final_values.append('error, revise número')
return final_values
```
%% Cell type:code id: tags:
``` python
# -- ejemplos con números positivos
print(triangulo_pascal_lista(3,4,10))
print('línea 3: {} \nlínea 4: {} \nlínea 10: {}'. format(triangulo_pascal_lista(3,4,10)[0],
triangulo_pascal_lista(3,4,10)[1],
triangulo_pascal_lista(3,4,10)[2]))
print()
# -- ejemplos con números positivos
print(triangulo_pascal_lista(1,2,3))
print('línea 1: {} \nlínea 2: {} \nlínea 3: {}'. format(triangulo_pascal_lista(1,2,3)[0],
triangulo_pascal_lista(1,2,3)[1],
triangulo_pascal_lista(1,2,3)[2]))
print()
# -- ejemplos con un número decimal
print(triangulo_pascal_lista(1.1,2,3))
print('línea 1.1: {} \nlínea 2: {} \nlínea 3: {}'. format(triangulo_pascal_lista(1.1,2,3)[0],
triangulo_pascal_lista(1.1,2,3)[1],
triangulo_pascal_lista(1.1,2,3)[2]))
print()
# -- ejemplos con un número decimal y uno negativo
print(triangulo_pascal_lista(1.1,-2,3))
print('línea 1.1: {} \nlínea -2: {} \nlínea 3: {}'. format(triangulo_pascal_lista(1.1,-2,3)[0],
triangulo_pascal_lista(1.1,-2,3)[1],
triangulo_pascal_lista(1.1,-2,3)[2]))
print()
# -- ejemplos con mas numeros
print(triangulo_pascal_lista(10,1,3,14))
print('línea 10: {} \nlínea 1: {} \nlínea 3: {} \nlínea 14: {}'. format(triangulo_pascal_lista(10,1,3,14)[0],
triangulo_pascal_lista(10,1,3,14)[1],
triangulo_pascal_lista(10,1,3,14)[2],
triangulo_pascal_lista(10,1,3,14)[3]))
```
%% Output
[[1, 2, 1], [1, 3, 3, 1], [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]]
línea 3: [1, 2, 1]
línea 4: [1, 3, 3, 1]
línea 10: [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
[[1], [1, 1], [1, 2, 1]]
línea 1: [1]
línea 2: [1, 1]
línea 3: [1, 2, 1]
['error, revise número', [1, 1], [1, 2, 1]]
línea 1.1: error, revise número
línea 2: [1, 1]
línea 3: [1, 2, 1]
['error, revise número', 'error, revise número', [1, 2, 1]]
línea 1.1: error, revise número
línea -2: error, revise número
línea 3: [1, 2, 1]
[[1, 9, 36, 84, 126, 126, 84, 36, 9, 1], [1], [1, 2, 1], [1, 13, 78, 286, 715, 1287, 1716, 1716, 1287, 715, 286, 78, 13, 1]]
línea 10: [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
línea 1: [1]
línea 3: [1, 2, 1]
línea 14: [1, 13, 78, 286, 715, 1287, 1716, 1716, 1287, 715, 286, 78, 13, 1]
%% Cell type:code id: tags:
``` python
```
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