Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Panic0 en 21 Enero 2021, 20:34 pm



Título: Poner archivos en funciones Python
Publicado por: Panic0 en 21 Enero 2021, 20:34 pm
Hola,ayer termine un trabajo el cual nos propusieron,lo logre terminar todo bien.

Pero ahora tenemos que hacer que cuando un archivo se abra por ejemplo en modo lectura,crear una función (def) para hacer eso mismo.

Es decir
Código:
#De hacer esto
file = open("name.txt","r")

#A esto
def open_read():
    file = open("name.txt","r")

Este es mi código
Código
  1. import os
  2.  
  3.  
  4.  
  5.  
  6. clear = lambda: os.system('cls')
  7.  
  8. def encontrar_alumno(num_alumno):
  9.    archivo = open(nom_archivo,"r")
  10.    alumnos = archivo.readlines()
  11.    tot_alumnos = len(alumnos)
  12.    for indice in range(tot_alumnos):
  13.        el_alumno = alumnos[indice]
  14.        alumno_leido = el_alumno.split(' ')
  15.        if alumno_leido[0]==num_alumno:
  16.            return alumno_leido
  17.  
  18.    archivo.close()
  19.    return ''
  20.  
  21. def consulta_ape():
  22.    lista_ape = []    # lista a usar para agregar pertenencia
  23.    archivo = open(nom_archivo, 'r')
  24.    alumnos = archivo.readlines()
  25.  
  26.    tot_alumnos = len(alumnos)
  27.    while True:
  28.        clear()
  29.        el_apellido = input('Ingrese Apellido a buscar (s para salir): ').capitalize()
  30.        if el_apellido.isalpha():
  31.            if el_apellido.lower() =='s':
  32.                break
  33.            else:
  34.                for indice in range(tot_alumnos):
  35.                    el_alumno = alumnos[indice]
  36.                    alumno_leido = el_alumno.split(' ')
  37.                    if alumno_leido[1]==el_apellido:
  38.                        lista_ape.append(alumno_leido)
  39.  
  40.                archivo.close()
  41.                clear()
  42.                print (f'Alumnos con el apellido {el_apellido} encontrados')
  43.                print()
  44.                print ('Nro. Apellido      Nombre    Materia  Grupo  Nota')
  45.                print('--------------------------------------------------')
  46.  
  47.                for alumno in lista_ape:
  48.                    for data in alumno:
  49.                        print (data, end='     ')
  50.  
  51.                    print()
  52.                print()
  53.                print('Pulse <Intro para volver al menu>')
  54.                input()
  55.  
  56.  
  57.  
  58.  
  59. ############
  60.  
  61. def buscar_grupo():
  62.    lista_grupo = []    
  63.    archivo = open(nom_archivo, 'r')
  64.    alumnos = archivo.readlines()
  65.  
  66.    tot_alumnos = len(alumnos)
  67.    while True:
  68.        clear()
  69.        nro_grupo = input('Ingrese Nro. Grupo (0 para salir): ')
  70.        if nro_grupo.isdigit():
  71.            if nro_grupo =='0':
  72.                break
  73.            else:
  74.                for indice in range(tot_alumnos):
  75.                    el_alumno = alumnos[indice]
  76.                    alumno_leido = el_alumno.split(' ')
  77.                    if alumno_leido[4]==nro_grupo:
  78.                        lista_grupo.append(alumno_leido)
  79.  
  80.                archivo.close()
  81.                print ('Nro. Apellido      Nombre    Materia  Grupo  Nota')
  82.                print('------------------------------------------')
  83.  
  84.                for alumno in lista_grupo:
  85.                    for data in alumno:
  86.                        print (data, end='     ')
  87.  
  88.                    print()
  89.                print()
  90.                print('Pulse <Intro para volver al menu>')
  91.                input()
  92.  
  93.  
  94.  
  95.  
  96. def agregar():
  97.    dato_alumno = []
  98.    while True:
  99.        clear()
  100.        nro_alumno = input('Ingrese Nro. de Alumno (0 para salir): ')
  101.        if nro_alumno.isdigit():
  102.            if nro_alumno =='0':
  103.                break
  104.            else:
  105.                alumno_encontrado = encontrar_alumno(nro_alumno)
  106.                if alumno_encontrado =='':
  107.                    #archivo = open(nom_archivo, 'a')
  108.                    apellido    = input('Ingrese Apellido   : ').capitalize()
  109.                    nombre      = input('Ingrese Nombre      : ').capitalize()
  110.                    materia     = input('Ingrese Materia    : ').capitalize()
  111.                    grupo       = input('Ingrese Grupo      : ')
  112.                    nota        = input('Ingrese Nota       :')
  113.                    dato_alumno.append(nro_alumno)
  114.                    dato_alumno.append(apellido)
  115.                    dato_alumno.append(nombre)
  116.                    dato_alumno.append(materia)
  117.                    dato_alumno.append(grupo)
  118.                    dato_alumno.append(nota)
  119.                    archivo = open(nom_archivo,"a")
  120.                    for data in dato_alumno:
  121.                        archivo.write(data+' ')
  122.                    archivo.write('\n')
  123.                    archivo.close()
  124.                    dato_alumno = []
  125.                else:
  126.                    print()
  127.                    input ('Nro de alumno ya existe, use otro.')
  128.  
  129.        else:
  130.            input ('Debe ser un numero, repita')
  131.  
  132.  
  133.  
  134. def lista():
  135.    clear()
  136.    archivo = open(nom_archivo,"r")
  137.    alumnos = archivo.read()
  138.    print ('Lista de Alumnos')
  139.    print ('-----------------')
  140.    print()
  141.    print (alumnos)    
  142.    print()
  143.    print('Pulse <Intro para volver al menu>')
  144.    input()
  145.    archivo.close()
  146.  
  147.  
  148. def consultar():
  149.    while True:
  150.        clear()
  151.        try:
  152.            num_alumno = input('Ingrese Nro de alumno a Consultar (0 para regresar): ')
  153.            if num_alumno=='0':
  154.                break
  155.            else:
  156.                alumno_encontrado = encontrar_alumno(num_alumno)
  157.                if alumno_encontrado !='':
  158.                    print ('Nro Alumno: ',alumno_encontrado[0])
  159.                    print ('Apellido  : ',alumno_encontrado[1])
  160.                    print ('Nombre    : ',alumno_encontrado[2])
  161.                    print ('Materia   : ',alumno_encontrado[3])
  162.                    print ('Nota      : ',alumno_encontrado[4])                                                
  163.                    print ()
  164.                    print('Pulse <Intro para volver al menu>')
  165.                    input()
  166.                    break
  167.                else:
  168.                    print ()
  169.                    print ('Alumno no encontrado')
  170.                    print ()
  171.                    print('Pulse <Intro para volver al menu>')
  172.                    input()
  173.                    break
  174.        except ValueError:
  175.            pass
  176.  
  177.  
  178. def menu():
  179.    while True:
  180.        clear()
  181.        try:
  182.            print('Menu Principal')
  183.            print('------------')
  184.            print()
  185.            print('1. Agregar Alumno')
  186.            print('2. Lista de Alumnos')
  187.            print('3. Consultar Alumno x nro.')
  188.            print('4. Consultar Alumno x Apellido.')
  189.            print('5. Consultar Grupo')
  190.            print('6. Salir')
  191.            print()
  192.            opcion = int(input('Ingrese opcion: '))
  193.            if opcion == 6:
  194.                break
  195.            elif opcion == 1:
  196.                agregar()
  197.            elif opcion == 2:
  198.                lista()
  199.            elif opcion == 3:
  200.                consultar()
  201.            elif opcion == 4:
  202.                consulta_ape()
  203.            elif opcion==5:
  204.                buscar_grupo()
  205.  
  206.        except ValueError:
  207.           pass
  208.  
  209.  
  210. if __name__ == "__main__":
  211.    nom_archivo = 'estudiantes.txt'
  212.    menu()
  213.  

Pero si remplazo todo por funciones me salen errores de todo tipo,y bueno puedo decir que ya estoy a nada de rendirme  :-[ >:D :-(

Espero haberme explicado correctamente

Gracias de antemano :xD


Título: Re: Poner archivos en funciones Python
Publicado por: Danielㅤ en 21 Enero 2021, 21:30 pm
Hola, un consejo, no uses break, eso se considera romper de fuerza bruta un loop, es mejor utilizar semáforos.

Aquí te he creado un ejemplo:

Código
  1. def contador():
  2.    puntaje = 0
  3.    detenerBucle = False
  4.    while(not detenerBucle):
  5.        puntaje += 1
  6.        if (puntaje == 30):
  7.            print("Tienes 30 puntos!")
  8.            detenerBucle = True
  9.    print("Se detuvo el bucle while")
  10.  
  11. contador()
  12.  

Devolverá:

Código:
Tienes 30 puntos!
Se detuvo el bucle while


Saludos


Título: Re: Poner archivos en funciones Python
Publicado por: Serapis en 21 Enero 2021, 23:27 pm
Hola, un consejo, no uses break, eso se considera romper de fuerza bruta un loop, es mejor utilizar semáforos.
Concuerdo en que no es elegante, pero si aparece en la especificación del lenguaje, creo que no hay que apuntar a ningún culpable más que a los desarrolladores del mismo lenguaje.

Resulta cuanto menos estúpido, decir: "tomad esto es lo que teneis con este lenguaje" y luego acabar diciendo "no useis esto...". Es más fácil rediseñar la especificación para dar cabida a la solución sin 'molestar'.