Zum Inhalt

Zufallszahlen

Die Ausführung eines Programmes ist grundsätzlich deterministisch, d.h. egal wie oft es ausgeführt wird, bei gleicher Eingabe resultiert immer die gleiche Ausgabe.

Es ist aber möglich auch den Zufall zu verwenden. Wir können z.B. mit dem Rechner virtuelle würfeln. Bei einem normalen Würfel sind alle sechs Seiten (Ziffern) gleich wahrscheinlich. Die aus einem Würfel Wurf resultierende Zahlen nennen wir auch gleichverteilt.

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.

Beispiel: zufällig würfeln

Beispielsweise erhältst du zufällige Würfelzahlen mit randint(1, 6).

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Beispiel: Zufällige Sterne

Dieses Programm zeichnest 50 Sterne und legt ihre Position mit Zufallszahlen fest. Die Funktion randint(a, b) liefert bei jedem Aufruf eine ganzzahlige Zufallszahl im Bereich a, b. Nachfolgend wählen wir die x-Koordinaten der Sterne im Bereich -250, 250 und die y-Koordinaten im Bereich -200, 200 zufällig aus.

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Beispiel: Zufällige Sterne mit Farbe

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.

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Aufgaben

Ausprobieren

Question

Überlege dir zum vorherigen Beispiel Antworten auf die folgenden Fragen:

  • Was genau bedeuten die x und y Werte?
  • Wo entstehen die Farben?
  • Wie entstehen die Farben?
  • Wie findest du die Antworten zu den vorherigen Fragen?
Lösung

Die x und y Werte sind die Koordinaten eines Punktes auf der Zeichenfläche. x beschreibt den Punkt in der horizontalen Richtung: kleine (negative) x Werte sind links, grosse Werte Rechts. y beschreibt die vertikale Richtung (unten/oben).

Die Farbe wir auf Zeile 17 generiert und zwar wird das RGB-Modell verwendet, in dem für alle drei Kanäle eine Zufallszahl zwischen 0 und 255 (grösster Wert in einem Byte) generiert wird.

Zufällige Punkte

Question

