Las funciones y los ficheros pueden trabajar juntos para hacer cosas útiles como ésta:
Éste ejercicicio me ha gustado mucho.
Es interesante ver cómo podemos insertar contenido del fichero txt con frases del programa.
Al principio no entendía mucho porque lo estaba mirando sin la ejecución y estaba pensando sólo en abstracto, olvidándome de que va incorporando las líneas del texto. De eso va el ejercicio, de cruzar ambos ficheros.
ALGUNAS PREGUNTAS
P: ¿Qué es f en print_all y otras funciones?
R: La f es una variable como las usadas en el Ejercicio 18, aunque en éste caso es un archivo. En Python, un fichero es como un reproductor de DVD. Tiene una «cabeza lectora» para poder ir leyendo y saltando a diferentes posiciones del fichero. Cada vez que hago f.seek(0) estoy moviéndome al inicio del fichero. Cada vez que hago f.readline(), estoy leyendo una línea del fichero y moviendo la cabeza lectora a la derecha de \n, que es el final de ésa línea (salto de línea). Lo seguiré explicando cuando avance.
P: ¿Por qué hay líneas en blanco en el fichero?
R: Buena pregunta. Yo también me la hice al principio. Como hice en el ejercicio 10 y el ejercicio 16, la función readline() devuelve el \n que hay al final de cada línea. Ésto significa que estamos mostrando en pantalla éste carácter (salto de línea), además del \n propio de print. Para que no ocurra hay que añadir el carácter , (coma) al final de print, así no motrará en pantalla su propio \n.
P: Mmmm. Entonces, ¿por qué seek(0) no establece el valor de current_line a cero?
R: En primer lugar, seek(0) es una función que trabaja a nivel de bytes, no líneas. Así que con eso saltamos al byte 0 (el primer byte) del fichero. En segundo lugar, current_line es sólo una variable y no está conectada de ninguna forma con el fichero. Hay que incrementar el valor manualmente.
P: Pero entonces, ¿cómo sabe readline() dónde está cada línea?
R: Dentro de readline() hay un cógigo que escanea cada byte del fichero hasta encontrar el carácter /n, entonces para de leer y devuelve lo que ha encontrado hasta ahí. El fichero f es responsable de mantener la posición actual en el fichero después de cada llamada a readline().
P: ¿Qué es +=?
R: Es un tipo de contracción de los operadores. Por ejemplo, decir que x += y es decir lo mismo que x = x + y.
En éste caso podríamos escribir: current_line += 1 que sería lo mismo que decir current_line = current_line + 1
Con todo lo anterior, ahora si, comento el código.



Debe estar conectado para enviar un comentario.