Die Funktion random.choice wird verwendet, um eine zufällige Auswahl aus einer Aufzählung von Dingen zu erhalten. Dabei entscheidet der Programmierer selbst, aus was für Dingen er auswählen will. Das macht die Auswahl sehr vielseitig; kann aber auch zu Verständnisproblemen führen. Fangen wir ganz einfach an (zunächst ohne direkten Bezug zum Roboterauto):
zufallswert = random.choice(["Kopf", "Zahl"])
Hier wird aus den Zeichenreihen "Kopf", "Zahl" eine zufällig gewählt. Die Auswahl ist auch das Ergebnis des Funktionsaufrufs. Wenn Du die gezeigte Anweisung in einer Schleife 10 mal ausführst, hast du gute Chancen, "kopf" und "Zahl" ungefähr gleich oft zu erhalten. Gleiche Häufigkeit (5 zu 5) ist aber nicht garantiert.
Dieses Beispiel ist natürlich das bekannte Münzenwerfen - eben nach Python übersetzt.
Ein anderes bekanntes Zufallsspiel - das Knobeln - kann man so schreiben:
zufallswert = random.choice(["Stein", "Schere", "Papier"])
Wenn schon von Spielen die Rede ist, in denen der Zufall eine Rolle spielt, darf natürlich der für Brettspiele unentbehrliche Würfel nicht fehlen. Hier ist er:
zufallswert = random.choice([1, 2, 3, 4, 5, 6])
Hier wählt die Funktion random.choice aus den Zahlen von 1 bis 6 eine zufällig aus; jede Ausführung des Ausdrucks liefert hier eine Zahl. Das ist ein Unterschied zu den beiden anderen Beispielen, bei denen das Ergebnis der Auswahl eine Zeichenreihe war.
Die schon mehrfach erörterte Anweisung
liefert eine der Zahlen 1, 2 in zufälliger Auswahl. Man könnte sagen, dass hier die Beispiele "Würfel" und "Kopf oder Zahl" kombiniert sind: Vom Würfelbeispiel kommt die Verwendung von Zahlen, vom Kopf-Zahl-Beispiel die Auswahl zwischen nur zwei Werten.
In
random.choice([motor_left, motor_right])
wird eine von zwei im Programm vereinbarten Funktionen zufällig ausgewählt - das ist Python für Fortgeschrittene. Es ist vielleicht besser, wenn Du dich zunächst an den Vorschlag im Beitrag #109 hältst, also eine der Zahlen 1, 2 zufällig ziehst und in einer mit if und else programmierten Fallunterscheidung entscheidest, welcher Motor nun eine Drehbewegung verursachen soll.
Zu der letzten Frage:
1 == motor_left()
2 == motor_right()
Das sind zwei Vergleichsanweisungen:
In der ersten Zeile wird geprüft, ob das Ergebnis des Aufrufs motor_left() der Zahl 1 gleich ist; das Ergebnis des Vergleichs wird aber weder genutzt noch gespeichert, sondern einfach weggeworfen.
In gleicher Weise wird in der zweiten Zeile geprüft, ob das Ergebnis des Aufrifs motor_right() der Zahl 2 gleich ist; das Ergebnis des Vergleichs wird ebenfalls weggeworfen.
Diese beiden Anweisungen machen also überhaupt nicht das, was Du wohl erwartet hast. Dass Du trotzdem keine Fehlermeldungen von Python bekommst, liegt daran, dass beide Anweisungen fehlerfrei sind - bloss eben etwas ganz anderes machen als Du erwartest. Wenn dieser Effekt auftritt - und er tritt in Python oft auf - hat man ein Problem: Wenn Anweisungen, die nicht das Erwartete tun, nach den Regeln der Programmiersprache fehlerfrei sind, gibt es von Seiten der Programmiersprache keinerlei Hilfe bei der Fehlersuche. Man muss dann selbst herausfinden, was falsch gelaufen ist.
Hier wurden keine Variablen erzeugt! Wenn Du Variablen erzeugen willst, musst Du daran denken, dass eine Variable mit einem Buchstaben beginnt. Also so:
Beachte hier auch, dass die Wertzuweisung an eine Variable mit einem Gleichheitszeichen zu schreiben ist; zwei aufeinanderfolgende Gleichheitszeichen bewirken einen Test auf Gleichheit und liefern einen logischen Wert als Ergebnis.