Zeichne 100 gefüllte Kreise (dots). Die Position der Kreise, ihr Durchmesser und ihre Farbe sind zufällig. Verwende dazu den dot(DURCHMESSER) Befehl.

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013d/*n(Px52Lc8oysvf70;wrkqelö4 u-3tm1bTipCg):,a6=9h050b0z0H0T0M0A0p0D0l0A0T0p0p0V010H0M0N010406050p0E0I0I0T0w0o040k0B0|0e0P050c0|0~10120`0N04051g191j0c1g0`0b0M0q0*0,0.0:0X0M0P0X0A1x0X0H0^050#0K0A0z1s0-0/011w1y1A1y0H1G1I1E0H0w1h0H0X0*0n0(0N0T0e0:0j011K1u010r0%0z0e0T0I0z1E0p1(0e1.1M1;1I1@1_0^0a0D14160P0p0q0n0w0p0l1z0T181a1}1h0c1Z2m1W1Y1X1F0b1 0:1A0e1?0n0p1E1p1r0+1L2w0M2y0e0n2D1E0N0w0z1h1|1)2m2S0e2R1}2v012K0w0 0A0^0D0J192V0_0{2Y2F1/2#2%2)0j2,2l0`2V2Z2?0T2(040D0G2`2T2|2:1t1M2 310D0C352W371)2~2d2@320i3f2.2}2;3a3k302)0U3o3h1~3r0:3b2)0s3x2/3i3A2!3t3c0m3F3q393B3K2)0W3N382G3J2$3u040J0t3U3H3P3X3l0J2+2k363G3z3)3C3!2_3.3g3:3j3Y310J343_3p3V2=3R3!3e413y3|3+3n483{3I3?0J3w4d3O3W4g3E4j433s3}0^0J3M4o3(4l450J3T411k2P2m2D2p0b1Y2u3I0l2L1`1h4F1i4D3:2U2l054L0Z2X4w1/0x0e0^0r0w0n0I3o0D4e3=4$040P0H0E0w0H1I4,4.3W4#0^0M0I0N2d0H4{4k1/0n0^0d3%3;4}4:4(4*554p3B4:0w1)0b5g414-561M4~0450524^5h4Z3a0^5l0e1p0e5448494f0^0 0x0z0L4@4_0z3o4|1/0@040f0Q3x5I3=0^1w0Z5O4^4`4B5r0:5V5X5b2~0^1|0z0z0b5S5-015/5{5i010I0M0^3$5,605V5Y4v5c2=0^0K0P4L0A2d5 5z5.0^0f6j6b1M0p1,04020y0E0n0H0u1H0T0l0x6u6w6y6o2Z685Z5T5s4%6i5p6L3B4 5y6p0:0n0v4 0e6T2~0K5B1)0P5R666k5}6m6H3I620^0G0t652-6Q6-040Q0R3x0D705q604:0l6!3I58040V765#045L0z0O1$6O6_5|5~6+6U2!6%5D2I5G7j676.7m2Z6;046^4U7k0^0S7b3W7y0j0i4c7t6,687E6P5|5k5m7r6/3)7l7L7n7y7A2T6`5V7O2-726,7H7J7U3W7N7F6c045C5E7s7B7u5W7.1/7Z7}1M7%7;1M7,7K7`7M0^0Q692-06717*7n4:0p0!0g1?7g6h0w806l7|7w5J04758s7V895Z8e6`4:0h836V0^7a7P737p7^8p6{6n8w3W780F8M7y0G0j7!2W7$7D8E6163048V8X4Y7n6J488A7Q0^0o8#788H7)8B8K7T8P5U7v7X2Z8R8T8%0j0C8*8Z047(2l8f7x94968M8-8c8/8J048i0H0g2A9g8 878g0^8D8}818!8I6,4:8=9w8q8b2{8d718`040b4@2g1_0.0z8o9z7n8@8#7R7q5F9q8r906:8%3#9Z9a2T9c9$0^0m977C6|6 9I8:9K6x9Z8O9#7c9L0w9N0z9P9R9}7/8y4d0c4W2Q4Cab0c4P2n4H192qai0T1Had4F0`ae0!0$0(04.
Lösung
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from gturtle import *
from random import randint

makeTurtle()

hideTurtle()
speed(0)
bgcolor("black")

for i in range(300):
    c = makeColor(randint(0, 255), randint(0, 255), randint(0, 255))
    setPenColor(c)

    x = randint(-320, 320)
    y = randint(-240, 240)
    setPos(x, y)

    durchmesser = randint(10, 80)
    dot(durchmesser)

Zufälliger Spaziergang

Question

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 den Befehl setHeading(angle) verwenden. Dabei sollte angle eine Zufallszahl zwischen 0 und 360 sein, die du zuerst erstellen musst.

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013d/*n(PxH52Lc8oysvf70wFrkelö4 uE3tm1bTipCg):,a6=9h050b0z0H0T0M0A0q0D0m0A0T0q0q0V010H0M0N010406050q0E0I0I0T0x0p040l0B0|0e0P050c0|0~10120`0N04051g191j0c1g0`0b0M0r0*0,0.0:0X0M0P0X0A1x0X0H0^050#0K0A0z1s0-0/011w1y1A1y0H1G1I1E0H0x1h0H0X0*0o0(0N0T0e0:0k011K1u010s0%0z0e0T0I0z1E0q1(0e1.1M1;1I1@1_0^0a0D14160P0q0r0o0x0q0m1z0T181a1}1h0c1Z2m1W1Y1X1F0b1 0:1A0e1?0o0q1E1p1r0+1L2w0M2y0e0o2D1E0N0x0z1h1|1)2m2S0e2R1}2v012K0x0 0A0^0D0J192V0_0{2Y2F1/2#2%2)0k2,2l0`2V2Z2?0T2(040D0G2`2T2|2:1t1M2 310D0C352W371)2~2d2@320j3f2.2}2;3a3k302)0U3o3h1~3r0:3b2)0t3x2/3i3A2!3t3c0n3F3q393B3K2)0W3N382G3J2$3u040J0u3U3H3P3X3l0J2+2k363G3z3)3C3!2_3.3g3:3j3Y310J343_3p3V2=3R3!3e411k2P2m2D2p0b1Y2u3I0m2L1`1h4c1i4a3:2U2l054i0Z2X3(3W0y0e0^0s0x0o0I3o0D3{3I0e4z040P0H0E0x0H1I4F4H3)4y0^0M0I0N2d0H4S3O3W0o0^0d3%3;4x4K4B4D4$433a4K0x1)0b4;414G4%1/4V044X4Z4P4=4w2=0^4_0e1p0e4#41063y2~0^0 0y0z0L4O4Q0z3o4T3W0@040f0Q4,5i041|0z0z0b5r4 1M5u0f5F4?0:0I0M0^3$485G0:5u5x5f5h3I0y4A2d564-58525$2Z0o0v4W0e5*4I0K591)0P5q5R5L015I5K571M5N0^0k0u5Q2-5s1/5U0R3x0D6c4~5{4^0M2g4N175:3)4)040V6l3W4^4`2I5e665S5|0^5J5`5 5M5O04654r6x5u0S6q1/61040G0U6G2T675H0^5V2-066d6e6C2!0^0q0!0i0z0T5c2j6w5{5}6B5%3a596h1C0E6k6=2Z5U6b6d6T3B5!0x0v105E6}3I6;6/6#6N635~6?5T6V3x6Y716x0m0J0^030D0F0h1W0T0R0D0v0z2g6(0A5b1J0w100K5_6X6Z72017o7q0*0D0V0D5k0z0O1$2d0f5a5c0H0f0u0S0D0k0j0j0Q7)7!6u7%7)7+7-7/6t5d7=7*7,0Q6W2{7L7n7p047r6(0H0g1?7W0A7Y0m803/0c4t2Q498j0c4m2n4e192q8q0T1H8l4c0`8m0!0$0(04.
Lösung
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
from gturtle import *
from random import randint

makeTurtle()
speed(0)

for i in range(200):
    richtung = randint(0, 360)
    setHeading(richtung)
    forward(20)

    # Extra: wechselnde Farbe
    # c = makeColor(randint(0, 255), randint(0, 255), randint(0, 255))
    # setPenColor(c)

Zufälliges N-Eck

Question

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.

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013d/*n(Px52Lc8oysvf70wFrkelö4 u-E3tm1bTi_pCg):zN,a6=9h050b0y0H0W0M0z0p0C0l0z0W0p0p0Y010H0M0O010406050p0D0I0I0W0w0o040k0A0 0e0Q050c0 1113150}0O04051j1c1m0c1j0}0b0M0q0-0/0;0?0!0M0Q0!0z1A0!0H0{050(0K0z0y1v0:0=011z1B1D1B0H1J1L1H0H0w1k0H0!0-0n0+0O0W0e0?0j011N1x010r0*0y0e0W0I0y1H0p1+0e1;1P1@1L1`1|0{0a0C17190Q0p0q0n0w0p0l1C0W1b1d201k0c1$2p1Z1#1!1I0b220?1D0e1_0n0p1H1s1u0.1O2z0M2B0e0n2G1H0O0w0y1k1 1,2p2V0e2U202y012N0w120z0{0C0J1c2Y0|0~2#2I1=2(2*2,0j2/2o0}2Y2$2_0W2+040C0G2}2W2 2?1w1P32340C0B382Z3a1,312g2`350i3i2;302@3d3n332,0X3r3k213u0?3e2,0s3A2=3l3D2%3w3f0m3I3t3c3E3N2,0Z3Q3b2J3M2)3x040J0t3X3K3S3!3o0J2.2n393J3C3,3F3%2|3;3j3?3m3#340J373|3s3Y2^3U3%3h443B3 3.3q4b3~3L3_0J3z4g3R3Z4j3H4m463v400{0J3P4r3+4o480J3W4y3@4A4u040j3)4E4d3$0j3:2:4c4i480j3{4Q4h3^4T434W4n474H0j4a4#4s3T4(4f4+4z4%3o0j4l4:4F4=4N4q2:1n2S2p2G2s0b1#2x3L0l2O1}1k521l503?2X2o05580$2!4;1P0x0e0{0r0w0n0I3r0C4X4o5p040Q0H0D0w0H1L5v5x1=5o0{0M0I0O2g0H5H4$1P0n0{0d3*4`5n5z5r5t5R4,2%5z0w1,0b5$445w5S0?5K045M5O5E5%5m3E0{5+0e1s0e5Q4b4R3^0{120x0y0L5D5F0y3r5I1P0`040f0R5X310{1z0$6b5E5G446g0?6i6k6m4i0{1 0y0y0b6f5;016x6G5(0I0M0{4K4~6H6i6l64653Z0x0{0$0r5{5Y3E0r0{0e0N0y0l0x6K5|6I0{0f6/6$2%0{0U6@2$6S0S3A0C715:5(5z0l6#2$5U040Y776A04680y0P1)2g6|3L6J6u6H5*5,2L636Q5(7m7t6:6M6O7k3,6i0V7c3,7y4I0i4/5h6R0{0R7D5/6v6_045 617s7K7u6=7A3Z7G6P7W6:7C7E7!6N7H7J2W7Q6S7O2:736:7p607r7Z1=7v7%6^7#7|6h0{7=2o7@807,0j7I826w7M6T4Q72876n040p0%0g1_7h0z7j7n7X6j8c7R768s7(7M70727Q5z8l0H0v0*0z8p8r7w6^7~7/7o0{8x8M6}8A648h8D0{0K0y0Q2L0N240z8v6x8f2~8X6H6X040r8L868Y5@7*1=0n0u5L0e8{3d0K5~1,0Q6e8y8N7Y988j6{9b7l7M6 4b8h8/745q2g0u136F9e7B9a8T3L7G0G7$8P8t8-399j8C8Q041L0r7V9z8z8u9r7+0{0G0X9y2Z8i3L790c915}049d9u9s049B3j9k7^0{1_0b8(8I8+6=9)0|066V5J9m0w9Y7R0M9~8}8 9~0e937S95979$3Z8O2Z7Q7G4J9=9(9h8g9E9l040ha10{7b7P9F7T7{9N7}9t7 780{0E8v9w0t9S5l9904852W9U7F7,9xaG7:8Vak718_0oap7aa4947`62ah6?aw5TaBaD890BaQ7LaJ9~afa.ah9@069+6^8E8m2Da%8v5zaoa)8da;asamaWb46;9(3Aa`al9,041,0T0W1C0F6-1_aXar7?8_aua$baacaH2$9wahaK9Tae7,0J4Vaz9fbc9ibfa|6)6+6-b0ba5zbibk0zbm6990bvaS2~1c5j2T4 b(0c5c2q541c2tb/0W1Kb*520}b+0%0)0+04.
Lösung
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from gturtle import *
from random import randint

makeTurtle()
hideTurtle()
speed(0)


def n_eck(N):
    c = makeColor(randint(0, 255), randint(0, 255), randint(0, 255))
    setPenColor(c)
    setFillColor(c)

    begin_fill()
    for i in range(N):
        forward(30)
        left(360 / N)
    end_fill()


for i in range(20):
    x = randint(-300, 300)
    y = randint(-240, 240)
    setPos(x, y)

    anzahlEcken = randint(3, 12)
    n_eck(anzahlEcken)

Eigene Zeichnung

Question

Versuche nun Zufallszahlen zu verwenden, um einen selber etwas zu Zeichen. Mit den Zufallszahlen kannst du die Position von Objekten, die Farbe, Grösse, sowie wie auch deren Art bestimmen. Lass deiner Kreativität freien Lauf!

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.