Poner archivos en funciones Python

Iniciado por Panic0, 21 Enero 2021, 20:34 PM

0 Miembros y 1 Visitante están viendo este tema.

Panic0

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

#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 (python) [Seleccionar]

import os




clear = lambda: os.system('cls')

def encontrar_alumno(num_alumno):
   archivo = open(nom_archivo,"r")
   alumnos = archivo.readlines()
   tot_alumnos = len(alumnos)
   for indice in range(tot_alumnos):
       el_alumno = alumnos[indice]
       alumno_leido = el_alumno.split(' ')
       if alumno_leido[0]==num_alumno:
           return alumno_leido
       
   archivo.close()
   return ''

def consulta_ape():
   lista_ape = []    # lista a usar para agregar pertenencia
   archivo = open(nom_archivo, 'r')
   alumnos = archivo.readlines()
   
   tot_alumnos = len(alumnos)
   while True:
       clear()
       el_apellido = input('Ingrese Apellido a buscar (s para salir): ').capitalize()
       if el_apellido.isalpha():
           if el_apellido.lower() =='s':
               break
           else:
               for indice in range(tot_alumnos):
                   el_alumno = alumnos[indice]
                   alumno_leido = el_alumno.split(' ')
                   if alumno_leido[1]==el_apellido:
                       lista_ape.append(alumno_leido)
               
               archivo.close()
               clear()
               print (f'Alumnos con el apellido {el_apellido} encontrados')
               print()
               print ('Nro. Apellido      Nombre    Materia  Grupo  Nota')
               print('--------------------------------------------------')

               for alumno in lista_ape:
                   for data in alumno:
                       print (data, end='     ')
               
                   print()
               print()
               print('Pulse <Intro para volver al menu>')
               input()




############

def buscar_grupo():
   lista_grupo = []    
   archivo = open(nom_archivo, 'r')
   alumnos = archivo.readlines()
   
   tot_alumnos = len(alumnos)
   while True:
       clear()
       nro_grupo = input('Ingrese Nro. Grupo (0 para salir): ')
       if nro_grupo.isdigit():
           if nro_grupo =='0':
               break
           else:
               for indice in range(tot_alumnos):
                   el_alumno = alumnos[indice]
                   alumno_leido = el_alumno.split(' ')
                   if alumno_leido[4]==nro_grupo:
                       lista_grupo.append(alumno_leido)
               
               archivo.close()
               print ('Nro. Apellido      Nombre    Materia  Grupo  Nota')
               print('------------------------------------------')

               for alumno in lista_grupo:
                   for data in alumno:
                       print (data, end='     ')
               
                   print()
               print()
               print('Pulse <Intro para volver al menu>')
               input()
               



def agregar():
   dato_alumno = []
   while True:
       clear()
       nro_alumno = input('Ingrese Nro. de Alumno (0 para salir): ')
       if nro_alumno.isdigit():
           if nro_alumno =='0':
               break
           else:
               alumno_encontrado = encontrar_alumno(nro_alumno)
               if alumno_encontrado =='':
                   #archivo = open(nom_archivo, 'a')
                   apellido    = input('Ingrese Apellido   : ').capitalize()
                   nombre      = input('Ingrese Nombre      : ').capitalize()
                   materia     = input('Ingrese Materia    : ').capitalize()
                   grupo       = input('Ingrese Grupo      : ')
                   nota        = input('Ingrese Nota       :')
                   dato_alumno.append(nro_alumno)
                   dato_alumno.append(apellido)
                   dato_alumno.append(nombre)
                   dato_alumno.append(materia)
                   dato_alumno.append(grupo)
                   dato_alumno.append(nota)
                   archivo = open(nom_archivo,"a")
                   for data in dato_alumno:
                       archivo.write(data+' ')
                   archivo.write('\n')
                   archivo.close()
                   dato_alumno = []
               else:
                   print()
                   input ('Nro de alumno ya existe, use otro.')

       else:
           input ('Debe ser un numero, repita')



def lista():
   clear()
   archivo = open(nom_archivo,"r")
   alumnos = archivo.read()
   print ('Lista de Alumnos')
   print ('-----------------')
   print()
   print (alumnos)    
   print()
   print('Pulse <Intro para volver al menu>')
   input()
   archivo.close()


def consultar():
   while True:
       clear()
       try:
           num_alumno = input('Ingrese Nro de alumno a Consultar (0 para regresar): ')
           if num_alumno=='0':
               break
           else:
               alumno_encontrado = encontrar_alumno(num_alumno)
               if alumno_encontrado !='':
                   print ('Nro Alumno: ',alumno_encontrado[0])
                   print ('Apellido  : ',alumno_encontrado[1])
                   print ('Nombre    : ',alumno_encontrado[2])
                   print ('Materia   : ',alumno_encontrado[3])
                   print ('Nota      : ',alumno_encontrado[4])                                                
                   print ()
                   print('Pulse <Intro para volver al menu>')
                   input()
                   break
               else:
                   print ()
                   print ('Alumno no encontrado')
                   print ()
                   print('Pulse <Intro para volver al menu>')
                   input()
                   break
       except ValueError:
           pass

           
def menu():
   while True:
       clear()
       try:
           print('Menu Principal')
           print('------------')
           print()
           print('1. Agregar Alumno')
           print('2. Lista de Alumnos')
           print('3. Consultar Alumno x nro.')
           print('4. Consultar Alumno x Apellido.')
           print('5. Consultar Grupo')
           print('6. Salir')
           print()
           opcion = int(input('Ingrese opcion: '))
           if opcion == 6:
               break
           elif opcion == 1:
               agregar()
           elif opcion == 2:
               lista()
           elif opcion == 3:
               consultar()
           elif opcion == 4:
               consulta_ape()
           elif opcion==5:
               buscar_grupo()

       except ValueError:
          pass


if __name__ == "__main__":
   nom_archivo = 'estudiantes.txt'
   menu()


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
Los ataques de pánico suelen comenzar de forma súbita, sin advertencia.

Danielㅤ

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 (Python) [Seleccionar]
def contador():
    puntaje = 0
    detenerBucle = False
    while(not detenerBucle):
        puntaje += 1
        if (puntaje == 30):
            print("Tienes 30 puntos!")
            detenerBucle = True
    print("Se detuvo el bucle while")

contador()


Devolverá:

Tienes 30 puntos!
Se detuvo el bucle while



Saludos
¡Regresando como cual Fenix! ~
Bomber Code © 2021 https://www.bombercode.net/foro/

Ayudas - Aportes - Tutoriales - Y mucho mas!!!

Serapis

Cita de: [D]aniel 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.
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'.