Zufällige Funktionen/Variablen ausgeben lassen?

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
M&M's_Knabberer
User
Beiträge: 34
Registriert: Sonntag 27. September 2015, 17:05

Ist es möglich irgendwie zufällig Variablen bzw Funktionen auszugeben?
Ich kenne nur Random.. damit kann man ja zufalls Zahlen ausgeben.. aber ist es auf irgendeine Weise Möglich damit oder mit einem anderen Modul zufalls Funktionen/Variablen auszugeben?

Sinn dahinter... ich möchte das sich mein Strichmännchen jetzt zufällig über den Bildschirm bewegt.
Bis jetzt läuft er auf und ab rechts und links in einem Kreis.. Mit mehreren Funktionen die verschiedene Richtungen angeben, könnte man dann vielleicht mit nem Zufallsgenerator dafür sorgen das die eine oder andere Richtung gewählt wird also die Funktion mit Richtungsangabe..

Ist soetwas möglich? Wenn ja wie? Danke :)
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@M&M's_Knabberer
Schau' Dir doch mal die Dokumentation zum `random`-Modul an. Da wirst Du mehrere Möglichkeiten finden...
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
M&M's_Knabberer
User
Beiträge: 34
Registriert: Sonntag 27. September 2015, 17:05

Danke, ich habe es jetz mal so versucht:

Code: Alles auswählen

import random
random.seed()

def wahl():
    a = random.randint(1,2)
    b=2
    if a==b:
        while True:
            for zaehler in range (1,10):
                x = x+5
                lauf()
                break
    else:
        while True:
            for zaehler in range (1,10):
                x = x+5
                lauf()
            for zaehler in range (1,10):
                y = y+5
                lauf()
            for zaehler in range (1,10):
                x = x-5
                lauf()
            for zaehler in range (1,10):
                y = y-5
                lauf()
                break


while True:
    wahl()

der zeigt mir dann :

Traceback (most recent call last):
line 64, in <module> wahl()
line 48, in wahl x = x+5
UnboundLocalError: local variable 'x' referenced before assignment

also es läuft ohne Funktion, mit der Funktion funktioniert es nicht.. :(
kann mir jemand sagen was ich falsch gemacht habe? Danke
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

In Python ist (fast) alles ein Objekt. Man kann daher auch Funktionen in Container stecken und diese damit dynamisch aufrufbar machen.

Anbei ein kleines Beispiel, das das verdeutlicht (natürlich sind die Funktionen so wenig sinnvoll!);

Code: Alles auswählen

In [1]: def move_up():
   ...:     print("Bewege mich hoch")
   ...:

In [2]: def move_down():
   ...:     print("Bewege mich runter")
   ...:

In [3]: from random import choice

In [4]: movements = (move_up, move_down)

In [5]: for _ in range(5):
   ...:     choice(movements)()
   ...:
Bewege mich runter
Bewege mich runter
Bewege mich hoch
Bewege mich runter
Bewege mich hoch
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
M&M's_Knabberer
User
Beiträge: 34
Registriert: Sonntag 27. September 2015, 17:05

Code: Alles auswählen

import random
random.seed()

while True:
    a = random.randint(1,2)
    b=2
    if a==b:
        while True:
            for zaehler in range (1,10):
                x = x+5
                lauf()
            break

                
    else:
        while True:
            for zaehler in range (1,10):
                x = x+5
                lauf()
            for zaehler in range (1,10):
                y = y+5
                lauf()
            for zaehler in range (1,10):
                x = x-5
                lauf()
            for zaehler in range (1,10):
                y = y-5
                lauf()
            break
jetz hab ich es geschaft.. das Strichmännchen läuft über den Bildschirm zufällig entweder im Kreis oder geradeaus :D

@Hyperion
meinst du das man die Funktionen in einer Liste verpacken soll?
zb zwei listen eine mit a = [funktion()] zweite mit b = [funktion()] und die dann mit random zufällig aufrufen kann? Das wäre ja auch sehr nützlich, wenn du sowas meinst ?
BlackJack

@M&M's_Knabberer: Was sollen denn diese unsinnigen ``while True:``-Schleifen mit den ``breaks`` die genau einmal durchlaufen?

Und nimm das überflüssige `random.seed()` wieder heraus. Das hat keinen beziehungsweise im schlimmsten Fall den Effekt das mehrere Läufe immer die gleiche Zufallsfolge haben, also das Gegenteil von dem was Du wahrscheinlich dachtest was dieser Aufruf bewirkt.
M&M's_Knabberer
User
Beiträge: 34
Registriert: Sonntag 27. September 2015, 17:05

ja hast recht die While Schleifen waren überflüssig.
Läuft jetz ganz gut danke
hab dann versucht noch ne Zweite figur einzufügen.. aber dann passiert folgendes: erst läuft die eine Figur auf dem Bildschirm, dann die zweite..
nicht ganz das was ich mir gedacht habe. Schätze mal mit den Sprites wird das dann wohl gleichzeitig gehen ok dann werd ich mich darin mal einarbeiten.
BlackJack

@M&M's_Knabberer: Wenn etwas nicht so läuft wie Du es Dir gedacht hast, dann musst Du herausfinden warum und nicht hoffen das das auf magische Weise anders wird. Denn auch bei Sprites verhält sich Python so wie es sich halt grundsätzlich verhält: Wenn man ein Programm schreibt bei dem zwei Sachen nacheinander gemacht werden, dann werden die halt auch nacheinander gemacht. Wenn man will das sie ”gleichzeitig” gemacht werden, dann muss man das auch so schreiben.
Antworten