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

Add first exercise

parent 405d62cc
No related branches found
No related tags found
No related merge requests found
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'
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