Zum Inhalt

Parameter

Unsere neuen eigene Prozeduren erleichtern das Programmieren einiges. Dennoch sind sie bis jetzt etwas unflexibel. In den vorherigen Aufgaben haben wir einen sechseck() Befehl definiert. Wenn wir nun verschieden Grosse Sechsecke haben wollen, müssten wir ganz viele neue Befehle definieren. Wie z.B. kleinesSechseck(), mittleresSechseck(), grossesSechseck(), etc., das funktioniert zwar, aber ursprünglich wollten wir unnötige Tipparbeit vermeiden.

Es wäre doch viel praktischer, wenn wir nur einen Sechseck-Befehl bräuchten, der ganz flexibel, verschieden Grosse Sechsecke zeichnen könnte. Dafür brauchen wir Parameter.

Fachbegriff: Parameter

Ein Parameter ist eine spezielle Variable, mit der wir Informationen an einen Befehl übergeben können. Dazu muss der Befehl so definiert sein, dass er ein oder mehrere Parameter annimmt. Innerhalb des Befehls verhalten sich die Parameter wie Variablen.

Definition

Um Informationen an unsere neuen eigenen Befehle zu übergeben, können wir Parameter definieren. Dazu wird der Name von einem Parameter innerhalb der Klammer geschrieben.

Beispiel

In diesem Programm wird eine neue Prozedur mit dem Namen meineGrussProzedur definiert. Sowie einem Parameter nachname

