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?

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.

.128013öeshq;98fTt2lv1760g3-ndbcpmCo(ari=)/wy:*PL,k45 ux050x0c0l0F0H0n0d0V0z0n0F0d0d0I010l0H0A010406050d0W0B0B0F0G0M040Q0b0|0w0t050K0|0~10120`0A04051g191j0K1g0`0x0H0o0*0,0.0:0e0H0t0e0n1x0e0l0^050#0y0n0c1s0-0/011w1y1A1y0l1G1I1E0l0G1h0l0e0*0D0(0A0F0w0:0m011K1u010j0%0c0w0F0B0c1E0d1(0w1.1M1;1I1@1_0^0a0V14160t0d0o0D0G0d0z1z0F181a1}1h0K1Z2m1W1Y1X1F0x1 0:1A0w1?0D0d1E1p1r0+1L2w0H2y0w0D2D1E0A0G0c1h1|1)2m2S0w2R1}2v012K0G0 0n0^0V0p192V0_0{2Y2F1/2#2%2)0m2,2l0`2V2Z2?0F2(040V0u2`2T2|2:1t1M2 310V0T352W371)2~2d2@320U3f2.2}2;3a3k302)0r3o3h1~3r0:3b2)0q3x2/3i3A2!3t3c0i3F3q393B3K2)0h3N382G3J2$3u040p0s3U3H3P3X3l0p2+2k363G3z3)3C3!2_3.3g3:3j3Y310p343_3p3V2=3R3!3e413y3|3+3n483{3I3?0p3w4d3O3W4g3E4j433s3}0^0p3M4o3(4l450p3T411k2P2m2D2p0x1Y2u3I0z2L1`1h4F1i4D3:2U2l054L0Z2X4w1/0S0w0^0j0G0D0B3o0V4e3=4$040t0l0W0G0l1I4,4.3W4#0^0H0B0A2d0l4{4k1/0D0^0O3%3;4}4:4(4*554p3B4:0G1)0x5g414-561M4~0450524^5h4Z3a0^5l0w1p0w5448494f0^0 0S0c0k4@4_0c3o4|1/0@040E0J3x5I3=0^1w0Z5O4^4`4B5r0:5V5X5b2~0^1|0c0c0x5S5-015/5{5i010B0H0^3$5,605V5Y4v5c2=0^0y0t4L0n2d5 5z5.0^0E6j6b1M0d1,04020f0W0D0l0g1H0F0z0S6u6w6y6o2Z685Z5T5s4%6i5p6L3B4 5y6p0:0D0L4 0w6T2~0y5B1)0t5R666k5}6m6H3I620^0u0s652-6Q6-040J0N3x0V705q604:0z6!3I58040I765#045L0c0C1$6O6_5|5~6+6U2!6%5D2I5G7j676.7m2Z6;046^4U7k0^0R7b3W7y0m0U4c7t6,687E6P5|5k5m7r6/3)7l7L7n7y7A2T6`5V7O2-726,7H7J7U3W7N7F6c045C5E7s7B7u5W7.1/7Z7}1M7%7;1M7,7K7`7M0^0J692-06717*7n4:0d0!0P1?7g6h0G806l7|7w5J04758s7V895Z8e6`4:0X836V0^7a7P737p7^8p6{6n8w3W780v8M7y0u0m7!2W7$7D8E6163048V8X4Y7n6J488A7Q0^0M8#788H7)8B8K7T8P5U7v7X2Z8R8T8%0m0T8*8Z047(2l8f7x94968M8-8c8/8J048i0l0P2A9g8 878g0^8D8}818!8I6,4:8=9w8q8b2{8d718`040x4@2g1_0.0c8o9z7n8@8#7R7q5F9q8r906:8%3#9Z9a2T9c9$0^0i977C6|6 9I8:9K6x9Z8O9#7c9L0G9N0c9P9R9}7/8y4d0K4W2Q4Cab0K4P2n4H192qai0F1Had4F0`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.

