Commit 53f6b0dc authored by David Ramos Salamanca's avatar David Ramos Salamanca
Browse files

Add first exercise

parent 405d62cc
This diff is collapsed.
%% Cell type:markdown id: tags:
# David Ramos - UIS
%% Cell type:markdown id: tags:
## Problema: Lista de palabras
%% Cell type:markdown id: tags:
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
**Salida esperada:** avión-melodía-naranja-tupla
%% Cell type:markdown id: tags:
## Solución
%% Cell type:markdown id: tags:
Primero se adquieren las palabras
%% Cell type:code id: tags:
``` python
disordered_words = input('Escriba una lista de palabras separadas or guíones: ') # input() convierte todo input a string
```
%% Output
Escriba una lista de palabras separadas or guíones: ola-hola-ala
%% Cell type:code id: tags:
``` python
disordered_words
```
%% Output
'ola-hola-ala'
%% Cell type:markdown id: tags:
La estrategia es crear una lista de palabras a partir del string. La cual que se puede organizar fácilmente con métodos de las listas para luego devolver como un solo string.
%% Cell type:markdown id: tags:
Para crear la lista de palabras se irán añadiendo los caracteres del string en una variable hasta encontrar un guión, en cuyo caso se agrega el contenido de la variable a una lista y se resetea la variable donde se guardan los caracteres para almacenar la siguiente palabra.
%% Cell type:code id: tags:
``` python
mywords = [] # en esta lista se almacenarán las palabras
word = '' # string vacío para almacenar los caracteres de cada palabra
for char in disordered_words: # iterando sobre los caracteres del string
if char != '-': # si el caracter no es - se añade a la palabra
word += char
else: # si el caracter es -, se añade la palabra a la lista y vacía la palabra
mywords.append(word)
word = ''
mywords.append(word) # añadiendo la última palabra
```
%% Cell type:code id: tags:
``` python
mywords
```
%% Output
['ola', 'hola', 'ala']
%% Cell type:markdown id: tags:
Usando los conjuntos se eliminan duplicados y luego se organiza usando *sorted()*
%% Cell type:code id: tags:
``` python
sorted(list(set(mywords))) #se orgniza alfabéticamente y eliminan repeticiones
```
%% Output
['ala', 'hola', 'ola']
%% Cell type:code id: tags:
``` python
mywords
```
%% Output
['ola', 'hola', 'ala']
%% Cell type:markdown id: tags:
Finalmente se usa la función *join()* de python para unir en un string las palabras. La lista que se unió fue una en la cual todas las palabras finalizan con un guión excepto la última.
%% Cell type:code id: tags:
``` python
ordered_words = ''.join([word + '-' for word in mywords])[:-1]
```
%% Cell type:code id: tags:
``` python
ordered_words
```
%% Output
'ola-hola-ala'
%% Cell type:markdown id: tags:
Organizando todo en una función
%% Cell type:code id: tags:
``` python
def word_orderer(disordered_words):
"""Sort alphabetically a string with a list of words separated by a hyphen eliminating repetitions."""
mywords = [] # en esta lista se almacenarán las palabras
word = '' # string vacío para almacenar los caracteres de cada palabra
for char in disordered_words: # iterando sobre los caracteres del string
if char != '-': # si el caracter no es - se añade a la palabra
word += char
else: # si el caracter es -, se añade la palabra a la lista y vacía la palabra
mywords.append(word)
word = ''
mywords.append(word) # añadiendo la última palabra
mywords = sorted(list(set(mywords))) # se organiza alfabéticamente y eliminan repeticiones
return ''.join([word + '-' for word in mywords])[:-1]
```
%% Cell type:code id: tags:
``` python
word_orderer('naranja-avión-melodía-tupla-avión')
```
%% Output
'avión-melodía-naranja-tupla'
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment