← Python/Kiezen en herhalen
Les 8 van 8
MODULE 02 · 08◷ 24 min

Vind iets, of bewijs dat het ontbreekt

Na deze les kun je
  • Stoppen bij de eerste gevonden deler
  • Lus-else onderscheiden van if-else
  • Een zoekresultaat met een randgeval combineren

Je zoekt een bepaald kluisnummer in een reeks. Bij een match kun je meteen stoppen, maar wanneer mag je zeggen dat het nummer ontbreekt? Pas nadat je alle kandidaten hebt bekeken; een mislukte vergelijking met het eerste nummer zegt nog niets over de rest.

Twee manieren om klaar te zijn

Een zoeklus kan eindigen doordat je iets vindt en break uitvoert. Hij kan ook normaal eindigen: er zijn geen waarden meer over om te doorlopen. Python kan met een else bij de lus onderscheid maken tussen die twee situaties.

Een lus-else staat op hetzelfde inspringniveau als de bijbehorende for. Het blok wordt uitgevoerd als de for-lus zijn reeks volledig heeft doorlopen, zonder break. Een else die juist op hetzelfde niveau als de if staat, hoort bij die afzonderlijke keuze.

Denk bij deze vorm aan “zoek alles af, en als er geen onderbreking was, doe dit”. Je kunt het else-blok gebruiken voor een bericht dat niets is gevonden. Je kunt er ook een boolean instellen die later aangeeft dat de volledige zoekreeks is afgewerkt.

Een kluisnummer zoeken

De beschikbare nummers in het voorbeeld zijn tien, elf en twaalf. We zoeken veertien, dus geen van de kandidaten voldoet.

Zoeken in de beschikbare nummers
wanted = 14
found = 0
for locker in range(10, 13):
    if locker == wanted:
        found = locker
        break
else:
    print("Geen passend kluisje")
print(f"Gevonden: {found}")
Verwachte uitvoer
Geen passend kluisje
Gevonden: 0

De vergelijking is drie keer onwaar. Er wordt nergens break uitgevoerd, waardoor het else-blok na de laatste ronde zijn bericht schrijft. De vooraf ingestelde waarde nul blijft staan als teken dat er in deze zoekreeks geen passend nummer is gevonden.

Als een kandidaat wel voldoet, bewaart het if-blok die waarde en verlaat break de lus. Het else-blok bij de for wordt dan overgeslagen. De print ná de hele lus blijft gewoon bereikbaar en kan het resultaat tonen.

Een lege range is meteen volledig doorlopen: er zijn geen kandidaten om te onderzoeken. Ook dan wordt de lus-else uitgevoerd. Dat zegt alleen iets over deze zoekreeks, niet automatisch over een andere eigenschap van het getal dat je onderzoekt.

Een else op het verkeerde niveau

Met de verkeerde inspringing meld je na iedere mislukte kandidaat al dat het nummer ontbreekt. Bekijk dit voorbeeld: het gezochte nummer is wel degelijk aanwezig.

Te vroeg zeggen dat iets ontbreekt
wanted = 12
for locker in range(10, 13):
    if locker == wanted:
        print(f"Gevonden: {locker}")
        break
    else:
        print("Niet gevonden")
Verwachte uitvoer
Niet gevonden
Niet gevonden
Gevonden: 12

De else hoort hier bij de if. Daardoor verschijnen bij tien en elf al twee onterechte meldingen, voordat twaalf wordt gevonden. Zet de else op hetzelfde niveau als de for wanneer je pas na de volledige zoekreeks wilt reageren.

Een normale beëindiging is iets anders dan een programmafout. De lus-else is geen voorziening om fouten op te vangen. In deze les gebruiken we hem alleen om een uitgeputte zoekreeks te onderscheiden van een gevonden match met break.

Van zoeken naar een oordeel

In de opdracht zoek je een deler: een geheel getal waardoor je kunt delen zonder rest. Je bekijkt kandidaten vanaf twee tot vlak vóór het onderzochte getal. De eerste kandidaat met rest nul wordt bewaard; daarna hoeft de zoeklus niet verder.

Een priemgetal is minstens twee en heeft geen deler in die zoekreeks. Het getal één heeft een lege zoekreeks, maar voldoet niet aan die ondergrens. Je oordeel moet daarom zowel de zoekuitkomst als de ondergrens meenemen.

Nu jij

Zoek de eerste deler, houd bij of de lus normaal eindigde en bepaal daarna het eindlabel. De vier invoergevallen laten een lege zoekreeks, een gevonden deler en een volledig doorlopen zoekreeks zien.

Testinvoer · 4 varianten

Je programma krijgt deze invoer automatisch. Elke variant begint opnieuw. Alle varianten moeten kloppen.

Onder de priemgrens
1
Kleinste priemgetal
2
Eerste van meerdere delers
6
Geen deler gevonden
13
AAN DE SLAG 0/4
1

Zoek de eerste echte deler

Toon op regel 1 de eerste deler vanaf twee onder number, of nul als die ontbreekt.

2

Herken normaal einde

Toon op regel 2 of de lus zonder break is geëindigd, ook bij een lege reeks.

3

Neem de ondergrens mee

Toon op regel 3 of number minstens twee is én divisor nul is.

4

Geef een volledig oordeel

Toon op regel 4 te-klein, priem of samengesteld volgens het gevonden resultaat.

Dit neem je mee

  • De lus-else hoort bij de for en wordt overgeslagen na break.
  • Een lege reeks eindigt ook normaal.
  • Combineer een zoekuitkomst met eventuele extra voorwaarden voor je oordeel.

Hierna leer je zulke stukken gedrag in functies onder te brengen en met verschillende argumenten te gebruiken.

main.py
UitvoerPython
›
›_

Hier komt je resultaat.

Voer je code uit en ontdek
wat je hebt gemaakt.

0/4 stappen
EVEN MEEKIJKEN

Bekijk hoe het kan.

Je mag de oplossing bekijken. Deze poging telt dan niet mee als afgeronde les. Met Reset kun je daarna opnieuw zelf oefenen.