[ Foro de Python ]

ayuda con ejercicio de herencia

06-Oct-2022 19:41
paco ventura
1 Respuestas

ENUNCIADO:
El siguiente ejercicio consiste en escribir un programa para gestionar una agenda telefónica con los nombres y los teléfonos de los conocidos de una persona. El programa incorporará las funciones para:
• Consultar el teléfono de una persona.
• Añadir el teléfono de una persona nueva.
• Eliminar el teléfono de una persona.
La agenda debe estar guardada en el fichero de texto agenda.txt donde el nombre de las personas y su teléfono deben aparecer separados por comas y cada persona debe aparecer en una línea distinta.
CODIGO:
import os

class Agenda():
      def __init__(self,persona,fichero):
          self.persona,self.fichero=persona,fichero
           
      def obtener_telefono(fichero,persona):
           try:
               f=open(fichero,'r')
           except FileNotFoundError    :
               return('¡El fichero' +fichero + 'no existe!\n')
           else:
               directorio =f.readlines()
               f.close()
               directorio=dict([tuple(line.split(','))for line in directorio
               ])
               if persona in directorio:
                   return directorio[persona]
               else:
                   return('¡La persona' +persona+ 'no existe\n')
                     
      def insertar_telefono(fichero,persona,telefono):
           try:
               f=open(fichero,'a')
           except FileNotFoundError:
               return('¡El fichero ' + fichero + 'no existe\n')
           else:
               f.write(persona+','+ telefono+'\n')    
               f.close()
               return ('El telefono se ha agregado.\n')
         
      def eliminar_telefono(fichero,persona):
           try:
               f=open(fichero,'r')
           except FileNotFoundError:
               return ('¡El fichero ' + fichero + 'no existe!\n')
           else:
               directorio =f.readlines()
               f.close()
               directorio=dict([tuple(line.split(','))for line in directorio])
               if persona in directorio:
                   del directorio[persona]
                   f=open(fichero,'w')
                   for nombre,telefono in directorio.items():
                       f.write(nombre + ',' + telefono)
                   f.close()
                   return ('La persona '+ persona + 'no existe\n')    
class Menu(Agenda):
   def __init__(self,persona,fichero,nombre,telefono,apellidos,email):
       super().__init__(persona,fichero)
       self.nombre,self.apellidos=nombre,apellidos
       self.telefono,self.email=telefono,email
   def directorio():
       fichero='agenda.txt'
       while True:
           opcion=Menu()
           if opcion=='1':
               nombre=input('Introduzca el nombre de la persona:')
               print(obtener_telefono(fichero,nombre))
           elif opcion == '2':
               nombre=input('Introduzca el nombre de la persona:')
               telefono=int(input('Introduzca el telefono de la persona:'))  
               print(insertar_telefono(fichero,nombre,telefono))
           elif opcion == '3':
               nombre=input('Introduzca el nombre de la persona:')
               print(eliminar_telefono(fichero,nombre))
           elif opcion =='4':
               print(crear_directorio(fichero))  
           else:
               break
       return
   
   def crear_directorio(self,fichero):
     if os.path.isfile(self.fichero):
         pregunta=input('El fichero'+self.fichero+ 'ya existe.¿Desea borrarlo? (S/N)?')    
         if pregunta =='N':
             return 'No se ha añadido el fichero porque ya existe.\n'
         f=open(self.fichero,'w')
         f.close()
         return 'Se ha añadido el fichero.\n'  
   
   def crear_menu():
        print('Gestion de la agenda telefonica')
        print('*********************************')
        print('(1)-Obtener un telefono')
        print('(2)-Insertar un telefono')
        print('(3)-Eliminar un telefono')
        print('(4)-Crear la agenda telefonica')
        print('(0)-Salir')
        opcion=input('Seleccione la opcion elegida:')
        return opcion      
   crear_menu()  

DUDA:
Me dice que no están definidos los metodos,cuando los estoy invocando.¿Donde esta el fallo?.Muchas gracias


10-Oct-2022 19:27
paco ventura

He corregido ese fallo tonto de no haberme dado cuenta del parámetro self tanto en directorio(self) como a la hora de invocarlo con el parámetro self,pero ahora tengo otro problema al ejecutarlo.persona:'):

def directorio(self):
       fichero='agenda.txt'
       while True:
           opcion=Menu()
           if opcion=='1':
               nombre=input('Introduzca el nombre de la persona:')
               print(self.obtener_telefono(fichero,nombre))
           elif opcion == '2':
               nombre=input('Introduzca el nombre de la persona:')
               telefono=int(input('Introduzca el telefono de la persona:'))  
               print(self.insertar_telefono(fichero,nombre,telefono))
           elif opcion == '3':
               nombre=input('Introduzca el nombre de la persona:')
               print(self.eliminar_telefono(fichero,nombre))
           elif opcion =='4':
               print(self.crear_directorio(fichero))  
           else:
               break
       return
   

Me da este fallo,no se ejecuta correctamente:


Gestion de la agenda telefonica
*********************************
(1)-Obtener un telefono
(2)-Insertar un telefono
(3)-Eliminar un telefono
(4)-Crear la agenda telefonica
(0)-Salir
Seleccione la opcion elegida:2
PS C:\Users\seten\PYTHON


Como podrás ver no sale la opción Insertar un teléfono ni ningún otra opción.
Lo mismo al hacer este ejercicio mediante herencia lo complico aun mas,y debería hacerlo solo con funciones ,pero quería hacerlo elegante el ejercicio


Un saludo cordial,






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)