Hola, nos cuentas pocas cosas como para tener un conocimiento total del problema. Te indico cosas que veo:
Python es un lenguaje que permite programar de mil formas diferentes. El código que veo, me recuerda mucho a Java y la obsesión con hacer programación orientada a objetos pura, lo cual solo sirve para complicar el código y hacer los programas más grandes y aburridos.
Luego, veo que estás usando como estructura de datos para los bancos una lista: banks = [].
No se si conoces ya los diccionarios. Un diccionario permite almacenar datos mediante una clave, en vez de tenerlos todos en una lista "lineal".
El símbolo para declarar un diccionario vacío es: {}
Ejemplo:
self.banks = {}
De esta forma, como supongo que los "id" de los bancos serán únicos, puedes usar la propia "id" de un banco para obtenerlo, en vez de recorrer toda la lista hasta encontrarlo (método search).
Ejemplo:
def search(self, id):
if id in self.banks: return self.banks[id] # si existe lo devuelvo
else: return None # devuelvo None porque no existe
Te recomiendo que la función save, genere un archivo nuevo, borrando todo lo que hubiera con anterioridad. Es decir, volcando una copia de banks al archivo. Todo será mucho más simple.
No se si tienes restricciones a la hora de usar unas determinadas cosas, no se si te han dado ya un diseño de como tienes que hacerlo y te han quitado la libertad de hacerlo como tú quieras.
Dinos hasta dónde eres libre para hacerlo como tú quieres, y si tienes libertad entonces te haré un programa bien hecho, con la mitad de líneas o menos que funciona muy bien y es mucho más simple de entender y programar, que es la filosofía de python.
El diseño que tú has seguido es una Programación Orienta a Objetos clásica, muy noventera, pero estamos en 2015, eso ya no está de moda
Hola no tengo ningún tipo de restricción para hacerlo, estoy aprendiendo así que si ves una mejor solución bienvenida sea. si conozco los diccionarios pero no lo habia pensado y seria mejor que usar clase. desde ya gracias por comentar
con respecto al problema es hacer un alta, baja, modificación o CRUD como quieras llamarle de banco con los atributos id y descripción.
Hola, nos cuentas pocas cosas como para tener un conocimiento total del problema. Te indico cosas que veo:
Python es un lenguaje que permite programar de mil formas diferentes. El código que veo, me recuerda mucho a Java y la obsesión con hacer programación orientada a objetos pura, lo cual solo sirve para complicar el código y hacer los programas más grandes y aburridos.
Luego, veo que estás usando como estructura de datos para los bancos una lista: banks = [].
No se si conoces ya los diccionarios. Un diccionario permite almacenar datos mediante una clave, en vez de tenerlos todos en una lista "lineal".
El símbolo para declarar un diccionario vacío es: {}
Ejemplo:
self.banks = {}
De esta forma, como supongo que los "id" de los bancos serán únicos, puedes usar la propia "id" de un banco para obtenerlo, en vez de recorrer toda la lista hasta encontrarlo (método search).
Ejemplo:
def search(self, id):
if id in self.banks: return self.banks[id] # si existe lo devuelvo
else: return None # devuelvo None porque no existe
Te recomiendo que la función save, genere un archivo nuevo, borrando todo lo que hubiera con anterioridad. Es decir, volcando una copia de banks al archivo. Todo será mucho más simple.
No se si tienes restricciones a la hora de usar unas determinadas cosas, no se si te han dado ya un diseño de como tienes que hacerlo y te han quitado la libertad de hacerlo como tú quieras.
Dinos hasta dónde eres libre para hacerlo como tú quieres, y si tienes libertad entonces te haré un programa bien hecho, con la mitad de líneas o menos que funciona muy bien y es mucho más simple de entender y programar, que es la filosofía de python.
El diseño que tú has seguido es una Programación Orienta a Objetos clásica, muy noventera, pero estamos en 2015, eso ya no está de moda
Algo así, le hice los cambios que me sugeriste:
class Banks:
def __init__(self, filename):
self.filename = filename
self.banks = {}
self.load()
def upload_in_memory(self, f):
for line in f.readlines():
record = line.split(',')
id = record[0].strip()
description = record[1].strip()
self.banks[id] = description
def load(self):
try:
f = open(self.filename, 'r')
self.upload_in_memory(f)
except IOError:
return
def search(self, id):
if id in self.banks:
return self.banks[id]
return None
def to_s(self, id, description):
return "{0:4.4},{1:30.30}\n".format(id, description)
def save(self):
f = open('maebancos.txt', 'w')
for key, value in self.banks.items():
record = self.to_s(key, value)
f.write(record)
f.close()
def add(self, id):
bank = self.search(id)
if not bank:
description = raw_input("Descripcion: ")
self.banks[id] = description
self.save()
print "{0} dado de alta con exito!!!".format(description)
pause()
else:
print "El Banco ya ha sido dado de alta!!"
pause()
def delete(self, id):
bank = self.search(id)
if bank:
print "Codigo de banco: {0}\nDescripcion: {1}".format(id, bank)
opc = raw_input("Baja (B) Cancelar (C)").upper()
if opc == 'B':
del self.banks[id]
self.save()
print "{0} dado de baja con exito!!".format(bank)
pause()
else:
print "El banco no existe!!"
pause()
def update(self, id):
bank = self.search(id)
if bank:
print "Codigo de banco: {0}\nDescripcion: {1}".format(id, bank)
print "Anote el nuevo dato"
description = raw_input("Descripcion: ")
self.banks[id] = description
self.save()
print "{0} modificado con exito!!!".format(bank)
pause()
else:
print "El banco no existe!!"
pause()
def pause():
raw_input("Oprima una tecla para continuar")
def input_code():
while True:
try:
bank_code = raw_input("Codigo Banco: ")
return bank_code
except ValueError:
print "Presta atencion, solo digitos!!"
def menu():
while True:
prompt = "1) Alta de Banco\n2)Baja de Banco\n3)Modificacion de Banco\n4)Salir\n"
prompt += "Elija una opcion: "
opc = int(raw_input(prompt))
banks = Banks('maebancos.txt')
if opc == 1:
banks.add(input_code())
elif opc == 2:
banks.delete(input_code())
elif opc == 3:
banks.update(input_code())
elif opc == 4:
return
menu()
Hola, nos cuentas pocas cosas como para tener un conocimiento total del problema. Te indico cosas que veo:
Python es un lenguaje que permite programar de mil formas diferentes. El código que veo, me recuerda mucho a Java y la obsesión con hacer programación orientada a objetos pura, lo cual solo sirve para complicar el código y hacer los programas más grandes y aburridos.
Luego, veo que estás usando como estructura de datos para los bancos una lista: banks = [].
No se si conoces ya los diccionarios. Un diccionario permite almacenar datos mediante una clave, en vez de tenerlos todos en una lista "lineal".
El símbolo para declarar un diccionario vacío es: {}
Ejemplo:
self.banks = {}
De esta forma, como supongo que los "id" de los bancos serán únicos, puedes usar la propia "id" de un banco para obtenerlo, en vez de recorrer toda la lista hasta encontrarlo (método search).
Ejemplo:
def search(self, id):
if id in self.banks: return self.banks[id] # si existe lo devuelvo
else: return None # devuelvo None porque no existe
Te recomiendo que la función save, genere un archivo nuevo, borrando todo lo que hubiera con anterioridad. Es decir, volcando una copia de banks al archivo. Todo será mucho más simple.
No se si tienes restricciones a la hora de usar unas determinadas cosas, no se si te han dado ya un diseño de como tienes que hacerlo y te han quitado la libertad de hacerlo como tú quieras.
Dinos hasta dónde eres libre para hacerlo como tú quieres, y si tienes libertad entonces te haré un programa bien hecho, con la mitad de líneas o menos que funciona muy bien y es mucho más simple de entender y programar, que es la filosofía de python.
El diseño que tú has seguido es una Programación Orienta a Objetos clásica, muy noventera, pero estamos en 2015, eso ya no está de moda
dejo el codigo en:
https://github.com/horaciobelardita/ejercicios_programacion_I/blob/master/Ejercicio30_31/file.pyotra cosa ahora tendría que agregarle la posibilidad de agregar cuentas asociada con un banco, es decir, un banco tiene muchas cuentas, en otro archivo con los campos id_cuenta, id_banco, descripción_cuenta. como me conviene hacerlo si bien ahora las cuentas tienen un id único, uso diccionario con clave la id de cuenta y valores una lista con id_banco y descripción o conviene con objeto? desde ya gracias por la ayuda
Mod: no hagas doble post