fbpx

Problema con la property. Módulo 8- Ejercicios propuestos, ejercicio 11

  • Problema con la property. Módulo 8- Ejercicios propuestos, ejercicio 11

    Posted by Leandro Martin Villafuerte on 7 mayo, 2020 en 11:02 pm

    Buenas, me quedé en el ejercicio 11 en donde hay que crear una propiedad en donde se pueda setear el estado de la clase Guerrero para ataque o defensa. No logro que me funcione. El error que me sale es: AttributeError: ‘Guerrero’ object has no attribute ‘_estado’

    Entre las lineas 8 y 17 es en donde no logro que me funcione.

    A continuación dejo el código completo que hice:

    class Guerrero:
    def __init__(self,vida=100,estado_arma=100,estado="Ataque",estado_escudo=100):
    self.vida = vida
    self.estado_arma = estado_arma
    self.estado = estado
    self.estado_escudo = estado_escudo
    @property
    def estado(self):
    return self._estado
    @estado.setter
    def estado(self, estado):
    if self.estado != "Ataque" or self.estado != "Defensa":
    raise ValueError("Los estados sólo pueden ser Ataque o Defensa")
    if self.estado_escudo == 0:
    raise ValueError("El escudo está roto, no puede estar en Defensa")
    self._estado = estado
    @property
    def is_alive(self):
    if self.vida > 0:
    return True
    def atacar(self,guerrero):
    if self.estado_arma >= 2:
    guerrero.vida = guerrero.vida - 20
    self.estado_arma = self.estado_arma - 2
    else:
    print("El arma no funciona")
    pass
    Leandro Martin Villafuerte respondido 3 años, 6 meses 2 Miembros · 2 Respuestas
  • 2 Respuestas
  • Cesar Arteaga Mendoza

    Miembro
    8 mayo, 2020 en 5:13 am

    Buen día Leandro.
    Traté de depurar tu código pero no pude dar con la solución.
    Yo lo realice de una manera distinta y es funcional, acá te dejo el link por si quieres echarle un ojo.
    https://github.com/Chalins200/CursoPython/blob/master/POO/Ejercicio11.py

    Saludos.

    • Leandro Martin Villafuerte

      Miembro
      8 mayo, 2020 en 3:39 pm

      Hola Cesar muchas gracias por la ayuda ya logré que funcione.

      Saludos

      Me quedó así

      class Guerrero:
      def __init__(self,vida=100,estado_arma=100,estado = "ataque",estado_escudo = 100):

      self.vida = vida
      self.estado_arma = estado_arma
      self.estado = estado
      self.estado_escudo = estado_escudo

      @property
      def estado(self):
      return self._estado
      @estado.setter
      def estado(self, cambio):
      if cambio == "ataque" or cambio == "defensa":
      if cambio == "defensa" and self.estado_escudo ==0:
      raise ValueError("No se puede cambiar a defensa, Escudo=0")
      self._estado = cambio
      else: raise ValueError("El estado no existe")

      @property
      def is_alive(self):
      if self.vida > 0:
      return True
      else: return False

      def atacar(self,guerrero):
      if self.is_alive == True:
      if self.estado == "ataque":
      if self.estado_arma >= 2 and guerrero.estado == "ataque":
      guerrero.vida = guerrero.vida - 20
      self.estado_arma = self.estado_arma - 2
      elif self.estado_arma >= 2 and guerrero.estado == "defensa":
      guerrero.estado_escudo = guerrero.estado_escudo - 5
      self.estado_arma = self.estado_arma - 2
      else:
      print("El arma no funciona, Arma=",self.estado_arma)
      else:
      print("El guerrero tiene que estar en ataque")
      else:
      print("El guerrero no está vivo")
      w = Guerrero()
      '''w.estado_escudo = 0
      w.estado = "defensa"
      print(w.estado)'''
      #print(w.is_alive)
      w2 = Guerrero()
      '''w.atacar(w2)
      print("La vida de w2 es",w2.vida)
      print("El estado de arma de w es",w.estado_arma)'''
      '''w.estado_arma = 1
      w.atacar(w2)'''
      '''w2.estado = "defensa"
      w.atacar(w2)
      print("el escudo de w2 es",w2.estado_escudo)
      print("el estado del arma de w es",w.estado_arma)'''
      '''w.estado = "defensa"
      w.atacar(w2)
      print("la vida de w2 es",w2.vida)'''
      '''w.vida = 0
      w.atacar(w2)
      print("La vida de w2 es",w2.vida)'''

Inicia sesión para responder.

Start of Discussion
0 de 0 respuestas Junio 2018
Ahora

Obtén una membresía premium 🎁

Con motivo de nuestro cuarto aniversario, te ofrecemos no solo el mejor precio del año, sino el mejor precio de toda nuestra trayectoria. Esta oferta es válida solo para las primeras 200 personas que la soliciten. ¡No dejes pasar esta oportunidad!