Zoek de eerste echte deler
Toon op regel 1 de eerste deler vanaf twee onder number, of nul als die ontbreekt.
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.
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.
De beschikbare nummers in het voorbeeld zijn tien, elf en twaalf. We zoeken veertien, dus geen van de kandidaten voldoet.
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}")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.
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.
wanted = 12
for locker in range(10, 13):
if locker == wanted:
print(f"Gevonden: {locker}")
break
else:
print("Niet gevonden")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.
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.
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.
Je programma krijgt deze invoer automatisch. Elke variant begint opnieuw. Alle varianten moeten kloppen.
1
2
6
13
Toon op regel 1 de eerste deler vanaf twee onder number, of nul als die ontbreekt.
Toon op regel 2 of de lus zonder break is geëindigd, ook bij een lege reeks.
Toon op regel 3 of number minstens twee is én divisor nul is.
Toon op regel 4 te-klein, priem of samengesteld volgens het gevonden resultaat.
Hierna leer je zulke stukken gedrag in functies onder te brengen en met verschillende argumenten te gebruiken.
Voer je code uit en ontdek
wat je hebt gemaakt.
Je hoeft het niet in één keer goed te doen. Na het uitvoeren zie je hier welke stappen al kloppen.