Quiero aleatorizar un cubo de rubik que se inicializa como completo (todos los colores en los lados correctos). Tengo funciones de movimiento que rotan el cubo. Quiero seleccionar aleatoriamente 50 funciones seguidas para aleatorizarlas adecuadamente.Usar diccionarios en Python en lugar de la sentencia Case/Switch
Estoy haciendo este proyecto para aprender un poco más sobre Python, ya que la mayoría de las veces hago C++ y veo que no hay ningún caso/interruptor para Python, entonces estoy intentando un diccionario. Cuando hago el diccionario, el código parece ejecutar por alguna razón:
def random_cube(self):
scramble = { 0 : self.up_turn(),
1 : self.down_turn(),
2 : self.left_turn(),
3 : self.right_turn(),
4 : self.front_turn(),
5 : self.back_turn(),
6 : self.up_turn("inverted"),
7 : self.down_turn("inverted"),
8 : self.left_turn("inverted"),
9 : self.right_turn("inverted"),
10: self.front_turn("inverted"),
11: self.back_turn("inverted")
}
for x in range(50):
i = random.randint(0,11)
scramble[i]
Así que cuando hago este diccionario, parece correr a través y ejecutar todas las 11 entradas por alguna razón (creo). Parece que no puedo encontrar una manera mejor, al menos más elegante que una larga cadena de declaraciones if/elif.
! EDIT: Implementando ambas sugerencias, el indicador ("invertido") para las funciones no se establece por ninguna sugerencia. Por ejemplo, las llamadas 1 y 7 me dan un down_turn, pero el resultado muestra que el indicador no se configuró cuando debería haber estado en el número 7.
¿Alguna idea?
Como nota al diseño, en realidad sólo hay dos movimiento diferente s uno puede hacerlo en un cubo de rubik.El resto es solo una cuestión de cómo uno orienta las caras. Puede ser más fácil escribir una función así: 'def rotate (face, clockWise = True):' También como alternativa al uso de un dict y 'for' loop, podrías hacer una lista y usar' random.choice' para seleccionar de ella –
para random.choice de la lista, también lo hice con eso. Puse las llamadas de función en una lista y lo intenté, pero no funcionó para mí ... También configuré el cubo para que siempre se viera de color blanco como 'frontal'. No creo que esa sea la mejor manera de representarlo: \ –