Seite 1 von 1

Zufällige Funktionen/Variablen ausgeben lassen?

Verfasst: Samstag 14. November 2015, 18:44
von M&M's_Knabberer
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 :)

Re: Zufällige Funktionen/Variablen ausgeben lassen?

Verfasst: Samstag 14. November 2015, 19:00
von mutetella
@M&M's_Knabberer
Schau' Dir doch mal die Dokumentation zum `random`-Modul an. Da wirst Du mehrere Möglichkeiten finden...

Re: Zufällige Funktionen/Variablen ausgeben lassen?

Verfasst: Samstag 14. November 2015, 19:15
von M&M's_Knabberer
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

Re: Zufällige Funktionen/Variablen ausgeben lassen?

Verfasst: Samstag 14. November 2015, 19:19
von Hyperion
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

Re: Zufällige Funktionen/Variablen ausgeben lassen?

Verfasst: Samstag 14. November 2015, 19:42
von M&M's_Knabberer

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 ?

Re: Zufällige Funktionen/Variablen ausgeben lassen?

Verfasst: Samstag 14. November 2015, 20:21
von 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.

Re: Zufällige Funktionen/Variablen ausgeben lassen?

Verfasst: Samstag 14. November 2015, 22:11
von M&M's_Knabberer
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.

Re: Zufällige Funktionen/Variablen ausgeben lassen?

Verfasst: Samstag 14. November 2015, 22:29
von 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.