Creemos un programa completo que nos permita crear listas ordenadas de "strings". Para crear el programa debemos empezar escribiendo una función que reciba por parámetro una lista de "strings" que se encuentra ordenada y una cadena para que se inserte dentro de la lista de tal forma que se mantenga la lista ordenada. La función, finalmente, debe retornar la lista modificada. Luego, debemos crear el programa principal en el cual se crea una lista vacía y, posteriormente, vaya pidiendo al usuario una secuencia de "strings" para irlos añadiendo a la lista usando la función que creamos anteriormente. El programa debe terminar en el momento en que el usuario teclee la palabra "terminar". Veamos un ejemplo para entender la estrategia a seguir en la solución antes de pasar al código. Supongamos que tenemos la lista ordenada con nombres de países que vemos en pantalla. Ahora, queremos agregar a Brasil a la lista. ¿Cómo sabemos dónde ubicarlo? Si lo hacemos a simple vista, notaremos que por orden alfabético quedaría entre Argentina y Chile. Sin embargo, tenemos que hacer que nuestro código sea capaz de reconocer esto. Así que, vamos a hacer uso de los operadores de comparación que vimos en el módulo pasado. Empecemos comparando el elemento "agregar" con los demás, empezando por el primero de la lista que sería Alemania. Según lo que vimos de los comparadores, la cadena Brasil es mayor que Alemania. Lo mismo pasará con el caso de Argentina, pero al momento en que comparamos Brasil con Chile vemos que Chile es mayor. Esto significa que Brasil debe ubicarse antes de Chile. Si generalizamos este caso, vemos que para encontrar el lugar en que debe ubicarse la cadena "insertar" debemos recorrer la lista hasta encontrar una cadena mayor a esta. En otras palabras, mientras la cadena "insertar" sea mayor a las cadenas de la lista contra las que vamos comparando. Pasemos a Spyder y veamos, ahora sí, la implementación. Como ya dijimos, la función recibe por parámetro una lista que sabemos está ordenada y la cadena que vamos a insertar. Tenemos también una variable "i", que usaremos como índice del recorrido que haremos con un "while" para poder parar en el momento que determinamos que debemos ubicar la cadena. Según lo que vimos en la estrategia de solución, nos queda: "while" "i" menor que la longitud de nuestra lista ordenada "and" cadena sea mayor que la lista ordenada en la posición "i". Para recorrer, mientras sigamos dentro de la lista y la cadena "insertar" siga haciendo mayor a las de la lista. En ese caso, simplemente avanzamos con "i" más igual uno. El ciclo anterior nos llevará hasta la posición en que se puede agregar la cadena, manteniendo ordenada la lista. Nos queda insertarla, para lo cual podemos usar el método "insert" y nos queda: lista ordenada punto "insert" en la posición "i" nuestra cadena. Finalmente, retornamos: "return" lista ordenada. Y hemos terminado la función, ahora, con el programa principal. Ya he creado la lista vacía y solicitado al usuario la primera palabra. Nos queda ahora implementar el ciclo para seguir pidiendo, palabras, hasta que se ingrese la cadena "terminar". Así que, podemos poner: "while" palabra sea diferente de "terminar". Lo que haremos será: "insertar ordenado", dando como parámetro nuestra lista y la palabra ingresada y después nuevamente pedir la palabra que tomaré de lo que ya teníamos. Nos queda hacer un "print" para ver el resultado de las inserciones, que nos quedaría simplemente "print lista". Ejecutemos y probemos con los países que teníamos en el ejemplo, en cualquier orden. Ejecutamos e iniciamos con las cadenas. Por ejemplo: Colombia, seguido de Italia, sigamos con Alemania, Francia, Suiza, Brasil, Chile, Dinamarca y Argentina. Ahora, damos "terminar" y vemos que la lista ahora sí se ve en orden alfabético. Veamos ahora el último requerimiento. En este debemos implementar una función que reciba una lista desordenada de "strings" y nos retorne una lista con las mismas cadenas pero, esta vez, ordenada. Pasemos a Spyder y realicemos esto. Tenemos nuestra función y una variable en la que creamos una lista vacía, que será la que usaremos para crear la lista ordenada. Ahora, para solucionar el requerimiento tendremos que recorrer la lista desordenada, tomar cada cadena y, usando la otra función que creamos, insertarla en la lista. Esto podemos lograrlo con un "for in", así que nos queda: "for" cadena, "in" lista desordenada. Lo que decimos es que ordenada será igual a insertar ordenado, pasando como parámetros nuestra lista y la cadena. Al final nos queda retornar: "return" ordenada, y hemos terminado. Probemos ahora. He creado un programa principal donde hay una lista con cadenas en desorden y donde se invoca la función que acabamos de crear para ordenarla. Ejecutemos y vemos que, en efecto, la lista que no retorna contiene las cadenas ordenadas.