Ich möchte einen Rubik-Würfel randomisieren, der als vollständig initialisiert ist (alle Farben auf der richtigen Seite). Ich habe Bewegungsfunktionen, die den Würfel drehen. Ich möchte nach dem Zufallsprinzip 50 Funktionen in einer Reihe auswählen, um sie richtig zu randomisieren.Verwenden von Dictionaries in Python anstelle der Case/Switch-Anweisung
Ich mache dieses Projekt, um ein wenig mehr über Python zu lernen, da ich meistens C++ mache und ich sehe, dass es keinen Fall/Schalter für Python gibt, also versuche ich ein Wörterbuch. Als ich das Wörterbuch zu machen, scheint der Code aus irgendeinem Grund auszuführen:
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]
Also, wenn ich dieses Wörterbuch machen, es durch und führen Sie alle 11 Einträge aus irgendeinem Grund scheint zu laufen (glaube ich). Ich finde keinen besseren Weg, zumindest eleganter als eine lange Reihe von Aussagen.
! BEARBEITEN: Bei der Umsetzung beider Vorschläge wird das ("invertierte") Flag für die Funktionen nicht durch einen der beiden Vorschläge gesetzt. Zum Beispiel, rufen Sie 1 und 7 beide geben Sie down_turn, aber die Ausgabe zeigt, dass das Flag nicht gesetzt wurde, wenn es auf Nummer 7 hätte sein sollen.
Irgendwelche Ideen?
Als Design-Note, es gibt wirklich nur zwei verschiedene sind unterwegs s kann man auf einem Zauberwürfel tun.Der Rest ist nur eine Frage der Ausrichtung der Gesichter. Es könnte einfacher sein, eine Funktion wie folgt zu schreiben: 'def rotate (face, clockWise = True):' Alternativ zur Verwendung einer dict- und 'for'-Schleife können Sie eine Liste erstellen und' random.choice' verwenden Wählen Sie daraus. –
für die random.choice aus der Liste, habe ich auch daran gebastelt. Ich habe die Funktionsaufrufe in eine Liste eingefügt und das versucht, aber nicht ganz für mich funktioniert ... Außerdem habe ich den Würfel so aufgebaut, dass er immer weiß wie "vorne" ist. Ich denke nicht, dass das der beste Weg war, es darzustellen: \ –