[ Foro de Python ]
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) + ")"
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 ;-)
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.)