[ Foro de Python ]
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
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.)