0%

Zelf functies schrijven · oefening

Herstructureer de menuacties

Voordat je het interactieve menu opnieuw opbouwt, haal je er twee acties uit met vaste gegevens. Nog geen input(). Zo kun je je richten op de grenzen van functies.

De items tonen

De tak voor list uit hoofdstuk 7 had twee paden:

if len(items) == 0:
    print("The list is empty.")
else:
    number = 1
    for item in items:
        print(f"{number}. {item}")
        number += 1

Verplaats dat werk naar een functie:

def show_items(items):
    if len(items) == 0:
        print("The list is empty.")
    else:
        number = 1
        for item in items:
            print(f"{number}. {item}")
            number += 1

De lijst wordt een argument bij de aanroep:

show_items(books)

Binnen de functie verwijst de parameter items naar die lijst. Het maakt de functie niet uit of de aanroeper die lijst books, tasks of places heeft genoemd.

Het bericht met het aantal teruggeven

Je geeft de telactie een iets andere grens:

def count_message(items):
    return f"Items stored: {len(items)}"

Deze functie bouwt tekst en geeft die terug. De aanroeper drukt de tekst af:

print(count_message(books))

Waarom gebruiken we twee stijlen in één les?

Omdat de taak van een functie bepaalt hoe je haar definieert, niet een regel dat elke functie moet afdrukken of dat elke functie iets moet teruggeven. show_items is een weergavebewerking die meerdere regels kan afdrukken. count_message bouwt één herbruikbare waarde.

De lijst blijft bij de aanroeper

De functies maken de verzameling niet aan:

books = []
show_items(books)

books.append("Kindred")
books.append("A Wizard of Earthsea")

show_items(books)
print(count_message(books))

De aanroeper bepaalt de volgorde van de gebeurtenissen. De functies voeren afzonderlijke bewerkingen uit.

Verwachte uitvoer:

The list is empty.
1. Kindred
2. A Wizard of Earthsea
Items stored: 2

Dit is een kleine versie van de uiteindelijke herstructurering. De code op het hoogste niveau zegt wat er gebeurt. Elke functie legt uit hoe één actie werkt.

Waarom ontvangt show_items de lijst als parameter?

Opdracht

Maak beide functies voor menuacties af.

show_items(items) moet:

  • The list is empty. afdrukken als de lijst geen items heeft;

  • anders elk item op een genummerde regel afdrukken, beginnend bij 1.

count_message(items) moet dit teruggeven:

Items stored: 2

met de werkelijke lengte op de plaats van 2.

Behoud de gegeven aanroepen. Verwachte uitvoer:

The list is empty.
1. Kindred
2. A Wizard of Earthsea
Items stored: 2