0%

Werk herhalen met lussen · oefening

Loop over een string

In hoofdstuk 4 leerde je dat een string een geordende reeks tekens is. Een for-lus werkt op elke geordende reeks en dus ook op strings.

Try it

Drie tekens, drie regels. Python geeft je één teken tegelijk, op volgorde van het eerste tot het laatste.

Dit is dezelfde lus die je al kent. Alleen wat je doorloopt, is veranderd.

Elk teken telt mee

Een string bevat niet alleen letters. Spaties en leestekens zijn ook tekens en de lus bezoekt ze net als alle andere:

Try it

De haken maken de spatie zichtbaar op een eigen regel. Als een aantal tekens je verrast, zie je zo snel wat er precies in de string staat.

Daarom is character of char vaak een betere naam voor de lusvariabele dan letter. Gebruik letter als je weet dat de string echt letters bevat.

Vergelijk het met indexeren

Je kunt dezelfde tekens bereiken met de indexgereedschappen uit hoofdstuk 4:

word = "sky"
print(word[0])
print(word[1])
print(word[2])

Dat werkt, maar heeft dezelfde beperking als de vier printregels van de organizer. Het past alleen bij een string van drie tekens. De lus past bij elke string:

Try it

Gebruik een index als je één bepaalde positie wilt hebben. Gebruik een lus als je elke waarde op volgorde wilt hebben.

Neem bij elke ronde een beslissing

Het lusblok kan allerlei instructies bevatten, ook een if-instructie. Door die combinatie worden lussen krachtig: Python stelt de vraag één keer per teken.

Try it

Kijk goed naar het inspringen, want er zijn nu twee niveaus:

for character in "melody":      <- gives character its next value on each pass
    if character in vowels:     <- one level in: runs on every pass
        print(...)              <- two levels in: runs only when the test is True

De if-regel springt in omdat ze bij het lusblok hoort. De print-regel springt twee keer in omdat ze bij de if hoort. Python gebruikt die niveaus om te bepalen wat bij elkaar hoort. Ze goed zetten is dus geen kwestie van smaak.

Een if binnen een lus stopt de lus niet. Als de test False is, slaat Python die ingesprongen regel over en gaat het verder met het volgende teken.

Wat drukt deze code af?

for character in "ab c":
    print(f"<{character}>")

Hoe vaak wordt print in deze lus uitgevoerd?

digits = ["1", "2", "3"]
for character in "a1b2":
    if character in digits:
        print(character)

Doorloop in de oefening een tekst, haal de klinkers eruit en meld hoeveel tekens je hebt gecontroleerd.

Opdracht

De waarden phrase en vowels staan al klaar. Maak het programma af, zodat het:

  • over phrase loopt met character als lusvariabele;

  • de hoofdletterversie afdrukt van elk teken dat in de lijst vowels voorkomt, elk op een eigen regel;

  • de laatste telregel behoudt, die één keer na de lus wordt uitgevoerd.

Verwachte uitvoer:

O
A
I
U
Characters checked: 18

Gebruik .upper() op het teken dat je afdrukt. Verander phrase en vowels niet.