def lectura_archivos():
    print("En esta parte se va a hablar de archivos informáticos. Estos son: un conjunto de bytes almacenados en un dispositivo.\nEste dispositivo suele ser el disco duro de la PC, pero\ntambién podría ser un CD. Incluso en nuestros celulares también tenemos archivos.")
    print("Ejemplos communes de archivos son: Documentos hechos en word o excel (doc, xls). Archivos de canciones(mp3). Archivos de video (mp4), etc.")
    print("“Sobreviven” aún cuando se apague la PC.")
    print("")
    print("Lo que se necesita para poder leer un archivo:")
    print("1) Abrir el archivo y asociar el archivo con una variable.\n2) Un comando para leer la información.\n3) Un comando para cerrar el archivo.")
    print("")
    print("En Python, para abrir un archivo usaremos la función open() y recibe dos parámetros:\n1. El primero de ellos, es la ruta hacia el archivo que se desea abrir\n2. Y el segundo, el modo en el cual se va acceder (modo de apertura)")
    print("Por ejemplo:")
    print("<nombre variable> = open(<nombre del archivo>, <modo acceso>)")
    print("")
    print("Modos de acceso por ejemplo son:\nr - Solo lectura\nw - Solo escritura. Sobreescribe si el archivo existe. Crea archivo si no existe\nw+ - escritura y lectura. Sobreescribe si el archivo existe. Crea archivo si no existe")
    print("")
    print("Ejemplos:")
    print("")
    print("Abriendo un archivo")
    print("")
    print("""inputFile = open("data.txt","r")""")
    print("donde inputFile es una variable, data.txt es el archivo y r es el modo en el que lo vas a abrir")
    print("")
    print("Ejemplo 2")
    print("")
    print("Leer información de un archivo")
    print("")
    print("for line in inputFile:\n\tprint(line)")
    print("Donde line es una variable y inputFIle es la variable del archivo")
    print("")
    print("Tambien se puede leer un archivo utilizando la variable readline()")
    print("Esta permite obetener una linea del archivo")
    print("Esto funciona ya que cada archivo que se encuentra abierto tiene ya una posición asociada, que indica el último punto en el que fue leido\nCada vez que se avanza una linea, avanza esa posición. Por eso, readline() devuelve cada vez una linea distinta y no la misma")
    print("")
    print("Ejemplo:")
    print("")
    print("""inputfile = open("hola.txt","r")\nlinea = inputfile.readline()\nwhile linea != "":\n\tprint(linea,end="")\nlinea=inputfile.readline()""")
    print("")
    print("Otro formato que se puede utilizar es readlines. Este permite obtener todas las lineas de un archivo. Devuelve los elementos en una lista, donde cada elemento de la lista es una linea del archivo")
    print("")
    print("Ejemplo:")
    print("")
    print("""inputFile= open("hola.txt","r")\nlineas = inputFile.readlines()\nprint(lineas)""")
    print("")
    print("Para imprimir el numero de linea incluído esto se haría así:")
    print("""inputFile=open("hola.txt","r")\ni = 1\nfor linea in inputFile:\n\tprint("%d: %s" % (i, linea),end="")\n\ti+=1\ninputFile.close()""")
    print("")
    print("Los archivos tienen diversos usos. Por ejemplo, utilizando las funciones aprendidas en la sección de strings y listas, se podrían sacar datos del archivo y modificarlos en un programa")
    print("Algo importante que tener en cuenta es que funciones como inputFIle.readlines() carga en la memoria el archivo completo. Por eso, es conveniente utilizar archivos pequeños, sino, se estaría consumiendo toda la memoria de la computadora completa")
    print("")
    print("Para cerrar un archivo se puede utilizar la función close()")
    print("")
    print("Por ejemplo:")
    print("inputfile.close()")
    print("")
    print("")
    print("Ahora se va a comentar como escribir en un archivo")
    print("Para hacer eso tienes que:\n1) Abrir el archivo y asociar el archivo con una variable\n2) Un comando para escribir la información\n3)Un comando para cerrar el archivo")
    print("")
    print("Para abrir un archivo el cual se desea escribir en la funcion es la siguiente:")
    print("""<nombre variable> = open(<nombre del archivo>, "w")""")
    print("Por ejemplo:")
    print("""outputFile = open("data.txt", "w")""")
    print("")
    print("Para escribir en el archivo, puedes usar la función write() junto con una cadena.\nOJO: ten en cuenta que esta función sólo tomará un parámetro de la cadena")
    print("Sintaxis: outputfile .write(cadena)")
    print("Ejemplo: outputfile .write(temp)")
    print("")
    print("Para escribir en un archivo, se abre en la forma w+")
    print("Por ejemplo:")
    print("")
    print("""inputFile= open("hola2.txt","w+")\nintputFile.write("hola doctor")\ninputFile.write("si, que paso?")\ninputFile.close())""")
    print("")
    print("Para escribir al final de un archivo, se abre con modo de apertura a")
    print("")
    print("Para renombrar un archivo se utiliza el método rename()")
    print("Por ejemplo:")
    print("os.rename(<current_file_name>, <new_file_name>)")
    print("Donde os es el nombre del archivo, current_file_name es el nombre del archivo que se quiere renombrar y new_file_name es el nuevo nombre")
    print("")
    print("Para borrar un archivo, se utiliza el método remove()")
    print("")
    print("Por ejemplo:")
    print("import os")
    print("""os.remove(<file_name>)""")
    print("")
    print("También existen exepciones. Estas se usan para lidear con errores, por ejemplo, de bloqueo. Para lidear con estas se usa la función try")
    print("")
    return()
lectura_archivos()

def ejercicios_archivos():
    true_tupla = ("T", "t", "true", "True")
    false_tupla = ("F", "f", "false", "False")
    modo_escritura_w_tupla = ("w+", "W+")
    contador_archivos = 0
    print("")
    print("Para ver si has entendido tienes que responder con True o False a las siguientes preguntas: ")
    print("")
    print("Pregunta 1")
    print("")
    print("¿Es necesario cerrar un archivo una vez que se termina de usar?")
    pregunta1archivos =input("Responde con True o False acá: ")
    print("")
    print("Pregunta 2")
    print("")
    print("Como se llama el archivo que se esta abriendo en el código a continuación:")
    print("""inputFile=open("icc.txt","r")\ni = 1\nfor linea in inputFile:\n\tprint("%d: %s" % (i, linea),end="")\n\ti+=1\ninputFile.close()""")
    pregunta2archivos = input("Escribe el nombre del archivo acá (escribe el nombre exactamnete como aparece en el código): ")
    print("¿Que modo de apertura permite leer y editar un archivo al mismo tiempo?")
    pregunta3archivos = input("Escribe el modo de apertura necesario(a,ab,a+,ab+,r,r+,w,w+):")
    print("¿Funciones como inputFile.readlines() no ocupan espacio de la memoria?")
    pregunta4archivos = input("Responde con True o False acá: ")
    if pregunta1archivos in true_tupla:
        contador_archivos += 1
    if pregunta2archivos == "icc.txt":
        contador_archivos += 1
    if pregunta3archivos in modo_escritura_w_tupla:
        contador_archivos += 1
    if pregunta4archivos in false_tupla:
        contador_archivos += 1
    print("tuviste ", contador_archivos, "/4 bien")
    print("¿Quieres volver a intentarlo?")
    volver_a_intentar_archivos = input("Si quieres volver a intentarlo escribe la palabra si aca: ")
    if volver_a_intentar_archivos == "si" or volver_a_intentar_archivos == "sí":
        ejercicios_archivos()


ejercicios_archivos()
