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
Iniciamos pidiendo al usuario una lista de palabras conectadas con guiones. (Esperamos que el usuario NO introduzca espacios en blanco).
Por ejemplo, puede ingresar: naranja-avión-melodía-tupla-avión
Para ello usamos el comando input()
, el cual permite pedir al usuario información a traves de la pantalla; esta informacion se guarda en una variable de tipo "string".
En nuestro caso llamamos a esta variable palabras
. A esta variable le agregamos un guion en el extremo derecho. El porque de esta accion se expondra mas adelante.
palabras=input("""Ingrese una lista de palabras separadas
por guiones sin dejar epacios;
se retornaran las palabras ordenadas
alfabeticamente y sin repeticiones
""")
# Le agrego un guion al final del string original(para que funcione el
# proceso que me invente)
palabras=palabras+"-"
# Creo la lista vacia que va a contener las palabras individuales
lista_de_palabras=[]
En la celda siguiente se ejecuta el proceso que permite extraer cada una de las palabras que el usuario ingresó, las cuales estan guardadas en UN solo string, que llamamos palabras
.
Creamos una variable nueva llamada contador. Antes del ciclo for
, esta variable es un string vacio.
Hacemos un ciclo for
que recorre la cadena de caracteres palabra
, y vamos guardando cada uno de estos caracteres en la variable contador
.
Cuando uno de los caracteres en palabra
coincide con un guion (-
), quiere decir que la variable contador
"tiene" la primera palabra.
Apendamos esta palabra a la lista lista_de_palabras
y reiniciamos la variable contador
a un caracter vacio; de manera que en la siguiente iteración del for
, esta variable empiece a guardar la segunda palabra.
contador=""
for x in palabras:
contador=contador+x
if x=="-":
lista_de_palabras.append(contador[:-1])
#Sin el [:-1] se añade la palabra con el guion delante
contador=""
# lista_de_palabras es una lista que contiene las palabras del string original.
print("Lista que contiene las palabras ingresadas sin guiones:")
print(lista_de_palabras)
Lista que contiene las palabras ingresadas sin guiones: ['naranja', 'avión', 'melodía', 'tupla', 'avión', 'naranja', 'avión', 'melodía', 'tupla', 'avión', 'naranja', 'avión', 'melodía', 'tupla', 'avión', 'naranja', 'avión', 'melodía', 'tupla', 'avión']
lista_de_palabras
a un conjunto que llamamos set_palabras_sin_repetir
; ya que este tipo de estructuras NO permiten la repeticion de elementos. set_palabras_sin_repetir=set(lista_de_palabras)
print("conjunto con las palabras ingresadas sin repetir")
print(set_palabras_sin_repetir)
conjunto con las palabras ingresadas sin repetir {'tupla', 'naranja', 'melodía', 'avión'}
La estructura de conjunto no nos permite hacer un ordenamiento alfabetico; para ello debemos volver a las listas, las cuales tienen el metodo .sort()
.
Creamos entonces una lista llamada lista_palabras_sin_repetir
, la cual contiene cada una de las palabras del string original, esta vez sin repeticiones. Luego aplicamos el metodo .sort()
a esta lista.
list_palabras_sin_repetir=list(set_palabras_sin_repetir)
print("lista de palabras ingresadas sin repetir")
print(list_palabras_sin_repetir)
print("")
# Ordenamos las palabras alfabeticamente
list_palabras_sin_repetir.sort()
print("lista de palabras ingresadas sin repetir, ordenadas alfabeticamente")
print(list_palabras_sin_repetir)
lista de palabras ingresadas sin repetir ['tupla', 'naranja', 'melodía', 'avión'] lista de palabras ingresadas sin repetir, ordenadas alfabeticamente ['avión', 'melodía', 'naranja', 'tupla']
Para retornar las palabras como se pide en el ejercico, las concatenamos usando un ciclo for
que recorre los elementos de la lista list_palabras_sin_repetir
.
Creamos una variable tipo strin llamada semi_final_string
, la cual empieza siendo un caracter vacio ""
.
En cada iteración del ciclo for
concatenamos las palabras de la lista list_palabras_sin_repetir
junto con un guion.
Finalmente, retornamos una variable tipo string que llamamos final_string
, la cual es contiene los elementos de la variable semi_final_string
desde la posición [1]
debido a que el proceso anteriormente descrito coloca un guion -
antes de guardar la primera palabra.
# Hacemos el string final uniendo los elementos de list_palabras_sin_repetir
semi_final_string=""
for a in list_palabras_sin_repetir:
semi_final_string=semi_final_string+"-"+a
# Me toca hacerlo asi porque el semi_final_string tiene un "-" en la posicion 0.
final_string=semi_final_string[1:]
print("""
A continuación se muestra un string de las palabras ingresadas,
sin repeticion, y ordenadas alfabeticamente, separadas por guiones
""")
print(" ")
print(final_string)
A continuación se muestra un string de las palabras ingresadas, sin repeticion, y ordenadas alfabeticamente, separadas por guiones avión-melodía-naranja-tupla