Crea el directorio ~/st/practica01
donde escribirás el resto de ficheros de esta práctica.
Recuerda que la recogida de las prácticas
se hará automáticamente el dia del examen, ası que es muy importante que respetes al pie de la letra todos los
nombres de ficheros y directorios que indiquen todos los enunciados.
Vamos a empezar por un script muy sencillo que será poco más que un hola mundo sobre
el uso de listas.
Ponle como nombre
~/st/practica01/cola.py
.
caja01
y
caja02
caja01
y
caja02
. Imprime de vez en cuando la lista
if
, haz que si existe un cliente llamado Ernesto en caja01, pase a ser el primero de la cola. Muestra un mensaje
que diga Ernesto pasa de la posición n a la 1, donde n es la posición que ocupaba inicialmente. En este mensaje, usa la numeración
propia del lenguaje natural (que empieza en 1, no en 0)
Caja con 2 clientes: Ernesto, Luis Caja con 3 clientes: Ana, Pedro, María Caje con 2 clientes: Marta, Juan
~/st/practica01/prueba_diccionarios.py
, que
alcoholicas
con elementos como vino, sidra, cerveza
.
Borre del diccionario todas las bebidas incluidas en esta lista.
comunidad_valenciana
con los elementos valencia, alicante, castellon
.
En el caso de que en el diccionario esté alguna de estas provincias, le
añade como plato tıpico paella
comunidad_valenciana
muestra_alfabetico
que muestre el contenido del diccionario en un formato apropiado para que lo lea un humano
(esto es, bien tabulado, sin corchetes, etc),
por orden alfabético de las claves
muestra_por_longitud
que muestre el contenido del diccionario en un formato apropiado para que lo lea un humano,
ordenado por el número de elementos de las listas
Escribe el script
~/st/practica01/redondea_nota.py
, donde declararás y probarás la
función redondea_nota
. Esta función recibirá dos parámetros:
nota
y
modo
. Devolverá una cadena.
modo
podrá contener las cadenas
normal
,
laxo
o
estricto
. Según el modo, los criterios de calificación serán distintos. Por ejemplo,
en modo estricto, una nota de 4.99 serıa un suspenso. En modo laxo, una nota de 4 podrıa ser un aprobado.
En esta práctica escribirás un script
llamado ~/st/practica01/ordena.py
, donde probarás cómo ordenar una lista con el método sort(),
definiendo una función para personalizar el órden.
[ [1,3], [5], [0], [2,2,2] ]
Una vez ordenada, su estado será
[ [0, [1,3], [5], [2,2,2] ]
raise SystemExit
). La lista vacıa es un elemento no permitido.
~/st/practica01/cambia_nombre.py
, que, en el caso de que sea posible,
modificará los nombres de todos los ficheros y directorios contenidos en ciertos directorios,
para usar caracteres que
sabemos que no causarán ningún problema en ningún sistema de ficheros: minúsculas, números, guiones,
barras bajas y puntos.
_
)
nn
, ny
, gn
o alguna combinación similar
|@#~!"·$%&
etc por un punto o una barra
baja
Decimos intentar porque tal vez este cambio sin más no sea posible. Por ejemplo,
un directorio que contenga los ficheros
HOLA!
,
hola!
y
hola.
(Son tres nombres legales, pero al intentar cambiarlo, los tres generarıan el mismo nombre simplificado. A esta situación la denominaremos colisión)
Práctica básica: Cuando se de un caso como este, el script indicará por salida estándar que ciertos ficheros no se modifican. Se limitará a cambiar lo que sea posible cambiar.
Prática optativa: En caso de colisión, el script buscará diferentes nombres para todos
los ficheros. Por ejemplo añadiendo .001
, .002
, etc, entre el nombre
y la extensión (si existe)
Busca en el módulo os.path la función que te indica si un fichero es un directorio. Para sustituir caractes en una cadena, puedes reconstruir una cadena carácter a carácter o usar métodos de los objetos string.
optparse
o la librerıa
argparse
. Cualquiera de las dos es válida pero argparse es preferible, es más moderna
y su uso algo más sencillo.
~/st/practica01/cambia_nombre0.py
Ahora añadirás funcionalidad a
~/st/practica01/cambia_nombre.py
Observa que cambia_nombre0.py será el script especificado en la práctica 1.5 y cambia_nombre.py
, el script de esta
práctica.
Usando
optparse
o
argparse
, haz que
~/st/practica01/cambia_nombre.py
acepte los siguientes flags:
-h --help Mostrar un mensaje de ayuda -r --recursive Recorrer los directorios recursivamente -s --spaces Reemplazar los espacios por barra baja -c --case Reemplazar las mayúsculas por minúsculas -n --enne Reemplazar la eñe por otra combinación de letras -t --accent Reemplazar las vocales con acento -w --weird Reemplazar los caracteres "raros"
Si el script no recibe ni -s ni -c ni -n ni -t ni -w, entonces se comportará
como si hubiera recibido las opciones -s, -c, -n, -t, -w. Esto es, se
comportará como cambia_nombre0.py
~/st/practica01/ordena.py
ponle como nombre
~/st/practica01/ordena0.py
y ahora añadirás funcionalidad a
~/st/practica01/ordena.py
Observa que ordena0.py será el script especificado en la práctica 1.4 y ordena.py, el script de esta práctica.
Este script recibirá un fichero de texto con la misma estructura de datos que ordena0.py, pero representado en forma de texto, de forma que la lista de listas será un fichero de lıneas, con elementos separados por comas.
Por ejemplo, la estructura
[ [1,3], [5], [0], [2,2,2] ]
se representarıa ası
1,3 5 0 2,2,2
De la misma forma, una vez ordenada la estructura, se representarıa ası
0 1,3 5 2,2,2
-i --input
. El valor por omisión será
la entrada estándar. Esto es, si no se indica ningún fichero, leerá desde stdin.
-o --output
. El valor por omisión
será la salida estándar. Esto es, si no se indica ningún fichero, escribirá en stdout
-h --help
debe mostrar un mensaje de ayuda