def meineGrussProzedur(nachname):
    print("* Guten Morgen " + nachname)
    print("* * * *)

Probiere das Beispiel einmal aus, rufe den Befehl mit mit einem Parameter auf. Dazu schreibst du beim Aufruf zwischen den Klammern einen Wert, z.B. eine Zeichenkette.

###(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 2

Wir können nun z.B. einen Befehl für ein Quadrat erstellen, welches eine beliebige Seitenlänge verwendet. Als Seitenlänge bezeichnen wir nun s.

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

Sechsecke 2

Question

Ändere deine Prozedur sechseck() ab, damit neu mit einem Parameter die Seitenlänge an den Befehl übergebbar ist. Die Prozedur sechseck() hast du zuvor in der Aufgabe Sechsecke aus Kapitel Eigene Prozeduren gelöst.

Zeichne drei Sechsecke mit verschiedenen Grössen.

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 Tc2L(o4kgfö3e=)i6785*hy/9aputnd0m:wslr1bv050G0o0E0B0r0M0L0b0d0M0B0L0L0p010E0r0C010406050L0D0I0I0B0N0y040f0m0=0F0k050z0=0@0_0{0:0C040519121c0z190:0G0r0Q0Z0#0%0)0x0r0k0x0M1q0x0E0.050U0P0M0o1l0$0(011p1r1t1r0E1z1B1x0E0N1a0E0x0Z0h0X0C0B0F0)0e011D1n010l0W0o0F0B0I0o1x0L1X0F1%1F1*1B1-1/0.0a0b0}0 0k0L0Q0h0N0L0d1s0B11131?1a0z1S2f1P1R1Q1y0G1^0)1t0F1,0h0L1x1i1k0!1E2p0r2r0F0h2w1x0C0N0o1a1=1Y2f2L0F2K1?2o012D0N0^0M0.0b0O122O0/0;2R2y1(2U2W2Y0e2#2e0:2O2S2,0B2X040b0n2:2M2=2)1m1F2^2`0b0i2~2P301Y2@262-2{0v382%2?2*333d2_2Y0s3h3a1@3k0)342Y0t3q2(3b3t2T3m350u3y3j323u3D2Y0A3G312z3C2V3n040O0H3N3A3I3Q3e0O2!2d2 3z3s3Y3v3T2/3%393)3c3R2`0O2}3/3i3O2+3K3T373`3r3=3!3g413;3B3,0O3p3`1d2I2f2w2i0G1R2n3B0d2E1:1a4g1b4e3)2N2e054m0S2Q3X3P0j0F0.0l0N0h0I3h0b473+4D040k0E0D0N0E1B4J4L4B4N0r0I0C260E4V3H3P0h0.0w3q42480.0^0j0o0c4R4T0o3h4W1(0-040g0q4.4}1F0j0.0S0l4(3|330l0.0L0o295f0d0j4|4)4~0.0g5l5b3u5e0o0r0E4{4c5m1F4 0q0J3q0b5F4K5z0)56040l265a4A2+0.0r5O3*4*0K5R0F5T2@0P0.0N1Y0k5x2$540)4 5p5y5r010I0r0.4b5+5I015B5D415G605H5;4N5M0N0K0_0G5q5P5A5o6a5U5Q045f5v5*4v5{5B5E615F5,2T5$1u4%5:6b5-6d6w6f1F5?0.0n0s3V3`626x014+040z5Z3B6D045_6l5;6n41064/3+5t5h5g5k6A2S5.6e2S6R0i6H5`6V0.52465{4N0N6u6,3B6+6)6Q5@3-6:6U6K6W2$6Z3P4N5i0x5i6(6;766z7g6B0)6R6G6}3Y772;6r6`6|707p7i757k5=720O0e742M6r7q3(6_6#7d6%7o3P6 7j6-720A7E2P7G6?3W7z7t1K7N5n507$6C7B7D7)6y046@78124x2J4d7@0z4q2g4i122j7~0B1A7_4g0:7`0T0V0X04.
Lösung
from gturtle import *

makeTurtle()

def sechseck(seite):
    for i in range(6):
        forward(seite)
        right(360 / 6)


sechseck(40)
right(120)
sechseck(60)
right(120)
sechseck(90)
right(120)

Sterne 2

Question

Definiere eine Prozedur stern(laenge) um einen Stern mit Strichlänge laenge zu zeichnen. laenge ist dabei ein Parameter, somit kannst du mit der selben Prozedur verschieden Grosse Sterne zeichnen.

Verwende deine Prozedur um die gezeigte Figur zu zeichnen.

Wenn du vor einer (Teil-)Zeichnung den Befehle begin_fill() aufrufst und nachher den Befehl end_fill(), dann wird deine Figure mit Farbe ausgefüllt. Die Füllfarbe kannst du mit fillcolor(FARBNAME) steuern. Achtung FARBNAME ist eine Zeichenkette.

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.

.128013S Tc2zL(o4kgfö3e=)JiP6A785*hy/9;aputnd0m-:w+sR_lr1,q.bv050M0q0K0H0u0W0T0c0e0W0H0T0T0r010K0u0I010406050T0J0O0O0H0X0D040h0o120L0m050E12141618100I04051m1f1p0E1m100M0u0%0:0=0@0_0C0u0m0C0W1D0C0K0~050+0$0W0q1y0?0^011C1E1G1E0K1M1O1K0K0X1n0K0C0:0j0.0I0H0L0_0f011Q1A010n0-0q0L0H0O0q1K0T1.0L1@1S1`1O1}1 0~0a0c1a1c0m0T0%0j0X0T0e1F0H1e1g231n0E1)2s1$1(1%1L0M250_1G0L1|0j0T1K1v1x0;1R2C0u2E0L0j2J1K0I0X0q1n221/2s2Y0L2X232B012Q0X150W0~0c0Y1f2#0 112(2L1^2+2-2/0f2=2r102#2)2|0H2.040c0p302Z322_1z1S35370c0k3b2$3d1/342j2}380A3l2@332`3g3q362/0w3u3n243x0_3h2/0y3D2^3o3G2*3z3i0z3L3w3f3H3Q2/0F3T3e2M3P2,3A040Y0N3!3N3V3%3r0Y2;2q3c3M3F3/3I3*2 3@3m3_3p3(370Y3a3 3v3#2{3X3*3k473E423;3t4e413O3|0Y3C4j3U3$4m3K4p493y430~0Y3S4u3.4r4b0Y3Z4B3`4D4x040f3,4H4g3)0f3?2?4f4l4b0f3~4T4k3{4W464Z4q4a4K0f4d4(4v3W4+4i4.4C4*3r0f4o2?1q2V2s2J2v0M1(2A3O0e2R201n501o4~3_2!2r05560)2%4@1S0l0L0~0n0X0j0O3u0c4!4r5n040m0K0J0X0K1O5t5v1^5m0~0u0O0I2j0K5F4)1S0j0~0B3-4I2{0~150l0q0d5B5D0q3u5G1S0}040i0s3D4U3{0~0T0*0v2G5*5Q0_5-0i5|4/010O0u0~4N4|5}015-0Z5P625S040P615k0_640~4M675f695-5:470c5u690e0Y0~030c3o0J0L0K0q2V240U1/2A220X2O0m1|5V345@0I0q0q0M6i5W5,0~60475+6k653*4S6p626r5;6(2*0~560W2j6Y2)5 6`3O0T1=04020!0J0j0K0G1N0J0q7274766}3/6/4e5=3$0l0~0)0n6d6j2*0n5@6F0X0L7e3$6|6%695x0=1|6P7w1^6r0Q3D6u6u6;5x0$0q0m2O0V270W7F6!5.6s4T7K6v625x7v6t6;6f0r7o6Z6)0~4=317!6;7k040n6_7)7A5J7-2)0j0R5J7(2?7#7p0L0$0~0X1/7E7z6.6#7V3H0~846-7p7H7J7!7K7M5o2j0R166X8e8m8g8x7.6=047C1d5)8A6{0~7Y7=8p7L7}046N1X8h6a8z68626l040y4M7 3O6f0E8#5?048k2Z6;7g7Z8q8O1|0M7S0-7U8H3O5 8K3c067i5H8s0X8)4r7~7|6e82042O952{898P8c8G8V8y5.8S8X7;8-6q8J7I4e7?6w6y046A0t6W6G0c0b7t240*8u0/0m0X1b5^0X0c152m1|0Z390N9S0A9U0c0y9X0F9X0#9%8o8N7$5@0q0u6F9d5R0~7,987p8X0p6o2Z868B6f0S9:7/4L9{2$9}805Ta18C0u9)a64l7s6G8,2$8.8U8l8B5x5^9.9ial8I048~3m069u9+046U0L0J0I8S8}ac6;6x6z0c0x0$0T0+0L2A0g0R0u2l0C1|0c0)249DagaW0r2:a40 ax87938u0X8w9j8B7ya;6S04ao9/9@9~0~a0a|2)8X3+aE8JaG8OaA0M81ah5ja=6#au2@0E5h2W4}bj0E5a2t521f2wbq0H1Nbl5010bm0*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
from gturtle import *
makeTurtle()

setPos(0, -200)  # an unteren Rand springen
speed(11)

color("blue")

def stern(laenge):
    begin_fill()
    n = 5
    for i in range(n):
        forward(laenge)
        right(720 / n)
    end_fill()


for i in range(5):
    # Jeder Stern etwas grösser machen, 30, 50, 70, 90, ...
    seite = 30 + 20 * i
    stern(seite)

    penup()
    # Abstand zwischen den Sternen = 10
    forward(seite + 10)
    pendown()

Farbige Dreiecke

Question

Auch Farbnamen können als Parameter verwendet werden. Definiere einen Befehl, dreieck(farbe), welche ein gefülltes Dreieck mit der gegebenen Farbe zeichnet. Erstelle damit das nebenstehende Bild.

Du findest eine ausführliche Liste von Farben hier, bei vielen Farben musst du den "Hex-Code" verwenden.

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 Tc2L(o4kgfö3e=)i6785*hy/9;aputnd0m:ws_lr1qbv050H0o0F0C0r0O0M0b0d0O0C0M0M0p010F0r0D010406050M0E0J0J0C0P0y040f0m0^0G0k050z0^0`0|0~0?0D04051c151f0z1c0?0H0r0T0$0(0*0,0x0r0k0x0O1t0x0F0;050X0S0O0o1o0)0+011s1u1w1u0F1C1E1A0F0P1d0F0x0$0h0!0D0C0G0,0e011G1q010l0Z0o0G0C0J0o1A0M1!0G1*1I1-1E1:1=0;0a0b10120k0M0T0h0P0M0d1v0C14161_1d0z1V2i1S1U1T1B0H1{0,1w0G1/0h0M1A1l1n0%1H2s0r2u0G0h2z1A0D0P0o1d1^1#2i2O0G2N1_2r012G0P0{0O0;0b0Q152R0=0@2U2B1+2X2Z2#0e2(2h0?2R2V2/0C2!040b0n2?2P2^2,1p1I2{2}0b0i312S331#2`292:2~0v3b2*2_2-363g2|2#0s3k3d1`3n0,372#0t3t2+3e3w2W3p380u3B3m353x3G2#0A3J342C3F2Y3q040Q0I3Q3D3L3T3h0Q2%2g323C3v3#3y3W2=3*3c3,3f3U2}0Q303=3l3R2.3N3W3a3}3u3^3%3j443@3E3/0Q3s493K3S4c3A4f3 3o3_0;0Q3I4k3!4h410Q3P4r3-4t4n040e3Y4x463V0e3)2)454b410e3;4J4a3.4M3|4P4g404A0e434U4l3M4X484!4s4W3h0e4e4)4y4+4G4j2)1g2L2i2z2l0H1U2q3E0d2H1?1d4{1e4_3,2Q2h05510V2T4*1I0j0G0;0l0P0h0J3k0b4Q4h5i040k0F0E0P0F1E5o5q1+5h0;0r0J0D290F5A4V1I0h0;0w3Z4:360;0{0j0o0c5w5y0o3k5B1I0:040g0q3t064K3#0j0;0V0l5K4#2W0l5;2L0r0o0d0j5#5L0,5(0g615^5s0l0|0S5!3}5$630;0q0K3t0b6k5p622W0;510O29665f6f5)6t5R3x5j6a6c4@6n5(5+446l6m670;6b0k2E0N1}0O6x2V646G4J6I6e015:040l6s3}6J6u6o040r5@6*0h0L5E0G6.6y2W0S0;0P1#0k6C5a6E0;656d6n0J0r0;4T705^6F6i6H6I6l6Y68290L0|0H6S3E647n3#764o0v4D6D7b6g6j7f6k7h6{1x5J747x6w7G6*7s3:7v7a6*6F5,6X6n5s1/0H6P0Z6R7J6^6U5,5.4h5{0o5}5 7q3S7p7!2V0M1(04020R0E0h0F0B2L0H7_7{7}7.1+7Q4E4b7D1N845%728b0,7L0A7N2P6Y864J7(2.7*7,607;7o8d8s3#7?0;817|0B296}0o8z838v7/7y873.891y8e017:7w7K77048h8O8l2@8n5S040H5|5~8r8R7#8u8*7=7@8F0B0k2L1/8:8W8J4/2`8M7F8-8t7I8 7r8T8V8H858`8Y7C8#8%7-968c917O6^8x7^7`8A1D0E8E9l8G928I046V2@9a0P7E8_9g8j75948i2S8k98328Z6z046q6%9s979B9G6n9j8:0d0y1#8^9e6v9v3+0z5c2M4^9*0z552j4}152m9;0C1D9,4{0?9-0W0Y0!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 *
makeTurtle()


def dreieck(farbe):
    color(farbe)
    begin_fill()
    for i in range(3):
        forward(150)
        right(120)

    end_fill()


dreieck("red")
right(90)

dreieck("orange")
right(90)

dreieck("green")
right(90)

dreieck("blue")
right(90)

color("cyan")

Spiralige Figur

Question

Das nebenstehende Bild entsteht, indem die Länge der Quadratseite ausgehend von 180 bei jedem nachfolgenden Quadrat um den Faktor \(0.95\) verkleinert wird. Es werden \(100\) Quadrate gezeichnet. Schreibe das Programm mit dem Befehl quadrat(s)

Eine verkleinerung um Faktor \(0.95\) bedeutet, dass der neue Wert nur noch \(95\%\) vom alten ist.

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.

Lösung
from gturtle import *
makeTurtle()

speed(10)
color("blue")

def quadrat(seite):
    for i in range(4):
        forward(seite)
        right(90)


qseite = 180
for i in range(100):
    quadrat(qseite)
    qseite = qseite * 0.95

    left(5)

Olympische Dreiecke Version 3

Question

Zeichne nochmals die folgende Figur. Verwende diesmal Parameter für deine Befehle.

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.

Lösung
from gturtle import *
makeTurtle()

def dreieck(laenge, farbe):
    setPenColor(farbe)
    right(30)
    for i in range(3):
        forward(laenge)
        left(120)


    left(30)

def abstand(laenge):
    penUp()
    right(90)
    forward(laenge)
    left(90)
    penDown()


speed(10)
dreieck(50, "blue")
abstand(60)
dreieck(50, "black")
abstand(60)
dreieck(50, "red")

penUp()
forward(30)
left(90)
forward(30)
left(90)
penDown()
dreieck(50, "green")
abstand(60)
dreieck(50, "yellow")

hideTurtle()