E1 · Cuentas de ahorro y corriente
herencia + redefinición · ★★★Clase Cuenta y dos hijas. Ahorro gana interés mensual al cierre. Corriente permite sobregiro hasta $200 y cobra $3 de cuota al cierre. Ambas redefinen lo necesario. Procesa el cierre de mes de una lista mixta.
Solución
class Cuenta:
def __init__(self, titular, saldo=0):
self.titular = titular
self.saldo = saldo
def retirar(self, monto):
if monto > self.saldo:
raise ValueError("saldo insuficiente")
self.saldo -= monto
def cierre_de_mes(self):
pass
class Ahorro(Cuenta):
def __init__(self, titular, saldo=0, tasa_mensual=0.005):
super().__init__(titular, saldo)
self.tasa_mensual = tasa_mensual
def cierre_de_mes(self):
self.saldo = round(self.saldo * (1 + self.tasa_mensual), 2)
class Corriente(Cuenta):
def __init__(self, titular, saldo=0, sobregiro=200, cuota=3.00):
super().__init__(titular, saldo)
self.sobregiro = sobregiro
self.cuota = cuota
def retirar(self, monto):
if monto > self.saldo + self.sobregiro:
raise ValueError("excede el sobregiro permitido")
self.saldo -= monto
def cierre_de_mes(self):
self.saldo -= self.cuota
cuentas = [Ahorro("Ana", 1000), Corriente("Luis", 50)]
cuentas[1].retirar(180) # queda en -130, dentro del sobregiro
for c in cuentas:
c.cierre_de_mes()
print(f"{c.titular:<5} {type(c).__name__:<9} ${c.saldo:,.2f}")
Ana Ahorro $1,005.00
Luis Corriente $-133.00
Verificación: Ana: 1,000 × 1.005 = 1,005 ✔. Luis: 50 − 180 = −130, menos la cuota de 3 → −133 ✔.