.128013öesh98fTt2lv1760g3HndbcFpmCo(ari=)/wy:*EPL,k45 ux050v0c0j0E0G0l0d0V0x0l0E0d0d0H010j0G0z010406050d0W0A0A0E0F0L040Q0b0|0u0r050J0|0~10120`0z04051g191j0J1g0`0v0G0m0*0,0.0:0e0G0r0e0l1x0e0j0^050#0w0l0c1s0-0/011w1y1A1y0j1G1I1E0j0F1h0j0e0*0C0(0z0E0u0:0k011K1u010h0%0c0u0E0A0c1E0d1(0u1.1M1;1I1@1_0^0a0V14160r0d0m0C0F0d0x1z0E181a1}1h0J1Z2m1W1Y1X1F0v1 0:1A0u1?0C0d1E1p1r0+1L2w0G2y0u0C2D1E0z0F0c1h1|1)2m2S0u2R1}2v012K0F0 0l0^0V0n192V0_0{2Y2F1/2#2%2)0k2,2l0`2V2Z2?0E2(040V0s2`2T2|2:1t1M2 310V0T352W371)2~2d2@320U3f2.2}2;3a3k302)0p3o3h1~3r0:3b2)0o3x2/3i3A2!3t3c0g3F3q393B3K2)0f3N382G3J2$3u040n0q3U3H3P3X3l0n2+2k363G3z3)3C3!2_3.3g3:3j3Y310n343_3p3V2=3R3!3e411k2P2m2D2p0v1Y2u3I0x2L1`1h4c1i4a3:2U2l054i0Z2X3(3W0S0u0^0h0F0C0A3o0V3{3I0u4z040r0j0W0F0j1I4F4H3)4y0^0G0A0z2d0j4S3O3W0C0^0N3%3;4x4K4B4D4$433a4K0F1)0v4;414G4%1/4V044X4Z4P4=4w2=0^4_0u1p0u4#41063y2~0^0 0S0c0i4O4Q0c3o4T3W0@040D0I4,5i041|0c0c0v5r4 1M5u0D5F4?0:0A0G0^3$485G0:5u5x5f5h3I0S4A2d564-58525$2Z0C0K4W0u5*4I0w591)0r5q5R5L015I5K571M5N0^0k0q5Q2-5s1/5U0M3x0V6c4~5{4^0G2g4N175:3)4)040H6l3W4^4`2I5e665S5|0^5J5`5 5M5O04654r6x5u0R6q1/61040s0p6G2T675H0^5V2-066d6e6C2!0^0d0!0t0c0E5c2j6w5{5}6B5%3a596h1C0W6k6=2Z5U6b6d6T3B5!0F0K105E6}3I6;6/6#6N635~6?5T6V3x6Y716x0x0n0^030V0O0X1W0E0M0V0K0c2g6(0l5b1J0y100w5_6X6Z72017o7q0*0V0H0V5k0c0B1$2d0D5a5c0j0D0q0R0V0k0U0U0I7)7!6u7%7)7+7-7/6t5d7=7*7,0I6W2{7L7n7p047r6(0j0P1?7W0l7Y0x803/0J4t2Q498j0J4m2n4e192q8q0E1H8l4c0`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.

