Python - POO y recursividad

 
Vista:

POO y recursividad

Publicado por ivan (26 intervenciones) el 20/07/2023 23:09:56
Hola, estoy tratando de resolver este problema de alcancías.
Tengo problemas con la funcion que me pide crear y luego para llamarla así misma dentro de la Clase Alcancía.
El ejercicio dice lo siguiente:

Está definida la siguiente clase Alcancia:
1
2
3
4
5
class Alcancia:
    def __init__(self, nombre, dinero, alcancia):
        self.nombre = nombre
        self.dinero = dinero
        self.siguiente_alcancia = alcancia
Cada alcancía tiene un nombre que es un string que guarda una descripción del tipo de alcancía, un entero dinero con la cantidad de dinero almacenado en la alcancía y una alcancía siguiente_alcancia, la cuál es la siguiente alcancía de la cuál vas a sacar dinero si se acaba el de la alcancía actual.

Por ejemplo, si tienes las siguientes alcancías:
a1 = Alcancia('Chanchito de greda', 900, None)
a2 = Alcancia('Debajo del Colchón', 100, a1)

Entonces si intentas quitar 300 de la alcancía a2 deberás quitar los 100 que le quedan y luego 200 de la alcancía a1.

Notar que la alcancía a1 no tiene una siguiente_alcancia (ya que siguiente_alcancia = None). Puedes suponer que nunca se pedirá sacar más dinero del que contiene una alcancía cuya siguiente alcancía sea None.

Para este ejercicio deberás definir la función recursiva sacar_dinero(alcancia, monto). La función deberá restar el monto de la alcancía indicada. Si el dinero en la alcancía no alcanza para el monto que se necesita, entonces deberás ir a la siguiente alcancía y sacar el resto. Deberás repetir lo anterior hasta haber restado tanto dinero entre todas las alcancías como el monto indicado.

Nota: el corrector de este ejercicio siempre tendrá la alcancía a1 con siguiente_alcancia = None, la alcancía a2 con siguiente_alcancía = a1, la alcancía a3 con siguiente_alcancia = a2 y así.

Al realizarla asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Alcancia:
    def __init__(self, nombre, dinero, alcancia):
        self.nombre = nombre
        self.dinero = dinero
        self.siguiente_alcancia = alcancia
 
    def sacar_dinero(self, alcancia, monto):
        if alcancia.dinero >= monto:
            alcancia.dinero -= monto
            return True
        elif alcancia.siguiente_alcancia is not None:
            monto_restante = monto - alcancia.dinero
            alcancia.dinero = 0
            return self.siguiente_alcancia.sacar_dinero(alcancia.siguiente_alcancia, monto_restante)
         else:
            return False
 
a1 = Alcancia('Chanchito de greda', 900, None)
a2 = Alcancia('Debajo del Colchón', 100, a1)


Me retorna el siguiente Error:
Incorrecto
Expected method 'sacar_dinero' to be defined as:

def sacar_dinero(alcancia, monto):
...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder