Repetition Funktionen

Diese Aktivität ist die Weiterführung der PyTamaro iconRepetition Konstanten und dient dazu das Konstrukt der Funktionen zu repetieren und zu vertiefen.

Verwendung von Funktionen

Wir haben im Unterricht gesehen, dass uns Funktionen im Vergleich zu Konstanten eine grössere Flexiblität bieten. Im Unterricht haben wir thematisiert, dass wir Funktionen verwenden, wenn:

  • ... eine Grafik im Laufe des Programms (oder für verschiedene Programme) in Grösse und/oder Farbe variieren soll und die Parameter somit flexibel gehalten werden müssen.
  • ...Codefragmente allgemein, wie im Beispiel der Labellos, bis auf einzelne Parameter identisch sind.
  • ... eine Grafik mindestens zwei Mal verwendet wird (Faustregel).

Syntax von Funktionen

Repetition Syntax von Funktionen

Zu Beginn des Funktionskopfs muss stets das Schlüsselwort def stehen, anschliessend der Funktionsname, gefolgt von öffnender und schliessender Klammer, welche die flexiblen Parameter beinhalten. Ein Doppelpunkt schliesst den Funktionskopf ab. Alles was anschliessend eingerückt unterhalb aufgeführt ist, heisst (Funktions-)Körper und wird als Teil der Funktion angesehen:

def funktionsname(flexible_Parameter): #die Parameter dienen als sogenannte Platzhalter
    return eigener Code #hier kommt nur ein einziger Codeblock & es werden die flexiblen 
                        #Parameter gemäss Verwendung ergänzt

def funktionsname2(andere_Parameter): 
    #optional Konstante(n), Schleifen und andere Codeblöcke, die eine komplexere Grafik zuerst zusammenbauen
    return name_der_endgrafik

Beispiel 1

Hier sehen Sie ein konkretes Codebeispiel einer Funktion, bei welcher das return-statement gleich nach dem Funktionskopf steht.

Loading...

Beispiel 2

Nachfolgend sehen Sie eine Funktion, in welcher zuerst zwei Konstanten innerhalb des Funktionskörpers definiert werden. In diesen wird die Grafik zuerst zusammengesetzt und dann am Ende mit dem return-Befehl der Funktion zurückgegeben.

Loading...

Refactoring und Toolbox

Für die Erstellung der Konstanten staengelglace_komplett haben Sie für den sichtbaren Geschmacksteil (in diesem Fall Erdbeere) eine Art flacher Bogen programmieren müssen. Da wir diese Figur noch in weiteren Aufgaben verwenden werden, ist es sinnvoll, diese Figur als eigene Funktion in Ihrer persönlichen Toolbox abzuspeichern.

flacher_bogen = beside(
                    rotate(180, circular_sector(20, 90, ERDBEER_ROT)),
                    beside(
                        rectangle(60, 20, ERDBEER_ROT), 
                        rotate(-90, circular_sector(20, 90, ERDBEER_ROT))
                        )
                    )
Loading...
Lösung
def flacher_bogen(breite: int, radius: float, farbe: Color) -> Graphic: 
    return beside(
                    rotate(180, circular_sector(radius, 90, farbe)),
                    beside(
                        rectangle(breite-2*radius, radius, farbe), 
                        rotate(-90, circular_sector(radius, 90, farbe))
                        )
                    )
Hilfestellung für das Abspeichern in der Toolbox

Sobald Sie Ihre Funktion im Playground geschrieben haben, erscheint ein Werkzeugsymbol, mit welchem Sie die Funktion zu Ihrer Toolbox hinzufügen können:

alt text

Anschliessend müssen Sie eine kurze Beschreibung sowie ein mögliches Anwendungsbeispiel definieren, bevor Sie die Funktion in Ihre Toolbox abspeichern können:

alt text

Die Funktion sollte nun auf der linken Seite als gespeicherte Funktion erscheinen:

alt text

Im Laufe dieser Aktivität wird auch die folgende Figur in lila wiederverwendet:

alt text

Diese Figur kennen Sie bereits aus dem Unterricht und einen Teil davon haben Sie soeben als Funktion programmiert und vielleicht sogar bei der Stängelglace verwendet.

Loading...
Lösung
from pytamaro import above, rotate, Graphic, rectangle, Color, green, show_graphic
from toolbox import flacher_bogen

def abgerundetes_rechteck(breite: int, hoehe: int, radius: float, farbe: Color) ->Graphic: 
    return above(
                rotate(180, flacher_bogen(breite, radius, farbe)),
                above(
                    rectangle(breite, hoehe-2*radius, farbe), 
                    flacher_bogen(breite, radius, farbe)
                )
    )

Übung macht den Meister

Nun haben wir einige Funktionsbeispiele gesehen und bereits zwei Funktionen selbst geschrieben, welche uns in dieser Aufgabe als Vorarbeit dienen. Denn wir wollen eine Funktion für die folgenden Legoköpfchen erstellen.

alt text

Für den Legokopf können wir die zuvor gespeicherte Funktion abgerundetes_rechteck() verwenden und für den Aufsatz auf dem Kopf die Funktion flacher_bogen(). Den Hals bildet ein einfaches Rechteck.

Loading...
Lösung
from pytamaro import (overlay, beside, above, rotate, Graphic, circular_sector, rectangle, 
                rgb_color, black, transparent, show_graphic)
from toolbox import flacher_bogen, abgerundetes_rechteck

def augen_mund(groesse: float, gesichtsfarbe: Color) -> Graphic: #Dieses Codefragment erhalten die SuS von der Lehrperson
    return overlay(
            beside(
                beside(
                    circular_sector(groesse/5,360, black),
                    rectangle(groesse*0.8,180,transparent)
                ),
                circular_sector(groesse/5,360, black)
            ),
            rotate(-110,compose(circular_sector(groesse*1.8, 40, gesichtsfarbe),
                               circular_sector(groesse*1.9,40, black)))
        )

def lego_kopf(gesichtsfarbe: Color) -> Graphic: #Dies ist der eigentliche Code, den die SuS noch programmieren müssen
    return above(
                overlay(
                    augen_mund(100, gesichtsfarbe),
                    above(
                        rotate(180, flacher_bogen(200, 60, gesichtsfarbe)), 
                        abgerundetes_rechteck(400, 320, 50, gesichtsfarbe)
                    )
                ),
                rectangle(200, 40, gesichtsfarbe)
            )

Refactoring Stängelglace

Nun haben wir viel Vorarbeit geleistet und können wieder zu unserer Stängelglace zurückkehren. Diese wollen wir in eine Funktion staengelglace_divers() umschreiben, damit wir alle möglichen Geschmacksrichtungen erstellen können. Seien Sie sich bewusst, dass es verschiedene Lösungen gibt, um zu dieser letzten Funktion zu gelangen.

alt text

Falls Sie den erstellten Code von Ihrer staengelglace_komplett nicht mehr besitzen, können Sie folgenden Code als Orientierung für Ihre Funktion nehmen:

Hilfestellung Vorarbeit für die Stängelglace
SCHOKOLADEN_BRAUN = rgb_color(150,75,0)
STAENGEL_BRAUN = rgb_color(255, 192, 128)
ERDBEER_ROT = rgb_color(255, 128,128)

sichtbare_glace= beside(
                    rotate(180, circular_sector(20, 90, ERDBEER_ROT)),
                    beside(
                        rectangle(60, 20, ERDBEER_ROT), 
                        rotate(-90, circular_sector(20, 90, ERDBEER_ROT))
                        )
                    )

schokoladen_ueberzug = above(
                        above(                             
                            circular_sector(60 , 180, SCHOKOLADEN_BRAUN), 
                            rectangle(120, 180, SCHOKOLADEN_BRAUN)
                            ),
                        sichtbare_glace
                        )

staengel = above(
                rectangle(20, 60, STAENGEL_BRAUN), 
                rotate(180,circular_sector(10, 180, STAENGEL_BRAUN))
            )

staengelglace_komplett = above(
                    schokoladen_ueberzug,
                    staengel
                    )

Halten Sie sicherlich die Farben flexibel und verwenden Sie, wo möglich Funktionen aus Ihrer Toolbox.

Loading...

Was haben Sie in dieser Aktivität gelernt

Sie haben in dieser Aktivität...

  • ... die Vorteile und die Anwendung von Funktionen repetiert.
  • ... die Syntax von Funktionen anhand verschiedener Beispiele gesehen.
  • ... ein Refactoring verschiedener Beispiele gemacht (Konstanten -> Funktionen) und so eine allfällige Codeduplikation minimiert.
  • ... eigene Funktionen in Ihre Toolbox gespeichert.
  • ... eigene Funktionen geschrieben und Funktionen aus Ihrer Toolbox verwendet.

This activity has been created by Schnider and is licensed under CC BY-SA 4.0.

Repetition Funktionen

Logo of PyTamaro

PyTamaro is a project created by the Lugano Computing Education Research Lab at the Software Institute of USI

Privacy PolicyPlatform Version a71e35c (Mon, 25 Aug 2025 18:25:55 GMT)