.128013öesh98fTt2lv17_60g3-ndbcFpmCo(ari=)/wy:*NPzEL,k45 ux050w0c0j0F0H0l0d0Y0y0l0F0d0d0I010j0H0A010406050d0Z0B0B0F0G0M040T0b0 0v0s050K0 1113150}0A04051j1c1m0K1j0}0w0H0m0-0/0;0?0e0H0s0e0l1A0e0j0{050(0x0l0c1v0:0=011z1B1D1B0j1J1L1H0j0G1k0j0e0-0D0+0A0F0v0?0k011N1x010h0*0c0v0F0B0c1H0d1+0v1;1P1@1L1`1|0{0a0Y17190s0d0m0D0G0d0y1C0F1b1d201k0K1$2p1Z1#1!1I0w220?1D0v1_0D0d1H1s1u0.1O2z0H2B0v0D2G1H0A0G0c1k1 1,2p2V0v2U202y012N0G120l0{0Y0n1c2Y0|0~2#2I1=2(2*2,0k2/2o0}2Y2$2_0F2+040Y0t2}2W2 2?1w1P32340Y0W382Z3a1,312g2`350X3i2;302@3d3n332,0q3r3k213u0?3e2,0o3A2=3l3D2%3w3f0g3I3t3c3E3N2,0f3Q3b2J3M2)3x040n0r3X3K3S3!3o0n2.2n393J3C3,3F3%2|3;3j3?3m3#340n373|3s3Y2^3U3%3h443B3 3.3q4b3~3L3_0n3z4g3R3Z4j3H4m463v400{0n3P4r3+4o480n3W4y3@4A4u040k3)4E4d3$0k3:2:4c4i480k3{4Q4h3^4T434W4n474H0k4a4#4s3T4(4f4+4z4%3o0k4l4:4F4=4N4q2:1n2S2p2G2s0w1#2x3L0y2O1}1k521l503?2X2o05580$2!4;1P0V0v0{0h0G0D0B3r0Y4X4o5p040s0j0Z0G0j1L5v5x1=5o0{0H0B0A2g0j5H4$1P0D0{0O3*4`5n5z5r5t5R4,2%5z0G1,0w5$445w5S0?5K045M5O5E5%5m3E0{5+0v1s0v5Q4b4R3^0{120V0c0i5D5F0c3r5I1P0`040E0J5X310{1z0$6b5E5G446g0?6i6k6m4i0{1 0c0c0w6f5;016x6G5(0B0H0{4K4~6H6i6l64653Z0V0{0$0h5{5Y3E0h0{0v0p0c0y0V6K5|6I0{0E6/6$2%0{0P6@2$6S0N3A0Y715:5(5z0y6#2$5U040I776A04680c0C1)2g6|3L6J6u6H5*5,2L636Q5(7m7t6:6M6O7k3,6i0U7c3,7y4I0X4/5h6R0{0J7D5/6v6_045 617s7K7u6=7A3Z7G6P7W6:7C7E7!6N7H7J2W7Q6S7O2:736:7p607r7Z1=7v7%6^7#7|6h0{7=2o7@807,0k7I826w7M6T4Q72876n040d0%0Q1_7h0l7j7n7X6j8c7R768s7(7M70727Q5z8l0j0z0*0l8p8r7w6^7~7/7o0{8x8M6}8A648h8D0{0x0c0s2L0p240l8v6x8f2~8X6H6X040h8L868Y5@7*1=0D0L5L0v8{3d0x5~1,0s6e8y8N7Y988j6{9b7l7M6 4b8h8/745q2g0L136F9e7B9a8T3L7G0t7$8P8t8-399j8C8Q041L0h7V9z8z8u9r7+0{0t0q9y2Z8i3L790K915}049d9u9s049B3j9k7^0{1_0w8(8I8+6=9)0|066V5J9m0G9Y7R0H9~8}8 9~0v937S95979$3Z8O2Z7Q7G4J9=9(9h8g9E9l040!a10{7b7P9F7T7{9N7}9t7 780{0u8v9w0r9S5l9904852W9U7F7,9xaG7:8Vak718_0Map7aa4947`62ah6?aw5TaBaD890WaQ7LaJ9~afa.ah9@069+6^8E8m2Da%8v5zaoa)8da;asamaWb46;9(3Aa`al9,041,0R0F1C0S6-1_aXar7?8_aua$baacaH2$9wahaK9Tae7,0n4Vaz9fbc9ibfa|6)6+6-b0ba5zbibk0lbm6990bvaS2~1c5j2T4 b(0K5c2q541c2tb/0F1Kb*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.