TigerJython4Kids
HomeTurtlegrafikRobotikDatenbanken
zufallszahlen

8. ZUFALLSZAHLEN

 

 

DU LERNST HIER...

 

wie du Zufallszahlen erzeugen kannst. Da der Zufall im täglichen Leben eine ausserordentlich grosse Rolle spielt, kannst du mit Zufallszahlen solche Abläufe auf dem Computer nachbilden (simulieren). Wie bei einem Würfelwurf sind Zufallszahlen meist gleichverteilt, d.h. treten mit gleicher Häufigkeit (Wahrscheinlichkeit) auf.

 

 

MUSTERBEISPIEL

 

Du zeichnest 50 Sterne und legst ihre Position im Turtlefenster mit Zufallszahlen fest. Die Funktion randint(a, b) liefert bei jedem Aufruf eine ganzzahlige Zufallszahl im Bereich a, b. Beispielsweise erhältst du zufällige Würfelzahlen mit randint(1, 6).

Falls du mit einem rechteckigen Turtlefenster mit den Koordinaten 800x600 arbeitest, kannst du die x-Koordinaten der Sterne im Bereich -370, 370 und die y-Koordinaten im Bereich -270, 270 zufällig wählen.

Die Funktion star() zeichnet einen einzelnen Stern. 

 
from gturtle import *
from random import randint

def star():
    startPath()
    repeat 5:        
        forward(50)
        left(144)
    fillPath()    

makeTurtle()        
hideTurtle()

repeat(50):  
    x = randint(-270, 270)
    y = randint(-270, 270)
    setPos(x, y)
    star()
► In Zwischenablage kopieren
 

 

Man kann auch die Farben zufällig wählen. Die rote, grüne und die blaue Farbkomponente einer Farbe können als Zufallszahlen im Bereich 0 bis 255 erzeugt werden.

c = makeColor(randint(0, 255), randint(0, 255), randint(0, 255)) erzeugt eine zufällige Farbe.

Im TigerJython kann eine zufällige Far

be auch mit dem Befehl c = getRandomX11Color() erzeugt werden.

 

from gturtle import *
from random import randint

def star():
    startPath()
    repeat 5:        
        forward(50)
        left(144)
    fillPath()    

makeTurtle()        
hideTurtle()
clear("darkblue")

repeat(50): 
    c = makeColor(randint(0, 255), randint(0, 255), randint(0, 255))
    setPenColor(c)
    setFillColor(c) 
    x = randint (-270, 270)
    y = randint (-270, 270)
    setPos(x, y)
    star()
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

from random import randint importiert die Funktion randint() aus dem Modul random. randint(a, b) erzeugt eine ganzzahlige Zufallszahl zwischen a und b, wobei a die kleinste und b die grösste Zahl ist.

 

 

ZUM SELBST LÖSEN

  1.
Zeichne 100 gefüllte Kreise (dots). Die Position der Kreise, ihr Durchmesser und ihre Farbe sind zufällig.  


  2.

Random walk
Die Turtle startet an der Homeposition (0, 0) und bewegt sich wiederholt (z. B. 200 mal) um 20 Schritte in einer zufällig gewählten Richtung vorwärts.

Um die Bewegungsrichtung festzulegen, kannst du Funktion setHeading(angle) verwenden, wobei angle eine Zufallszahl zwischen 0 und 360 ist.

 

 



  3.
Zufällige n-Ecke
In deinem Programm wird bei jedem Lauf eine zufällige ganze Zahl n zwischen 3 und 12 erzeugt. Die Turtle zeichnet danach ein entprechendes regelmässiges n-Eck und füllt es mit einer zufälligen Farbe.
 

 

   

 

8-1
Fachliche Hinweise:

Es gibt zwei Möglichkeiten eine ganzzahlige Zufallszahl zu erzeugen:

1) Du importierst nur dir Funktion randint() aus dem Modul random und kannst diese dann direkt aufrufen

   from random import randint
   x = randint(1, 6)

2) Du importierts das ganze Modul random und rufst die Funktion randint() wie folgt auf:

   import random
   x = random.randint(1, 6)

-------------------------------------------------------------------------------

Das Modul random enthält auch die Funktion random().

   import random
   x = random.random()

erzeugt eine Zufallszahl mit 12 Dezimalstellen, grösser gleich 0 und kleiner als 1
(zum Beispiel. 0.854704980293) .
8-1
Fachliche Hinweise:

Für die Schreibweise von algebraischen Ausdrücken ist Folgendes zu beachten:

  • Zur Klammerung gibt es nur die runden Klammern, die immer als Klammerpaar gesetzt werden müssen. Die Abarbeitung erfolgt von "Innen nach Aussen"
  • Das Multiplikationszeichen * muss immer gesetzt werden, d.h. 2x muss als 2 * x geschrieben werden
  • Es gibt keinen durchgehenden Bruchstrich, d.h. Brüche müssen durch geeignete Klammerung geschrieben werden, beispielsweise
      (   a     / b + c als a / (b + c)
  • Für die Bindung bzw. der Rangfolge der Rechenoperationen gelten die gleichen Regeln wie in der Mathematik: + und - binden gleich stark, * und / ebenfalls; *  und / binden stärker als + und -.
  • Potenzen wie y = x2 können auf verschiedene Arten geschrieben werden:
    y = x * x
    y = x ** 2
    y  = math.pow(x, 2)

    Im letzten Fall muss noch import math im Programmkopf stehen
  • Leerschläge zwischen den Operationszeichen und Klammern können nach Belieben gesetzt werden. Es gehört zum guten Programmierstil, damit grosszügig umzugehen, aber insbesondere, sich immer an die gleichen selbstauferlegten Konventionen zu halten.
8-3
Didaktischer Hinweis:

Das Programm sollte noch "robust" gemacht werden, d.h. unsinnige Eingaben, die zu einem Programmabbruch führen, sollten mit einer Fehlermeldung zurückgewiesen werden, beispielsweise falls a grösser als c gewählt wird. Da if-Bedingungen noch nicht behandelt sind, wird diese Verbesserung auf später verschoben.

8-4
Fachlicher Hinweis:

Eigentlich wird auch in Python nur ein Funktionswert zurückgegeben, und zwar ein Tupel. Mit der Kommaschreibweise return a, b in der Funktion f() werden a und b automatisch in ein Tupel verpackt und bei der Zuweisung  x, y = f() automatisch wieder ausgepackt.