[ Foro de Python ]

Ayuda en POO

07-Jul-2021 11:16
Invitado (Hernan )
2 Respuestas

Buenas noches, tengo una duda con mi código, con estos inputs;
camino_1 = Camino(["F", "O"], "rojo")
camino_2 = Camino(["E", "S"], "amarillo")
camino_3 = Camino(["F", "N"], "amarillo")
baldosa = Baldosa([camino_1, camino_2, camino_3])
baldosa.col = 65
baldosa.fila = 5
print(baldosa)

me deberia salir este output: Baldosa: Num. de Caminos = 3, Ubicacion = (5, 65), pero no lo logro, aquí dejo la explicación del output y mi codigo por si alguien me pudiese ayudar.

La baldosa de este ejemplo tiene tres caminos: dos amarillos y uno rojo. El camino_1 rojo tiene un extremo al oeste y otro en un fin, el camino_2 amarillo tiene como extremos el sur y el este, mientras que el camino_3 amarillo tiene como extremos el fin (al igual que el camino rojo) y el norte.

Lo primero que se hace es instanciar los tres caminos en el orden que fueron descritos. Luego, se instancia la baldosa dándole como parámetro una lista que contiene al camino_1, camino_2 y camino_3. La baldosa tiene por defecto posición (-1,-1), por lo que al renombrar estos atributos, la baldosa queda ahora en la columna 65 y la fila 5, es decir, en el punto (5,65).

class Camino:
   def __init__(self,extremos,color):

       self.extremos = extremos
       self.color = color
       self.conquistado = False

   def __str__(self):

       return "Camino: extremos =" + " " + str(self.extremos) + ", " + "color = " + self.color

   def rotar(self,grados,sentido):
       self.grados = grados
       self.sentido = sentido

       for i in range(0,2):

           if sentido == "horario":
               if grados == 90:

                   if self.extremos[i] == "N":
                       self.extremos[i] = "E"

                   elif self.extremos[i] == "E":
                       self.extremos[i] = "S"

                   elif self.extremos[i] == "S":
                       self.extremos[i] = "O"

                   elif self.extremos[i] == "O":
                       self.extremos[i] = "N"

                   elif self.extremos[i] == "F":
                       self.extremos[i] = "F"

               elif grados == 180:

                   if self.extremos[i] == "N":
                       self.extremos[i] = "S"

                   elif self.extremos[i] == "E":
                       self.extremos[i] = "O"

                   elif self.extremos[i] == "S":
                       self.extremos[i] = "N"

                   elif self.extremos[i] == "O":
                       self.extremos[i] = "E"

                   elif self.extremos[i] == "F":
                       self.extremos[i] = "F"

               elif grados == 270:

                   if self.extremos[i] == "N":
                       self.extremos[i] = "O"

                   elif self.extremos[i] == "E":
                       self.extremos[i] = "N"

                   elif self.extremos[i] == "S":
                       self.extremos[i] = "E"

                   elif self.extremos[i] == "O":
                       self.extremos[i] = "S"

                   elif self.extremos[i] == "F":
                       self.extremos[i] = "F"

           elif sentido == "antihorario" :

               if grados == 90:

                   if self.extremos[i] == "N":
                       self.extremos[i] = "O"

                   elif self.extremos[i] == "O":
                       self.extremos[i] = "S"

                   elif self.extremos[i] == "S":
                       self.extremos[i] = "E"

                   elif self.extremos[i] == "E":
                       self.extremos[i] = "N"

                   elif self.extremos[i] == "F":
                       self.extremos[i] = "F"

               elif grados == 180:

                   if self.extremos[i] == "N":
                       self.extremos[i] = "S"

                   elif self.extremos[i] == "O":
                       self.extremos[i] = "E"

                   elif self.extremos[i] == "S":
                       self.extremos[i] = "N"

                   elif self.extremos[i] == "E":
                       self.extremos[i] = "O"

                   elif self.extremos[i] == "F":
                       self.extremos[i] = "F"

               elif grados == 270:

                   if self.extremos[i] == "N":
                       self.extremos[i] = "E"

                   elif self.extremos[i] == "O":
                       self.extremos[i] = "N"

                   elif self.extremos[i] == "S":
                       self.extremos[i] = "O"

                   elif self.extremos[i] == "E":
                       self.extremos[i] = "S"

                   elif self.extremos[i] == "F":
                       self.extremos[i] = "F"

class Baldosa:

   def caminos(self,camino,fila,col):

       self.camino = camino
       self.fila = -1
       self.col = -1

       return "Baldosa: Num. de Caminos =" + str(self.camino) + "Ubicacion =" + "("+ str(self.fila) + "," + str(self.col) + ")"




17-Jul-2021 22:19
Invitado (fer)

hola hernan

yo tamben estoy aprendiendo pero la salchicha de ifs da dolor de cabeza

deberias repensar un poco y hacerlo de otra manera

pregunta si es "F" al principio y te ahorras todas las "F" ya que devuelven lo mismo
lo demás desplazando una lista con "NSEO" colocada convenintemente las veces que diga i, hacia delante o hacia atrás dependiendo del sentido.

piensa como hacerlo pero eso da miedo de verlo

suerte ;-)


25-Jul-2021 13:47
Invitado (fer)

hola hernan

no entiendo bien que en que consiste tu programa, pero he intentado hacer que funcione y de la salida esperada

como verás tienes varios fallos, lo principal era quitar la salchicha de ifs  y hacer que funcionase

al quitar la salchicha verás que el código de las clases se queda en la mitad, de 120 a 60 y es mas legible

https://www.online-ide.com/TsVdEWpoKC

suerte ;-)






(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.)