Lussen in Python

Leer een Pythonprogramma werk te laten herhalen. Schrijf while-lussen die doorgaan totdat een voorwaarde verandert en for-lussen die strings, lijsten en getallenbereiken doorlopen. Gebruik break, continue en het else-blok van een lus om ze te sturen. Pas de standaardpatronen toe voor tellen, optellen, middelen, de grootste waarde vinden en zoeken. Bouw geneste lussen voor rasters en combinaties en volg lussen met de hand om één-ernaast-fouten en lussen die nooit stoppen op te sporen.

BeginnerLes 3 van 10 in Cursus Inleiding tot programmeren met Python

Wat je leert

  1. Schrijf while-lussen die een codeblok herhalen zolang een voorwaarde waar is, zorg dat elke lus stopt en gebruik lussen om invoer te lezen totdat de gebruiker klaar is.
    • Schrijf een while-lus die telt en waarden bijwerkt
      Lees en schrijf de drie werkende onderdelen van een while-lus: een startwaarde, een voorwaarde die vóór elke iteratie wordt getoetst en een bijwerking in de ingesprongen lusinhoud.
    • Zorg dat een while-lus stopt
      Herken oneindige lussen, leg uit waarom ze ontstaan, herstel ze en stop een programma dat in zo’n lus vastzit.
    • Lees invoer totdat de gebruiker klaar is
      Gebruik while-lussen om waarden te blijven lezen totdat een stopwaarde verschijnt en om opnieuw te vragen totdat de gebruiker een aanvaardbaar antwoord geeft.
  2. Gebruik for-lussen om elk element van een string of lijst en elk getal in een getallenbereik te doorlopen, en bepaal wanneer een for-lus of een while-lus beter bij een taak past.
    • Doorloop de elementen van een sequentie met een lus
      Schrijf for-lussen die elk teken van een string of elke waarde van een korte lijst op volgorde doorlopen en gebruik de lusvariabele correct.
    • Genereer getallenreeksen met range
      Gebruik range met één, twee of drie argumenten om een bepaald aantal keer te herhalen of om gehele getallen met gelijke tussenstappen te doorlopen, ook bij terugtellen.
    • Kies tussen een for-lus en een while-lus
      Bepaal welk type lus bij een taak past en herschrijf een tellus van de ene vorm naar de andere.
  3. Verander het normale verloop van een lus: verlaat de lus voortijdig, sla de rest van één iteratie over en voer code alleen uit als een lus is voltooid zonder te zijn onderbroken.
    • Verlaat een lus voortijdig met break
      Gebruik break om een lus te beëindigen zodra de taak is voltooid, inclusief het while True-patroon voor invoerlussen.
    • Ga naar de volgende iteratie met continue
      Gebruik continue om de rest van één iteratie over te slaan, voorkom de bijbehorende valkuil in while-lussen en maak onderscheid tussen continue, break en pass.
    • Voer code uit als een lus eindigt zonder break
      Voeg een else-blok toe aan een for- of while-lus om te melden dat er geen break is geweest, en gebruik een vlagvariabele voor hetzelfde doel.
  4. Gebruik de standaardpatronen voor lussen om waarden te tellen, op te tellen en te middelen, de grootste en kleinste waarde te vinden en te zoeken naar elementen die aan een voorwaarde voldoen.
    • Tel waarden en houd een lopend totaal bij
      Gebruik tellers en accumulators om tijdens de iteraties van een lus een aantal, totaal, product, gemiddelde of stuk tekst op te bouwen.
    • Zoek de grootste en kleinste waarde
      Houd de beste waarde tot dan toe bij om een maximum of minimum te vinden, kies een veilige startwaarde en leg ook vast waar die voorkwam.
    • Zoek elementen die aan een voorwaarde voldoen
      Controleer elementen één voor één om een overeenkomst te vinden, beslis pas na controle van alles dat iets “niet gevonden” is en beantwoord vragen als “voldoet er minstens één?” en “voldoen ze allemaal?”.
  5. Plaats een lus binnen een andere om met rijen en kolommen, combinaties en vormen te werken, voorspel hoe vaak de binnenste lusinhoud wordt uitgevoerd en stuur beide lussen.
    • Maak een lus binnen een lus
      Schrijf geneste lussen voor rasters, tabellen, combinaties en groeiende patronen en tel hoe vaak de binnenste lusinhoud wordt uitgevoerd.
    • Stuur het uitvoeringsverloop van geneste lussen
      Gebruik voorwaarden, break, continue en vlagvariabelen binnen geneste lussen en begrijp dat elke instructie alleen haar eigen lus beïnvloedt.
  6. Voorspel precies wat een lus doet door haar met de hand te volgen, tel haar iteraties en zoek en herstel één-ernaast-fouten en andere veelvoorkomende programmeerfouten in lussen.
    • Volg een lus met een uitvoeringstabel
      Voer een lus met de hand uit in een uitvoeringstabel om de uitvoer, eindwaarden en het aantal iteraties te voorspellen, en gebruik print-instructies om de lus automatisch te volgen.
    • Zoek en herstel één-ernaast-fouten
      Herken lussen die één keer te veel of te weinig worden uitgevoerd, gebruik exacte regels om iteraties te tellen en herstel de grenzen.

Lussen in Python: uitleg

6 hoofdstukken

1

Herhaal acties met while-lussen

Een programma kan om invoer blijven vragen of een berekening herhalen totdat het een doel bereikt. Een while-lus maakt dat mogelijk door vóór elke doorgang door de lusinhoud een voorwaarde te controleren. Je brengt de startwaarde, toets en bijwerking met elkaar in verband en gebruikt die structuur vervolgens voor invoer en validatie. Door de veranderende waarden te volgen, zie je ook waarom een lus stopt, haar inhoud helemaal overslaat of blijft doorgaan zonder een uitgang te bereiken.

1.1 Hoe een while-lus werk herhaalt

Een lus herhaalt een codeblok. Elke doorgang door het blok is een iteratie. Een while-lus controleert vóór elke doorgang een voorwaarde en voert de lusinhoud uit zolang die voorwaarde waar is. Dit past bij een taak zoals “blijf optellen totdat het totaal 100 bereikt”.

Startwaarde, toets en bijwerking

Een tellus heeft een startwaarde, een voorwaarde en een bijwerking nodig. De kop eindigt met een dubbele punt. Laat de lusinhoud met vier spaties inspringen:

n = 3
while n > 0:
    print(n)
    n = n - 1
print("Liftoff!")

De uitvoer is:

3
2
1
Liftoff!

Bij de eerste controle is n > 0 waar omdat n gelijk is aan 3. Python toont 3, trekt er 1 van af en gaat terug naar de kop. Dit herhaalt zich met 2 en daarna 1. Door de bijwerking wordt n gelijk aan 0, dus is de volgende controle onwaar. Python slaat de lusinhoud over en voert de laatste print uit.

De inspringing bepaalt wat wordt herhaald. Beide ingesprongen regels horen bij de lusinhoud. De laatste regel springt even ver in als while en wordt dus eenmaal na de lus uitgevoerd. Een if controleert de voorwaarde eenmaal; while gaat na elke voltooide lusinhoud terug om opnieuw te controleren.

De controle gebeurt aan het begin

Een variabele veranderen onderbreekt de rest van de huidige lusinhoud niet:

n = 1
while n > 0:
    n -= 1
    print("Still in this pass")
print(n)

Dit toont Still in this pass en daarna 0, op afzonderlijke regels. De bijwerking maakt de voorwaarde onwaar, maar Python controleert die pas wanneer het teruggaat naar de kop. Als je in plaats daarvan begint met n = 0, wordt de hele lusinhoud overgeslagen: een while-lus kan nul keer worden uitgevoerd.

Korte bijwerkingen en veranderende waarden

n -= 1 betekent n = n - 1. Op dezelfde manier telt count += 1 er 1 bij op, vermenigvuldigt balance *= 1.07 met 1,07 en vervangt n //= 10 de waarde van n door het gehele quotiënt bij deling door 10. Python heeft geen verhogingsoperator: count++ is een syntaxisfout. Als je ++count schrijft, pas je tweemaal de unaire plus toe en blijft het gehele getal ongewijzigd.

Hier verwijdert een lus bij elke doorgang één cijfer:

n = 472
total = 0
while n > 0:
    total += n % 10
    n //= 10
print(total)

De rest n % 10 is het laatste cijfer. Eerst wordt 2 opgeteld en wordt n gelijk aan 47. Daarna wordt 7 opgeteld en wordt n gelijk aan 4. Ten slotte wordt 4 opgeteld en wordt n gelijk aan 0. De uitvoer is 13. De bijwerking bereidt zowel de volgende doorgang voor als de beëindiging van de lus.

Bij een lus met een doelwaarde hoeft het aantal herhalingen niet vooraf bekend te zijn. Als je begint met een saldo van 1000, dit met 1,07 vermenigvuldigt en een jaarteller verhoogt totdat het saldo 2000 bereikt, zijn 11 doorgangen nodig. Na 10 doorgangen is het saldo ongeveer 1967,15; na 11 is het ongeveer 2104,85.

Voorwaarden kunnen vergelijkingen combineren met and, or en not. Waarheidsinterpretatie werkt ook: voor een geheel getal herhaalt while n: zolang n niet nul is. Gebruik een voorwaarde waarvan de betekenis gemakkelijk te volgen is. Spring consequent in met spaties; niet-overeenkomende niveaus kunnen een IndentationError veroorzaken en gemengde tabs en spaties kunnen een TabError veroorzaken.

Belangrijkste punten

  • Een while-lus controleert haar voorwaarde vóór elke iteratie, dus kan de lusinhoud nul keer worden uitgevoerd.
  • Initialiseer vóór de lus en werk binnen de lus bij om dichter bij de uitgang te komen.
  • Regels na een bijwerking worden nog uitgevoerd voordat de voorwaarde opnieuw wordt gecontroleerd.
  • De inspringing bepaalt welke instructies worden herhaald.
  • Gebruik += en -= voor bijwerkingen; Python heeft geen verhogingsoperator ++.

1.2 Waarom een lus blijft doorgaan

Een oneindige lus blijft herhalen zonder een uitgang te bereiken. Je ziet mogelijk dezelfde uitvoer voorbij blijven komen of een programma dat niets lijkt te doen. Volg de waarden die in de voorwaarde worden gebruikt en zoek naar een bereikbare uitweg om de oorzaak te vinden.

Zoek de bijwerking

Deze lus blijft 3 tonen:

n = 3
while n > 0:
    print(n)

De toets blijft waar omdat niets n verandert. Voeg n -= 1 toe binnen de lusinhoud om de waarden 3, 2 en 1 te tonen voordat de lus stopt. Het helpt niet om die bijwerking na de lus te plaatsen: het programma kan die niet bereiken zolang de lus nog loopt.

Ook de richting is belangrijk. Bij while n > 0: laat een bijwerking met n += 1 een positieve waarde groeien. Gehele getallen in Python slaan niet bij een vast maximum om en zorgen dus niet per ongeluk voor een uitweg. Benoem de verandering die je verwacht, zoals “één poging minder over”, en controleer of de code die verandering op elk pad door de lusinhoud uitvoert.

Een doel kan worden gemist

Een bijwerking kan de waarde bij elke doorgang veranderen en toch nooit een doel bereiken waarmee op gelijkheid wordt getoetst:

n = 1
while n != 10:
    print(n)
    n += 2

De waarden zijn 1, 3, 5, 7, 9, 11 enzovoort. Ze zijn altijd oneven, dus is geen ervan gelijk aan 10. Gebruik voor de taak “toon oneven waarden onder 10” de voorwaarde while n < 10:. Zodra n gelijk wordt aan 11, is die voorwaarde onwaar. De keuze van de vergelijking moet passen bij de vraag of de taak eindigt bij een waarde of wanneer een grens wordt overschreden.

Decimale stappen en exacte gelijkheid

Veel decimale breuken worden als zwevendekommagetallen bij benadering opgeslagen. Als je tien keer 0.1 bij 0.0 optelt, krijg je 0.9999999999999999. Een lus die op exacte gelijkheid met 1.0 wacht, mist daardoor het bedoelde stoppunt.

Als de taak is om een vaste reeks tienden te doorlopen, tel je met gehele getallen en bereken je elk decimaal getal:

for i in range(11):
    x = i / 10
    print(x)

Dit doorloopt 11 waarden van 0.0 tot en met 1.0. Het gehele aantal bepaalt de herhalingen; het opgeslagen decimale getal bepaalt niet of de lus moet stoppen.

Controleer elke route door de lusinhoud

Zoek voordat je een while-lus uitvoert de startwaarden, de voorwaarde en elke instructie die die waarden verandert. Controleer of de verandering de voorwaarde onwaar kan maken. Als een if een bijwerking overslaat, volg je ook die route. Een tijdelijke regel zoals print("n =", n) binnen de lusinhoud kan een waarde laten zien die vastzit of zich van de grens verwijdert.

Druk op Ctrl+C in een terminal om een actief programma te onderbreken, of gebruik de knop Stop of Interrupt van de editor. In een terminal meldt Python normaal gesproken KeyboardInterrupt met een stacktrace.

Bewuste herhaling

while True: houdt de voorwaarde in de kop bewust waar. De lusinhoud gebruikt break om de lus te verlaten wanneer een gebeurtenis optreedt, bijvoorbeeld als de gebruiker “quit” invoert. De uitgang moet bereikbaar zijn. Een invoerlus kan blijven wachten omdat de gebruiker nog niet heeft gevraagd om te stoppen; een lus waarvan de logica de bedoelde uitgang onmogelijk maakt, is een programmeerfout.

Belangrijkste punten

  • Controleer of elk pad dat zich herhaalt een uitgang kan bereiken.
  • Een ontbrekende of verkeerd geplaatste bijwerking, of een bijwerking in de verkeerde richting, kan een while-lus laten doorgaan.
  • Door de stapgrootte kan een doel waarmee op gelijkheid wordt getoetst, worden overgeslagen.
  • Gebruik een gehele teller voor een vast aantal decimale stappen.
  • Met Ctrl+C of een onderbreking in de editor stop je een actief programma.
  • Een bewust gemaakte while True-lus wordt verlaten via een bereikbare break.

1.3 Invoerlussen en aanvaardbare antwoorden

Een invoerlus kan een onbekende hoeveelheid gegevens verzamelen of blijven vragen totdat een antwoord aanvaardbaar is. In beide gevallen moet de nieuwe invoer de volgende beslissing om te herhalen beïnvloeden.

Stop bij een stopwaarde

Een stopwaarde is een speciale invoerwaarde die “geen gegevens meer” betekent. Kies een waarde die geen echt gegeven kan zijn. Voor positieve aantallen kan 0 werken; als 0 een geldige meting is, kies je een ander stopsignaal.

De eerste invoer vóór de lus haalt de eerste waarde op voordat de voorwaarde wordt gecontroleerd:

total = 0
number = int(input("Number (0 to stop): "))
while number != 0:
    total += number
    number = int(input("Number (0 to stop): "))
print("Total:", total)

Bij de invoer 4, 7 en 0 telt de lusinhoud eerst 4 op en daarna 7. Door 0 te lezen wordt de volgende voorwaarde onwaar. Het programma toont Total: 11; het verwerkt de stopwaarde nooit. Als de eerste invoer 0 is, wordt de lusinhoud nul keer uitgevoerd en blijft het totaal 0.

De laatste leesinstructie binnen de lusinhoud is essentieel. Zonder die instructie wordt dezelfde eerste waarde eindeloos verwerkt. De toets moet ook plaatsvinden voordat een nieuw gelezen waarde wordt verwerkt: anders kan een stopwaarde als gegeven worden meegeteld.

Houd typen consistent

input() geeft tekst terug. De string "0" is niet gelijk aan het gehele getal 0. Converteer numerieke invoer met int() voordat je die met een numerieke stopwaarde vergelijkt, of houd de invoer als tekst en vergelijk met een string zoals "done". Een numerieke conversie verwacht een geldige numerieke string; een bereikcontrole toetst het resulterende getal.

Houd voor een gemiddelde naast het totaal een teller bij. Met stopwaarde -1 en invoer 8, 6, 10 en -1 is het totaal 24 en het aantal 3. Deel na de lus om 8.0 te krijgen. Als de eerste invoer -1 is, blijft het aantal 0, dus gebruik je if count > 0: vóór de deling. Zo verwerk je een lege gegevensverzameling zonder ZeroDivisionError.

Vraag opnieuw zolang een antwoord ongeldig is

Een validatielus beschrijft de onaanvaardbare antwoorden in haar voorwaarde:

age = int(input("Age (0-120): "))
while age < 0 or age > 120:
    print("Please enter an age from 0 to 120.")
    age = int(input("Age (0-120): "))
print("Thank you.")

Bij 150, -2 en 34 verschijnt de waarschuwing twee keer. De waarde 34 maakt beide vergelijkingen onwaar, dus eindigt de lus. De grenswaarden 0 en 120 worden ook geaccepteerd.

Het woord or is belangrijk: een leeftijd is ongeldig als die onder het minimum of boven het maximum ligt. Met age < 0 and age > 120 zou niets worden afgewezen, omdat één getal niet aan beide voorwaarden kan voldoen.

Voor een ja-neeantwoord is de toets op een ongeldig antwoord answer != "y" and answer != "n". Een antwoord moet van beide geaccepteerde strings verschillen om te worden afgewezen. Met or zou zelfs "y" de lus laten herhalen omdat het verschilt van "n". Volg één aanvaardbaar en één onaanvaardbaar antwoord om zo’n voorwaarde te controleren.

Voor dezelfde taken kun je while True gebruiken met één leesinstructie in de lusinhoud, gevolgd door een stoptoets en break. Daarmee komt de beslissing direct na de invoer en hoef je de leesinstructie niet twee keer te schrijven.

Belangrijkste punten

  • Een stopwaarde geeft het einde van de gegevens aan en moet vóór de verwerking worden getoetst.
  • Een lus met eerste invoer vóór de lus leest vóór de lus en opnieuw aan het einde van de lusinhoud.
  • Vergelijk typen die bij elkaar passen: input geeft een string terug.
  • Validatie herhaalt zolang het huidige antwoord ongeldig is.
  • Controleer of het aantal positief is voordat je een gemiddelde berekent.
2

Doorloop sequenties met for-lussen en range

Wanneer een taak elk teken, elke waarde in een lijst of een bekende getallenreeks doorloopt, regelt een for-lus het doorlopen. Je kunt je dan richten op de actie voor elk element. Een getallenbereik levert stappen met gehele getallen zonder dat je een lange lijst hoeft te schrijven. De startwaarde, uitgesloten eindgrens en stapgrootte verklaren zowel de doorlopen waarden als de lege gevallen. Door deze structuur met while-lussen te vergelijken, kun je een duidelijke manier kiezen om een taak uit te drukken.

2.1 Tekens en lijstwaarden doorlopen

Een for-lus doorloopt de elementen van een sequentie op volgorde. Bij elke doorgang kent Python het volgende element toe aan de lusvariabele en voert het de ingesprongen lusinhoud uit. Een lus over een sequentie heet vaak een lus met een bepaald aantal herhalingen, omdat de elementen bepalen welk werk moet worden uitgevoerd.

Eén element tegelijk

Een string is een sequentie van tekens:

for ch in "cat":
    print(ch)

Dit toont c, a en t op afzonderlijke regels. Spaties en leestekens tellen ook als tekens. De string "hi there" heeft acht tekens, inclusief de spatie, dus kost het acht doorgangen om elk teken te doorlopen.

Een lijst bevat een sequentie van waarden. De letterlijke vorm gebruikt vierkante haken en komma’s:

scores = [3, 41, 12]
for score in scores:
    print(score * 2)

De uitvoer is 6, 82 en 24, elk op een eigen regel. score is steeds één getal, niet de hele lijst en ook niet de positie ervan. Je hoeft geen teller handmatig bij te werken om van 3 naar 41 naar 12 te gaan.

Gebruik een naam die één element beschrijft: name in names of score in scores. Als de lusinhoud de huidige waarde nooit nodig heeft, is _ een gebruikelijke naam voor die ongebruikte lusvariabele.

Een toekenning vervangt geen element

De lusvariabele is een gewone variabele. Als je er een ander getal aan toekent, vervang je het getal in de lijst niet:

numbers = [1, 2, 3]
for n in numbers:
    n = n * 10
    print(n)
print(numbers)

De lusinhoud toont 10, 20 en 30. Bij elke nieuwe iteratie wordt het volgende oorspronkelijke lijstelement aan n toegekend. De laatste uitvoerregel is [1, 2, 3]: de lijst zelf is niet veranderd. Na de lus behoudt n de waarde 30, de laatste waarde die er in de lusinhoud aan is toegekend.

Een lege sequentie geeft de lusinhoud geen werk. Bij for ch in "": zijn er nul doorgangen en kent de lus geen waarde toe aan ch. Ga er niet van uit dat een lus haar variabele aanmaakt als er mogelijk geen elementen zijn.

Lidmaatschap binnen een lus

In de kop van een for-lus introduceert in de sequentie die wordt doorlopen. In een voorwaarde toetst het lidmaatschap en levert het True of False op. Deze toepassingen kunnen samenwerken:

vowels = 0
for ch in "education":
    if ch in "aeiou":
        vowels += 1
print(vowels)

Elk teken wordt doorlopen, maar de teller verandert alleen bij e, u, a, i en o. De uitvoer is 5. De if springt in binnen de lus en de bijwerking van de teller springt in binnen de if.

Deze lus laat ook zien waarom een lusvariabele en een teller verschillende taken hebben. ch bevat het huidige teken; vowels houdt bij hoeveel tekens tot dan toe aan de voorwaarde hebben voldaan. De teller begint vóór de lus, zodat die het resultaat tussen doorgangen bewaart.

Een los geheel getal kan geen elementen leveren: for i in 5: veroorzaakt TypeError. Om een actie vijf keer te herhalen, schrijf je for _ in range(5):. Het bereik levert de stappen, ook als de lusinhoud hun waarden niet gebruikt.

Belangrijkste punten

  • Een for-lus kent elk element van een sequentie op volgorde toe aan haar lusvariabele.
  • Spaties en leestekens zijn tekens in een string.
  • Als je een numerieke lusvariabele opnieuw een waarde geeft, blijft de oorspronkelijke lijst ongewijzigd.
  • Een lege sequentie leidt tot nul uitvoeringen van de lusinhoud en geen toekenning aan de lusvariabele.
  • In een voorwaarde toetst in het lidmaatschap; in de kop van een for-lus introduceert het de te doorlopen elementen.
  • Gebruik range(5), niet het gehele getal 5, om vijf herhalingen te leveren.

2.2 De startwaarde, eindgrens en stapgrootte van een getallenbereik kiezen

Een getallenbereik beschrijft gehele getallen met gelijke tussenstappen. Het is handig om werk een bepaald aantal keer te herhalen, op of af te tellen en regelmatige stappen te kiezen. De eindgrens is altijd uitgesloten.

Drie vormen
VormBetekenisWaarden
range(5)Begin bij 0; stap met 10, 1, 2, 3, 4
range(2, 6)Begin bij 2; stap met 12, 3, 4, 5
range(1, 10, 2)Begin bij 1; stap met 21, 3, 5, 7, 9

Bij één argument is dat argument de eindgrens. Bij twee zijn het de startwaarde en eindgrens. Bij drie is het laatste argument de stapgrootte die na elke waarde wordt opgeteld. range(0, 10, 3) doorloopt 0, 3, 6 en 9; de volgende stap zou 12 bereiken, dus wordt die niet geleverd.

De eindgrens blijft uitgesloten, ook als een stap er precies op kan uitkomen. range(0, 10, 5) levert alleen 0 en 5. Bij de standaard positieve stapgrootte van 1 en een eindgrens boven de startwaarde is het aantal geleverde waarden de eindgrens min de startwaarde.

Tel terug met een negatieve stapgrootte

range(5, 0, -1) levert 5, 4, 3, 2 en 1. Om 0 mee te nemen, zet je de eindgrens eronder: range(5, -1, -1) levert zes waarden, eindigend bij 0.

De richting moet bij de grenzen passen. range(5, 0) is leeg omdat de standaardstapgrootte positief is. range(1, 5, -1) is ook leeg omdat het bereik onder de eindgrens begint maar naar beneden stapt. Lege getallenbereiken zijn geldig en leiden tot nul iteraties; een stapgrootte van nul veroorzaakt daarentegen een ValueError.

Plaats de laatste benodigde waarde binnen de grens

Om de even gehele getallen van 2 tot en met 20 op te tellen:

total = 0
for n in range(2, 21, 2):
    total += n
print(total)

De eindgrens 21 zorgt ervoor dat 20 wordt doorlopen. De tien waarden tellen op tot 110, dus toont het programma 110. Met eindgrens 20 zou 20 worden weggelaten en zou het resultaat 90 zijn.

Laat voor een tafel van vermenigvuldiging het bereik de factoren leveren:

for i in range(1, 11):
    print(7, "x", i, "=", 7 * i)

De eerste uitvoerregel is 7 x 1 = 7 en de tiende is 7 x 10 = 70. Als het getal zelf niet wordt gebruikt, kan for _ in range(3): een bericht drie keer herhalen.

Inspecteer een getallenbereik en controleer de argumenten

list(range(2, 6)) levert [2, 3, 4, 5] op, wat handig is bij het controleren van de grenzen. len(range(0, 10, 3)) is 4. Een getallenbereik bewaart de grenzen en stapgrootte die het bepalen, in plaats van een lijst met elk geheel getal te maken.

De argumenten zijn gehele getallen, waaronder nul en negatieve gehele getallen: range(-3, 3) doorloopt -3 tot en met 2. Een zwevendekommagetal zoals 3.0 wordt met een TypeError afgewezen, ook al heeft het geen fractioneel deel. Een als tekst ingevoerd aantal kun je eerst converteren met n = int(input("How many? ")) en daarna gebruiken in range(n).

Belangrijkste punten

  • De eindgrens van een getallenbereik is in elke vorm uitgesloten.
  • Een ontbrekende startwaarde is standaard 0; een ontbrekende stapgrootte is standaard 1.
  • Tel terug met een negatieve stapgrootte en een eindgrens onder de startwaarde.
  • Grenzen die niet passen bij de richting van de stapgrootte leveren een leeg getallenbereik op.
  • Argumenten van range moeten gehele getallen zijn en de stapgrootte mag niet nul zijn.
  • Inspecteer de geleverde waarden met list() en hun aantal met len().

2.3 Een lus kiezen die bij de taak past

Kies een lus door te vragen wat de herhaling bepaalt. Als er een sequentie van te doorlopen elementen of een aantal herhalingen is, drukt for het werk meestal direct uit. Als de volgende herhaling afhangt van een veranderende voorwaarde of toekomstige invoer, zet while die beslissing in de kop.

Bepaalde elementen of een veranderende voorwaarde
TaakLogische lusReden
Toon elke naam in een lijstfor name in names:De lijst levert de elementen.
Herhaal een bericht een door de gebruiker gekozen aantal keerfor _ in range(n):Het ingevoerde getal levert een aantal.
Lees berichten totdat “quit” verschijntwhileHet stoppunt hangt af van toekomstige invoer.
Laat een saldo groeien tot een doelwhile balance < target:Het huidige saldo bepaalt of de lus herhaalt.

Een aantal hoeft niet als letterlijke waarde in het programma te staan. Nadat je n uit invoer hebt gelezen, geeft range(n) nog steeds een bepaalde reeks stappen. Een lus met een onbepaald aantal herhalingen wacht op een voorwaarde waarvan het stoppunt niet als aantal herhalingen is vastgelegd.

Een groot aantal herhalingen gokken past slecht bij “totdat het klaar is”. Een lus over range(1000) kan haar pogingen opgebruiken voordat de gebruiker klaar is, en een versie zonder stopcontrole gaat door nadat het werk is voltooid.

Herschrijf een tellus

Deze twee lussen tonen 1 tot en met 5, elk getal op een eigen regel:

for i in range(1, 6):
    print(i)
i = 1
while i < 6:
    print(i)
    i += 1

In de while-versie wordt de startwaarde van het bereik de initialisatie, wordt de uitgesloten eindgrens de <-vergelijking en wordt de stapgrootte de bijwerking. De lusinhoud gebruikt i vóór die bijwerking. Als je de bijwerking vóór print(i) zet, verschuiven de getoonde waarden.

Bij terugtellen veranderen zowel de vergelijking als de bijwerking:

i = 10
while i > 0:
    print(i)
    i -= 2

Dit toont 10, 8, 6, 4 en 2, net als for i in range(10, 0, -2):. Het aflopende bereik sluit de eindgrens uit, dus is de bijpassende while-voorwaarde i > 0.

De twee vormen komen overeen voor de taak om de telling te tonen; hun eindwaarden voor de lusvariabele verschillen. De while-versie voert de laatste bijwerking naar 0 uit voordat de lus stopt. De for-versie eindigt na toekenning van de laatst geleverde waarde, 2.

Een getallenbereik behoudt de opgegeven grenzen
n = 3
for i in range(n):
    n = 10
    print(i)

Dit toont nog steeds 0, 1 en 2. Het bereik is gemaakt met 3; als je 10 aan n toekent, wordt het niet opnieuw gemaakt. Een break kan de lus voortijdig beëindigen, maar een verandering van die afzonderlijke variabele verandert de getallen die het bereik levert niet.

Een while-kop evalueert daarentegen bij elke terugkeer de expressie opnieuw. Als die expressie n gebruikt, kan een verandering van n in de lusinhoud veranderen wanneer de lus eindigt. Als beide vormen een tellende taak duidelijk uitdrukken, regelt de for-versie het doorlopen zonder een handmatige bijwerking die je kunt vergeten.

Belangrijkste punten

  • Gebruik for om geleverde elementen of een bekend aantal te doorlopen, ook als dat aantal tijdens de uitvoering is ingelezen.
  • Gebruik while als een veranderende voorwaarde of toekomstige invoer de herhaling bepaalt.
  • Bij het omzetten van een tellus moeten de startwaarde, grens, stapgrootte en werkvolgorde behouden blijven.
  • Als je een variabele verandert die is gebruikt om een getallenbereik te maken, verandert dat bereik niet.
3

Stuur een lus met break, continue en else

Een lus voltooit normaal haar inhoud en keert terug voor een volgende doorgang. Soms moet de lus stoppen zodra een resultaat verschijnt, of het huidige element overslaan en doorgaan. Met break en continue druk je die beslissingen uit. Een lus kan ook een else-blok hebben voor normale voltooiing. Door de exacte sprong van elke instructie te volgen, leer je zoekacties, invoerlussen en een beperkt aantal pogingen te lezen zonder een voortijdige beëindiging met een gewoon einde te verwarren.

3.1 Voortijdig stoppen met break

break beëindigt onmiddellijk de binnenste lus waarin de instructie staat. Python slaat de rest van die lusinhoud en alle resterende iteraties over en gaat daarna verder na de lus. Een voorwaarde binnen de lusinhoud bepaalt wanneer deze voortijdige beëindiging moet plaatsvinden.

Stop wanneer het eerste resultaat is gevonden

Zoek het eerste veelvoud van 7 boven 50:

for n in range(51, 100):
    if n % 7 == 0:
        print(n)
        break

De lus controleert 51, 52, 53, 54, 55 en 56. Bij 56 is de rest nul, dus toont Python 56 en verlaat het de lus. Dit kost zes iteraties, ook al kan het bereik 49 getallen leveren. Zonder break zou de lus ook latere veelvouden van 7 tonen.

break springt in binnen de if, dus wordt de instructie alleen bij een overeenkomst uitgevoerd. Als die in plaats daarvan even ver zou inspringen als if, zou die bij de allereerste iteratie worden uitgevoerd, ongeacht de toets. Een break binnen een if beëindigt de lus waarin die if staat; niet alleen het voorwaardelijke blok.

Lees eenmaal en beslis daarna of je verwerkt

Een while True-lus plaatst de beslissing om te stoppen na het lezen van invoer:

while True:
    line = input("> ")
    if line == "done":
        break
    print(line)
print("Done!")

Bij de invoer “hello”, “there” en “done” zijn de antwoordregels:

hello
there
Done!

De stopwaarde wordt vóór de verwerkingsregel getoetst. Wanneer die verschijnt, springt break over print(line) heen. De laatste, niet-ingesprongen print wordt na de lus nog uitgevoerd. Er is maar één invoerinstructie, omdat elke doorgang begint met het lezen van een nieuwe regel.

Een numeriek totaal gebruikt dezelfde volgorde: initialiseer total = 0 vóór de lus; lees en converteer een getal; stop met break als het 0 is; tel het anders op. Voor 4, 7 en 0 is het totaal 11. Als je vóór de stoptoets verwerkt, kan de stopwaarde in de berekening terechtkomen. Dat is van belang als de stopwaarde een aantal, product of gemiddelde kan veranderen.

Valideer bij de invoer
while True:
    age = int(input("Age: "))
    if 0 <= age <= 120:
        break
    print("Please enter an age from 0 to 120.")
print("Accepted:", age)

De aaneengeschakelde vergelijking accepteert een leeftijd van 0 tot en met 120. Ze betekent 0 <= age and age <= 120. Bij een geaccepteerd getal wordt de lus vóór de waarschuwing verlaten; een getal buiten dat bereik leidt tot de waarschuwing en daarna tot nieuwe invoer. In deze vorm beschrijft de if een geldig antwoord, terwijl een validatielus waarvan de kop de herhaling bepaalt een ongeldig antwoord beschrijft.

Lees de sprong letterlijk

Een instructie na break in hetzelfde blok kan niet worden uitgevoerd. Plaats een melding of opgeslagen resultaat vóór de break als die bij het succesvolle geval hoort. Zet code na de lus als die zowel na een voortijdige beëindiging als na normale voltooiing moet worden uitgevoerd.

break moet binnen een lus staan; anders veroorzaakt Python een SyntaxError. Meerdere afzonderlijke uitgangen kunnen een lus moeilijker te volgen maken. Als één voorwaarde de stopregel van de taak vanzelfsprekend beschrijft, kan het pad gemakkelijker te volgen zijn als je die voorwaarde in de kop houdt.

Belangrijkste punten

  • Break beëindigt onmiddellijk de binnenste lus waarin de instructie staat.
  • Plaats de break binnen de voorwaarde die de beëindiging moet veroorzaken.
  • Een while True-invoerlus leest, toetst op de stopwaarde en verwerkt daarna de gegevens.
  • Instructies na break in hetzelfde blok zijn onbereikbaar.

3.2 Een element overslaan met continue

continue slaat de rest van de huidige iteratie over. De lus blijft actief: een for-lus neemt het volgende element en een while-lus keert terug naar haar voorwaarde. Dit is handig als een element geen van de verwerkingen moet krijgen die op een controle volgen.

Sla geselecteerde waarden over
total = 0
for n in range(1, 11):
    if n % 3 == 0:
        continue
    total += n
print(total)

Het bereik levert alle tien gehele getallen van 1 tot en met 10. Bij 3, 6 en 9 slaat continue de optelling over. De som van alle tien is 55; door die drie waarden weg te laten, gaat er 18 af, dus toont het programma 37.

Continue verwijdert geen iteratie uit het bereik. De lusinhoud begint nog steeds met elke waarde, ook met de overgeslagen waarden. De instructie verandert welke latere regels bij die doorgang worden uitgevoerd.

Een positief filter kan hetzelfde werk uitdrukken. In een lus over [5, -2, 8, -7, 3] toont if n < 0: continue gevolgd door print(n) de waarden 5, 8 en 3. Als je de print binnen if n >= 0: zet, krijg je dezelfde uitvoer. Continue is vaak handig als er meerdere verwerkingsregels volgen, omdat afgewezen elementen dat deel van de lusinhoud direct kunnen verlaten.

Sla een bijwerking in een while-lus niet over
i = 0
while i < 5:
    if i == 2:
        continue
    print(i)
    i += 1

Dit toont 0 en 1 en blijft dan steken bij 2. Bij 2 springt continue naar de voorwaarde zonder de bijwerking te bereiken. De voorwaarde blijft waar en dezelfde tak wordt opnieuw genomen.

Om het tonen van 2 over te slaan en toch verder te komen, werk je ook in die tak de waarde bij:

i = 0
while i < 5:
    if i == 2:
        i += 1
        continue
    print(i)
    i += 1

Nu is de uitvoer 0, 1, 3 en 4 op afzonderlijke regels. Het pad dat de uitvoer overslaat, gaat van 2 naar 3. Elke route door deze lusinhoud voert precies één bijwerking uit.

Break, continue en pass
InstructieEffect wanneer deze wordt bereikt
breakBeëindig de lus waarin de instructie staat onmiddellijk.
continueSla de rest van deze doorgang over en begin de volgende luscontrole of het volgende element.
passDoe niets; ga normaal verder met de volgende instructie.

Stel dat voor een lus over [1, 2, 3, 4] een if n == 2: een van deze instructies bevat en print(n) op de if volgt. Break toont alleen 1. Continue toont 1, 3 en 4. Pass toont alle vier waarden omdat die de print niet overslaat.

pass kan een lusinhoud vullen waar Python een instructie vereist terwijl de code wordt ontwikkeld. De instructie zorgt niet voor een bijwerking of uitgang: while True: pass blijft doorgaan. Break en continue moeten binnen een lus staan en beïnvloeden alleen de binnenste lus waarin ze staan.

Belangrijkste punten

  • Continue slaat de resterende instructies van de huidige doorgang over, waarna de lus verdergaat.
  • Een overgeslagen element telt nog steeds als een iteratie.
  • Elke herhalende route door een while-lusinhoud moet voortgang naar een uitgang behouden.
  • Pass doet niets en slaat latere instructies niet over.
  • Break beëindigt de lus; continue houdt haar actief.

3.3 Wat het else-blok van een lus betekent

Een else-blok kan bij een for- of while-lus horen. Het wordt eenmaal uitgevoerd wanneer de lus normaal eindigt: een for-lus heeft geen elementen meer of een while-voorwaarde wordt onwaar. Het wordt overgeslagen wanneer die lus door break eindigt. Lees het als het geval zonder break.

Meld dat een zoekactie geen overeenkomst heeft gevonden
for n in [4, 9, 15, 22]:
    if n % 5 == 0:
        print("First multiple of 5:", n)
        break
else:
    print("No multiple of 5")

De lus bereikt 15, toont First multiple of 5: 15 en stopt met break. De else wordt overgeslagen. Met [4, 9, 22] gebruikt de lus elk element zonder break en toont ze eenmaal No multiple of 5.

De uitlijning is beslissend. De else springt even ver in als for en hoort dus bij de lus. Een else die even ver inspringt als de binnenste if, zou voor elk element zonder overeenkomst worden uitgevoerd en een mislukte zoekactie melden voordat die is voltooid.

Ook bij een lege lijst wordt de else van de lus bereikt. Er zijn geen elementen, dus wordt de lusinhoud nul keer uitgevoerd en is er geen break. Op dezelfde manier voert een while-lus waarvan de voorwaarde bij de eerste controle onwaar is, direct haar else uit.

Zoek een deler

Een priemgetal is een geheel getal van minstens 2 waarvan de enige positieve delers 1 en het getal zelf zijn. Zoek een deler tussen die grenswaarden:

n = 29
if n < 2:
    print("Not prime")
else:
    for d in range(2, n):
        if n % d == 0:
            print(n, "is divisible by", d)
            break
    else:
        print(n, "is prime")

Voor 29 is elke rest ongelijk aan nul en toont de else van de lus 29 is prime. Voor 21 is de eerste deler 3 en slaat de break de else van de lus over. De buitenste controle handelt getallen onder 2 af. Zonder die controle zou een leeg bereik voor 1 de else bereiken en 1 ten onrechte een priemgetal noemen. Voor 2 is het bereik ook leeg, maar is de conclusie “priemgetal” juist.

Een beperkt aantal pogingen met while-else
attempts = 0
while attempts < 3:
    guess = input("Password: ")
    if guess == "open sesame":
        print("Welcome!")
        break
    attempts += 1
else:
    print("Too many attempts.")

Een juiste gok voert de break uit, ook bij de derde poging. Drie verkeerde gokken verhogen de teller tot 3; de voorwaarde wordt onwaar en de else toont de melding dat het niet is gelukt. Een gewone instructie na de lus zou in beide gevallen worden uitgevoerd en zou dus geen onderscheid maken.

Leg het resultaat vast met een vlagvariabele

Een vlagvariabele is een booleaanse variabele die vastlegt of iets is gebeurd. Begin met found = False, verander de waarde in True wanneer een overeenkomst verschijnt en voer break uit. Na de lus handelt if not found: het geval af waarin niets is gevonden. Dat geeft hetzelfde zoekresultaat als de else van de lus, met een expliciete registratie van de gebeurtenis. Kies een vorm waarvan je de inspringing en de weg naar de uitgang duidelijk kunt uitleggen.

Belangrijkste punten

  • De else van een lus wordt uitgevoerd bij normale voltooiing en overgeslagen bij een break uit die lus.
  • Een else die even ver inspringt als een binnenste if heeft een andere betekenis.
  • Ook na nul iteraties wordt de else van de lus bereikt.
  • Een zoekactie kan eenmaal melden dat niets is gevonden, nadat elk element niet aan de toets bleek te voldoen.
  • Een booleaanse vlagvariabele kan een resultaat vastleggen voor gebruik na de lus.
  • Bij een lege zoekactie naar delers is de afzonderlijke regel nodig dat priemgetallen minstens 2 zijn.
4

Gebruik standaardpatronen voor lussen

Veel taken met lussen volgen een kleine verzameling herbruikbare patronen. Een teller houdt bij hoe vaak een toets slaagt, een accumulator bouwt een resultaat op en een variabele voor de beste waarde tot dan toe bewaart een maximum of minimum. Zoekacties gebruiken een vergelijkbare registratie om een overeenkomst te onthouden. De startwaarde en de plaats waar die verandert, bepalen wat het eindresultaat betekent. Je leert ook omgaan met lege gegevens en gelijke beste waarden, waarbij een kleine keuze het antwoord kan veranderen.

4.1 Aantallen, totalen, producten en tekst opbouwen

Een accumulator bewaart een resultaat tussen iteraties. Een teller is een bijzondere accumulator die telkens met 1 toeneemt als een gebeurtenis plaatsvindt. Stel de startwaarde vóór de lus in, werk die binnen de lus bij en gebruik het voltooide resultaat daarna.

Tel gebeurtenissen of tel waarden op
count = 0
for n in [4, 15, 22, 8, 11]:
    if n > 10:
        count += 1
print(count)

De toets slaagt voor 15, 22 en 11, dus is de uitvoer 3. De bijwerking telt 1 op voor een element dat voldoet; als je n zou optellen, zou je de waarden van die elementen optellen.

Om elk element op te tellen, initialiseer je total = 0, verwijder je de if-toets, voeg je total += n direct aan de lusinhoud toe en toon je daarna total. De vijf waarden tellen op tot 60. Hun gemiddelde is 60 / 5, wat 12.0 geeft; deling met / geeft voor deze gehele operanden een zwevendekommagetal terug.

Werk voor een gefilterd gemiddelde zowel het totaal als de teller bij onder dezelfde voorwaarde:

total = 0
count = 0
for n in [4, 15, 22, 8, 11]:
    if n > 10:
        total += n
        count += 1
if count > 0:
    print(total / count)
else:
    print("No matching values")

Hier is het totaal van de geselecteerde waarden 48 en het aantal 3, dus is de uitvoer 16.0. Als je door de lengte van de hele lijst zou delen, zou je de verkeerde groep gebruiken. De controle van de teller handelt ook een lege lijst of een lijst zonder overeenkomsten af.

Kies een startwaarde die bij de bewerking past
ResultaatStartwaardeBijwerking
Aantal0Tel 1 op bij een gebeurtenis.
Som0Tel elke geselecteerde waarde op.
Product1Vermenigvuldig met elke geselecteerde waarde.
Tekst""Voeg elk nieuw stuk samen met de opgebouwde tekst.

Een product van de gehele getallen 1 tot en met 5 begint bij 1 en eindigt bij 120. Als je bij 0 begint, blijft elk product 0.

Bij tekst opbouwen is ook de volgorde van belang:

rev = ""
for ch in "stressed":
    rev = ch + rev
print(rev)

Elk nieuw teken komt vóór de opgeslagen tekst, wat desserts oplevert. Als je de bijwerking verandert in rev = rev + ch, voeg je tekens achteraan toe en bouw je stressed opnieuw op.

Bewaar het resultaat tussen iteraties

Als je total = 0 binnen een somlus plaatst, wis je bij elke doorgang het eerdere werk. Bij [4, 15, 22, 8, 11] blijft aan het einde alleen 11 over als je vóór elke optelling opnieuw begint. Initialiseer buiten de lus, zodat de volgende optelling het vorige subtotaal gebruikt.

Een print binnen de lusinhoud toont het lopende totaal na elke bijwerking: in dit voorbeeld 4, 19, 41, 49 en 60. Een print na de lus toont alleen 60. Kies de plaats die past bij de gevraagde uitvoer.

Voor een eenvoudige opgeslagen lijst geeft sum(values) het totaal en len(values) het aantal. Met een expliciete lus kun je waarden filteren, meerdere resultaten tegelijk bijhouden of waarden verwerken zodra ze via invoer binnenkomen.

Belangrijkste punten

  • Initialiseer een accumulator vóór de lus, zodat die eerder werk bewaart.
  • Een teller telt 1 op per gebeurtenis; een totaal telt de waarde zelf op.
  • Begin sommen bij 0, producten bij 1 en tekst met een lege string.
  • Tel voor een gefilterd gemiddelde dezelfde geselecteerde waarden op en houd hun aantal bij.
  • Controleer vóór het delen of het aantal niet nul is.
  • Toon binnen de lus lopende resultaten en na de lus een eindresultaat.
  • Als je een teken vóór of na de opgeslagen tekst toevoegt, verandert de volgorde.

4.2 De beste waarde tot dan toe bewaren

Om een maximum te vinden, bewaar je de grootste waarde die je tot dan toe hebt gezien. Vergelijk elk nieuw element met die opgeslagen waarde en vervang die alleen als het nieuwe element groter is. Het minimumpatroon werkt op dezelfde manier met de vergelijking omgekeerd.

Begin zonder een gegevenswaarde te verzinnen

None is de waarde van Python voor “nog niets”. Daarmee kan het eerste element op een duidelijke manier de huidige beste waarde worden:

largest = None
for n in [12, -3, 25, 7]:
    if largest is None or n > largest:
        largest = n
print(largest)

De opgeslagen waarden na elk element zijn 12, 12, 25 en 25. Het programma toont 25. Bij het eerste element is largest is None waar. De or van Python stopt daar, dus probeert Python de ongeldige vergelijking van een getal met None niet. Bij latere doorgangen is de opgeslagen waarde een getal en wordt de tweede vergelijking gebruikt.

Voor een minimum begin je met smallest = None en gebruik je smallest is None or n < smallest. Dezelfde lijst levert -3 op.

Als je een maximum bij 0 laat beginnen, kan een waarde worden gemeld die nooit voorkwam. Voor -5, -2 en -9 is geen waarde groter dan 0, dus zou die versie ten onrechte 0 bewaren. Het maximum is -2. Een minimum bij 0 laten beginnen heeft het overeenkomstige probleem als elk element positief is.

Als bekend is dat de gegevens een element bevatten, werkt het ook om die eerste waarde als beste startwaarde te gebruiken. Ingebouwde functies verwerken eenvoudige opgeslagen lijsten: max([12, -3, 25, 7]) geeft 25 en min([12, -3, 25, 7]) geeft -3. Een zelfgeschreven lus kan bijbehorende informatie bewaren, zoals waar de waarde voorkwam.

Sla de positie op wanneer de beste waarde verandert
largest = None
best_day = None
day = 0
for temperature in [18, 23, 21, 26, 24]:
    day += 1
    if largest is None or temperature > largest:
        largest = temperature
        best_day = day
print(largest, best_day)

De dagteller gaat voor elk element vooruit. De beste dag verandert alleen wanneer een nieuw maximum verschijnt. De uiteindelijke uitvoer is 26 4, wat een temperatuur van 26 op dag 4 betekent. Als je de dag na de lus zou opslaan, zou je alleen de laatst onderzochte dag bewaren.

Bepaal wat er bij een gelijke beste waarde gebeurt

Voor [5, 8, 8, 3] bewaart de toets n > largest de eerste 8 en de bijbehorende positie, 2 als je vanaf 1 telt. Als je > vervangt door >=, wordt ook bij een gelijke waarde bijgewerkt en blijft de laatste 8 op positie 3 bewaard. Het grootste getal blijft gelijk; de opgeslagen positie verschilt.

Bij een lege lijst blijft een met None geïnitialiseerde beste waarde ongewijzigd. Controleer op die toestand voordat je een getal meldt of ermee rekent. Ze betekent dat geen enkel element een beste waarde heeft geleverd.

De vergelijking kan een eigenschap van een element gebruiken. Om het langste woord van “pear”, “banana” en “fig” te bewaren, vergelijk je len(word) met de lengte van het opgeslagen woord. “Banana” heeft zes tekens en wint dus. Sla het woord zelf op wanneer het de beste waarde wordt, zodat het resultaat het element aangeeft en niet alleen de lengte ervan.

Belangrijkste punten

  • Vergelijk elk nieuw element met de beste waarde tot dan toe en vervang die als het nieuwe element beter is.
  • None legt vast dat nog geen eerste element is gezien.
  • Door kortsluitevaluatie bij or wordt het eerste getal niet met None vergeleken.
  • Nul is geen veilige algemene startwaarde voor maxima of minima.
  • Sla een positie tegelijk met de bijbehorende beste waarde op.
  • Een strikte vergelijking bewaart de eerste gelijke beste waarde; als gelijkheid is toegestaan, blijft de laatste bewaard.

4.3 Zoeken en een overeenkomst onthouden

Lineair zoeken controleert elementen op volgorde totdat een overeenkomst is gevonden of er geen elementen meer zijn. Een overeenkomst kan een exacte waarde zijn, het eerste element dat aan een voorwaarde voldoet of een aanwijzing voor een vraag of minstens één of alle elementen voldoen.

Onthoud een gevonden overeenkomst
names = ["Ana", "Ben", "Chen"]
found = False
for name in names:
    if name == "Ben":
        found = True
        break
if found:
    print("Ben is on the list")
else:
    print("Ben is not on the list")

De vlagvariabele begint als onwaar omdat nog niets is gevonden. De eerste controle, Ana, laat haar ongewijzigd. De tweede controle vindt Ben, zet de vlagvariabele op waar en verlaat de lus. De uitvoer is Ben is on the list.

De vlagvariabele legt een gebeurtenis vast voor de hele zoekactie. Zet haar niet opnieuw op onwaar bij elk element zonder overeenkomst. Als een lus doorgaat nadat Ben is gevonden en found = False instelt wanneer Chen wordt bereikt, gaat het gevonden resultaat verloren. Ook hoort “niet gevonden” pas na alle mislukte controles te worden gemeld, niet binnen een else per element die al bij Ana meldt dat niets is gevonden voordat Ben is onderzocht.

Eerste of laatste overeenkomst

Voor [7, 4, 9, 10] is het eerste even getal 4 en het laatste 10. Deze lus bewaart het eerste:

match = None
for n in [7, 4, 9, 10]:
    if n % 2 == 0:
        match = n
        break
print(match)

De uitvoer is 4. Verwijder de break en elke nieuwe overeenkomst overschrijft de vorige, zodat 10 overblijft. Als niets overeenkomt, blijft de opgeslagen waarde None. Bepaal of de taak om het bestaan, het eerste element, het laatste element of een positie vraagt voordat je beslist wat je opslaat.

Om een positie te melden, houd je een teller bij die voor elk onderzocht element vooruitgaat en sla je die bij een overeenkomst op. Vermeld hoe de posities zijn genummerd: als je vanaf 1 telt, staat Chen op positie 3 in de namenlijst; de gebruikelijke positienummering van Python begint bij 0.

Minstens één vraagt één overeenkomst; alle vraagt één tegenvoorbeeld

Een zoekactie naar minstens één overeenkomst begint met onwaar en wordt waar bij het eerste element dat voldoet. De zoekactie kan daar stoppen omdat één overeenkomst de vraag beantwoordt.

Een zoekactie of alle elementen voldoen begint met waar en wordt onwaar bij het eerste element dat niet voldoet:

all_positive = True
for n in [3, 8, -1, 5]:
    if n <= 0:
        all_positive = False
        break
print(all_positive)

De derde waarde, -1, weerlegt “alle waarden zijn positief”, dus is de uitvoer False. Het is niet nodig om 5 te onderzoeken. Ook nul zou niet voldoen omdat positief groter dan nul betekent. Als er geen elementen zijn, blijft de vlagvariabele waar: er is geen tegenvoorbeeld verschenen.

Exact lidmaatschap en eigen voorwaarden

Voor alleen gelijkheid geeft "Ben" in names direct True of False. Een lus maakt de veranderende toestand van de zoekactie zichtbaar en laat de toets een eigen voorwaarde uitdrukken, zoals “het eerste woord langer dan vijf tekens”.

Stringvergelijkingen zijn exact. "ben" verschilt van "Ben" en "Ben " bevat een spatie aan het einde. Een zoekactie naar een van die strings mag de andere niet als gelijk beschouwen.

Belangrijkste punten

  • Een lineaire zoekactie onderzoekt elementen op volgorde totdat aan de stopregel is voldaan.
  • Initialiseer een vlagvariabele voor een gevonden overeenkomst eenmaal en bewaar een vastgelegd resultaat.
  • Meld pas dat niets is gevonden nadat de volledige zoekactie zonder resultaat is geëindigd.
  • Break bewaart de eerste overeenkomst; bij elke overeenkomst overschrijven bewaart de laatste.
  • Een controle of minstens één element voldoet stopt bij een overeenkomst; een controle of alle elementen voldoen stopt bij een tegenvoorbeeld.
  • Stringgelijkheid maakt onderscheid tussen hoofdletters, kleine letters en spaties.
5

Schrijf geneste lussen

Een lus binnen een andere lus kan rijen opbouwen, combinaties toetsen of werk voor elke groep herhalen. De buitenste lus kiest één groep; de binnenste lus doet haar werk voor die groep voordat de buitenste lus verdergaat. Bij deze structuur zijn de inspringing en de plaats van het opnieuw instellen extra belangrijk. Je telt uitvoeringen van de binnenste lus, bouwt een klein rooster en een groeiende vorm en volgt voortijdige beëindigingen die één lus of beide lussen beïnvloeden.

5.1 Rijen, combinaties en groeiende patronen

Een geneste lus is een lus binnen de lusinhoud van een andere lus. Voor elke buitenste iteratie begint de binnenste lus en doorloopt ze haar werk. De buitenste variabele blijft gelijk terwijl de binnenste variabele verandert.

Bouw één rij tegelijk
for row in range(1, 4):
    for col in range(1, 5):
        print(row * col, end=" ")
    print()

De uitvoer heeft deze drie rijen, elk met een spatie na het laatste getal:

1 2 3 4 
2 4 6 8 
3 6 9 12 

Eerst is row gelijk aan 1, terwijl col de waarden 1 tot en met 4 aanneemt. Daarna wordt row gelijk aan 2 en begint de binnenste lus opnieuw bij kolom 1. Ten slotte krijgt rij 3 dezelfde vier kolommen. De binnenste lusinhoud wordt twaalf keer uitgevoerd.

end=" " vervangt het gebruikelijke regeleinde van print door een spatie. De lege print() beëindigt de rij. Die staat binnen de buitenste lusinhoud maar buiten de binnenste lusinhoud en wordt dus drie keer uitgevoerd. Als je die één niveau verder laat inspringen, komt elk getal op een eigen regel. Als je de inspringing verwijdert, wordt slechts eenmaal een regel beëindigd, na beide lussen.

Geef de lusvariabelen verschillende namen, zoals row en col. Als je de buitenste naam opnieuw gebruikt binnen de binnenste lus, overschrijf je de waarde die nodig is om de huidige rij aan te geven.

Tel het werk

Als elke buitenste doorgang hetzelfde aantal binnenste doorgangen krijgt, vermenigvuldig je de aantallen. Drie rijen en vier kolommen geven twaalf uitvoeringen van de binnenste lusinhoud. Twee lussen met elk 100 doorgangen geven 10.000 binnenste uitvoeringen; drie niveaus geven 1.000.000. Een kleine verhoging van elke grens kan daardoor veel meer herhaald werk opleveren.

Als de binnenste grens met de buitenste variabele verandert, tel je de afzonderlijke aantallen op:

for row in range(1, 5):
    for _ in range(row):
        print("*", end="")
    print()

Dit toont:

*
**
***
****

De rijlengtes zijn 1, 2, 3 en 4, voor in totaal tien sterretjes. Voor een patroon met n van zulke rijen is het totaal n(n+1)/2. Als je vier met vier vermenigvuldigt, ga je er ten onrechte van uit dat elke rij vier sterretjes heeft.

Stel een resultaat voor elke groep opnieuw in

Om elke rij van het vermenigvuldigingsrooster op te tellen, zet je row_total = 0 binnen de buitenste lus, direct vóór de binnenste lus. Tel row * col op binnen de binnenste lusinhoud en toon row_total na de binnenste lus. De uitvoerwaarden zijn 10, 20 en 30.

Als je slechts eenmaal vóór beide lussen initialiseert, blijven ook de totalen van eerdere rijen bewaard. Als je dan na elke rij de waarde toont, krijg je 10, 30 en 60. Beide plaatsen bewaren een resultaat, maar de ene bewaart een rijresultaat en de andere een lopend totaal voor het hele rooster.

Doorloop combinaties

Twee lussen over range(1, 7) doorlopen alle 36 geordende uitkomsten voor twee dobbelstenen. De eerste lus levert de eerste dobbelsteen en de tweede de tweede dobbelsteen. Een voorwaarde binnen de binnenste lusinhoud kan paren tellen waarvan de som 7 is. Zes voldoen: (1, 6), (2, 5), (3, 4), (4, 3), (5, 2) en (6, 1). Een omgekeerd paar beschrijft een andere geordende uitkomst.

Belangrijkste punten

  • De binnenste lus begint opnieuw bij elke buitenste iteratie.
  • Vermenigvuldig aantallen iteraties alleen als de lengte van de binnenste lus vast blijft.
  • Tel de rijlengtes op als de binnenste grens afhangt van de rij.
  • De inspringing bepaalt of een actie per element, per rij of eenmaal in totaal plaatsvindt.
  • Stel een accumulator per rij binnen de buitenste lus opnieuw in, vóór de binnenste lus.
  • Verschillende namen voor lusvariabelen houden de waarden van rij en kolom beschikbaar.

5.2 Overslaan en stoppen binnen geneste lussen

Break en continue werken op de binnenste lus waarin ze staan. Zoek in geneste code die lus voordat je voorspelt wat er daarna gebeurt. Een break in de binnenste lusinhoud stopt op zichzelf de buitenste lus niet.

Volg een break in de binnenste lus
for a in range(1, 4):
    for b in range(1, 4):
        if b > a:
            break
        print(a, b)

Bij a = 1 wordt het paar 1 1 getoond. Wanneer b gelijk wordt aan 2, beëindigt de break die binnenste lus. De buitenste lus gaat verder met a = 2 en begint een nieuwe binnenste lus met b gelijk aan 1. Die toont 2 1 en 2 2 en stopt daarna met break bij b gelijk aan 3. Voor a gelijk aan 3 voldoet elke b. De zes uitvoerregels zijn:

1 1
2 1
2 2
3 1
3 2
3 3
Stop beide lussen met een vastgelegd resultaat

Een zoekactie naar een combinatie kan een vlagvariabele en één break op elk niveau gebruiken:

found = False
for a in range(1, 6):
    for b in range(1, 6):
        if a * b == 12:
            found = True
            break
    if found:
        break
if found:
    print(a, b)
else:
    print("No matching pair")

De rijen met a gelijk aan 1 en 2 hebben geen overeenkomst. In rij 3 bereikt b de waarde 4 en is het product 12. De binnenste break beëindigt de b-lus; de vlagvariabele zorgt er vervolgens voor dat de buitenste break wordt uitgevoerd. De uiteindelijke uitvoer is 3 4.

De vlagvariabele wordt vóór beide lussen geïnitialiseerd omdat ze een resultaat voor de hele zoekactie vastlegt. De buitenste if found: hoort na de binnenste lus maar binnen de buitenste lusinhoud. Door die inspringing wordt de toets eenmaal per voltooide of onderbroken rij uitgevoerd.

Bewaar waarden als de zoekactie doorgaat

Als je alleen de buitenste break verwijdert, gaat de zoekactie door naar latere rijen. In dit voorbeeld is een latere overeenkomst 4 3, maar de lus onderzoekt uiteindelijk rij 5 en eindigt met a = 5 en b = 5. Als je dan de lusvariabelen toont, krijg je 5 5, geen opgeslagen overeenkomst.

Als de taak het laatste overeenkomstige paar nodig heeft, sla je best_a = a en best_b = b op wanneer een overeenkomst optreedt. Die afzonderlijke variabelen bewaren een overeenkomst terwijl de lusvariabelen blijven veranderen. Controleer de vlagvariabele voordat je ze toont als een overeenkomst mogelijk ontbreekt.

Sla een paar over en ga verder met de rij

Een continue binnen de binnenste lus gaat naar de volgende binnenste waarde. Bij twee lussen die 1 tot en met 4 doorlopen, slaat if a == b: continue vóór de verwerking vier gelijke paren over. Van de oorspronkelijke zestien blijven twaalf geordende paren over.

Een if kan ook paren selecteren zonder te springen. Twee dobbelstenen hebben drie geordende paren met som 10: (4, 6), (5, 5) en (6, 4). Een voorwaarde binnen de binnenste lusinhoud herkent ze.

Belangrijkste punten

  • Een break in de binnenste lus beëindigt alleen die lus; een continue in de binnenste lus slaat alleen de huidige binnenste doorgang over.
  • Met een vlagvariabele en een tweede break kun je beide lussen voortijdig verlaten.
  • Plaats de controle van de vlagvariabele voor de buitenste lus na de binnenste lus en binnen de buitenste lusinhoud.
  • Lusvariabelen blijven na een overeenkomst veranderen tenzij de zoekactie stopt; sla overeenkomstige waarden op wanneer dat nodig is.
6

Volg lussen stap voor stap en debug ze

Een lus kan er goed uitzien terwijl ze de verkeerde laatste waarde doorloopt, een waarde te vroeg optelt of één extra scheidingsteken toont. Door de lus te volgen, maak je haar werkelijke gedrag zichtbaar: noteer elke verandering in uitvoeringsvolgorde en vergelijk die met het bedoelde resultaat. Kleine voorbeelden zijn vooral handig omdat je elke doorgang kunt controleren. Je maakt onderscheid tussen uitvoeringen van de lusinhoud en controles van de voorwaarde, bekijkt eindwaarden en herstelt grenzen met behulp van een uitvoeringsoverzicht.

6.1 Waarden volgen in uitvoeringsvolgorde

Stapsgewijs volgen betekent dat je een programma met de hand uitvoert, één instructie tegelijk, en daarbij de waarden en uitvoer noteert. Een uitvoeringstabel geeft elke relevante variabele een kolom. Geef aan of een waarde vóór of na een bijwerking is genoteerd, zodat de rijen een duidelijke betekenis hebben.

Volg een while-lus
total = 0
i = 1
while i <= 4:
    total = total + i
    i = i + 1
print(total)

Begin met total = 0 en i = 1. Controleer de voorwaarde voordat je de lusinhoud binnengaat. Voer bij elke ware controle de optelling vóór de verhoging uit:

Doorgangi vooraftotal achterafi achteraf
1112
2233
3364
44105

De volgende controle is 5 <= 4, wat onwaar is. Er is geen vijfde rij voor de lusinhoud. De lusinhoud wordt vier keer uitgevoerd, de voorwaarde wordt vijf keer gecontroleerd en de print na de lus toont eenmaal 10. De eindwaarden zijn i = 5 en total = 10.

Maak onderscheid tussen de onware controle en een iteratie: die controle beëindigt de lus zonder de lusinhoud uit te voeren. Als de beginvoorwaarde al onwaar is, zijn er helemaal geen rijen voor de lusinhoud en behouden de variabelen hun startwaarden.

De volgorde van instructies verandert het resultaat

Als de verhoging boven de optelling komt te staan, gebruikt elke doorgang de nieuwe i. De vier optellingen worden 2, 3, 4 en 5, wat 14 geeft. De voorwaarde toetst i nog steeds aan het begin, vóór die verhoging. Als je alleen de waarden bij de kop volgt, mis je welke waarde de optelling werkelijk gebruikt.

Als een lusinhoud een break of continue bevat, stop je met het volgen van de resterende regels zodra de sprong plaatsvindt. Bij continue keer je terug naar de kop of het volgende element; bij break ga je verder na de lus. Een uitvoeringsoverzicht moet die routes volgen en niet simpelweg alle instructies van de lusinhoud naar elke rij kopiëren.

Volg tekens en geneste lussen

Een for-lus kent aan het begin van haar doorgang het volgende element toe:

rev = ""
for ch in "abc":
    rev = ch + rev
print(rev)

De opgeslagen tekst wordt "a", dan "ba" en dan "cba". De uitvoer is cba. Noteer de werkelijke tekst, inclusief de volgorde, in plaats van alleen op te schrijven dat “een teken is toegevoegd”.

Gebruik bij geneste lussen één rij voor elke binnenste iteratie. Noteer beide lusvariabelen, zodat de buitenste waarde zich herhaalt over de rijen die erbij horen. In een lus met twee rijen en drie kolommen zijn de rijwaarden 1, 1, 1, 2, 2, 2 terwijl de kolomwaarden 1, 2, 3, 1, 2, 3 zijn.

Maak een uitvoeringsoverzicht met print

Een tijdelijke print("i =", i, "total =", total) na beide bijwerkingen in de somlus toont i en total aan het einde van elke doorgang. Als je die vóór de bijwerkingen plaatst, toon je een ander moment. Vergelijk de plaats van de print met de kolomlabels van je tabel. Verwijder diagnostische uitvoerinstructies nadat je de code hebt hersteld, zodat ze geen extra programma-uitvoer worden.

Noteer bij een vraag als “wat wordt getoond?” alleen instructies die werkelijk iets tonen. Een veranderende variabele is op zichzelf geen uitvoer; er kunnen meerdere bijwerkingen plaatsvinden vóór één laatste print.

Belangrijkste punten

  • Volg instructies in de exacte volgorde waarin Python ze uitvoert.
  • Geef bij genoteerde waarden aan of ze van vóór of na de betreffende bijwerking zijn.
  • Een while-lus die normaal eindigt, controleert haar voorwaarde één keer vaker dan zij haar inhoud uitvoert.
  • Break en continue veranderen welke instructies in een uitvoeringsoverzicht verschijnen.
  • Houd uitvoer afzonderlijk bij van veranderingen in variabelen.

6.2 Grenzen en scheidingstekens herstellen

Een één-ernaast-fout doorloopt één waarde te veel of te weinig, of verschuift de doorlopen waarden met één. De fout komt vaak door de uitgesloten eindgrens van een getallenbereik, een keuze tussen < en <= of de startwaarde van een teller.

Benoem de bedoelde grenswaarden

Om 1 tot en met 10 op te tellen, is range(1, 10) te kort. Het bereik levert alleen 1 tot en met 9, met een totaal van 45. range(1, 11) neemt 10 mee en geeft 55. Gebruik voor een oplopend bereik van gehele getallen met stapgrootte 1 de eindgrens n + 1 om de laatste waarde n mee te nemen.

Bij de standaardstapgrootte 1 levert range(a, b) b - a waarden als b groter is dan a. Een break kan de lus nog steeds beëindigen voordat ze allemaal zijn gebruikt. Schrijf bij andere stapgroottes een klein geval uit of gebruik len(range(...)) om het aantal te controleren.

Het aantal iteraties van een while-lus hangt af van de combinatie van startwaarde, vergelijking en bijwerking. Voor een niet-negatief geheel getal n, met i += 1 aan het einde van elke doorgang en zonder voortijdige beëindiging:

Startwaarde en voorwaardeUitvoeringen van de lusinhoud
i = 0; while i < n:n
i = 1; while i <= n:n
i = 0; while i <= n:n + 1

Bij n gelijk aan 0 slaan de eerste twee de lusinhoud over. De derde wordt eenmaal uitgevoerd met i gelijk aan 0. Dit kleine geval maakt de extra doorgang zichtbaar zonder dat je een lange lus hoeft te volgen.

Grenzen bij terugtellen

Als je begint bij 5 en toont vóór n -= 1, toont while n > 0: vijf waarden, eindigend bij 1. Met n >= 0 worden er zes getoond, eindigend bij 0. De overeenkomstige aflopende bereiken zijn range(5, 0, -1) en range(5, -1, -1).

Controleer ook de volgorde. Als je een teller bijwerkt voordat je die gebruikt, kan elke waarde verschuiven, ook als de lus het verwachte aantal doorgangen heeft. Een uitvoeringsoverzicht moet de werkelijke eerste en laatste waarde vastleggen die de berekening gebruikt.

Elementen en de tussenruimtes ertussen

Een hekpalenfout verwart het aantal elementen met het aantal tussenruimtes. Vijf hekdelen hebben zes palen nodig. Vijf getoonde getallen hebben maar vier scheidingstekens ertussen nodig.

for i in range(1, 6):
    print(i, end="-")

Dit toont 1-2-3-4-5-, inclusief een ongewenst laatste streepje. Elke print voegt na een element een streepje toe, ook na het laatste.

Een oplossing is om het eerste element afzonderlijk te tonen en daarna vóór elk volgend element een scheidingsteken te tonen:

print(1, end="")
for i in range(2, 6):
    print("-" + str(i), end="")
print()

De uitvoer is 1-2-3-4-5. De lus toont vier stukken met een streepje en een getal en de laatste lege print beëindigt de regel. Deze versie heeft een bekend eerste element; bij een algemeen geval met lege gegevens moet ook die print van het eerste element worden overgeslagen.

Controleer de oplossing met kleine gevallen

Schrijf de bedoelde eerste waarde, laatste waarde en het aantal op voordat je de code verandert. Kies de grenzen en vergelijking die daarbij passen en volg daarna een korte uitvoering. Controleer naast een gewoon geval ook nul en één element. Nul onthult werk dat moet worden overgeslagen; één onthult een onnodig scheidingsteken of een extra bijwerking. Verander de grens die de fout veroorzaakt, zodat de herhaling van de code bij de taak past.

Belangrijkste punten

  • Controleer de startwaarde, de laatste benodigde waarde en het aantal doorgangen samen.
  • Een oplopend bereik met stapgrootte één neemt n mee als de eindgrens n + 1 is.
  • De vergelijking en bijwerking van een while-lus bepalen samen het aantal iteraties.
  • Ook aflopende bereiken sluiten hun eindgrens uit.
  • Bij een niet-lege sequentie verschillen het aantal elementen en het aantal scheidingstekens één van elkaar.
  • Volg na herstel van een grens kleine gevallen, vooral nul en één element.

Lussen in Python: voorbeelden

6 Walkthroughs

1

Laat een while-lus voortgang maken en stoppen

15 stappen
Volg veranderende waarden, herstel een onbereikbaar doel en verzamel invoer zonder het stopsignaal mee te tellen.
  1. 1
    IntroductieHerhaling vraagt om een beslissing

    Een programma dat om een antwoord blijft vragen, heeft een regel nodig voor een volgende poging. Een while-lus zet die regel in een voorwaarde die vóór elke doorgang wordt gecontroleerd.

    Je volgt een aftelling, ontdekt waarom een veranderende waarde de uitgang toch kan missen en bouwt een invoerlus waarvan het stopsignaal nooit in de berekeningen terechtkomt.

  2. 2
    UitlegStel de aftelling in

    Een while-lus herhaalt een ingesprongen lusinhoud zolang haar voorwaarde waar is. Geef de bepalende waarde vóór de kop een startwaarde:

    remaining = 4
    while remaining > 0:
        print(remaining)
        remaining -= 1
    

    Hier is de startwaarde 4, vraagt de toets of er nog iets over is en trekt de bijwerking 1 af. De print gebeurt vóór die aftrekking.

  3. 3
    VoorbeeldVoer de eerste twee doorgangen uit

    De eerste toets gebruikt remaining gelijk aan 4 en slaagt. De print toont 4, waarna de bijwerking remaining in 3 verandert. Python keert terug naar de kop.

    De volgende toets gebruikt 3, dus toont de lusinhoud 3 en verandert ze de waarde in 2. De voorwaarde wordt tussen de print en de bijwerking niet opnieuw gecontroleerd; die instructies worden uitgevoerd in de volgorde waarin ze zijn geschreven.

  4. 4
    VoorbeeldBereik de onware controle

    De volgende twee doorgangen tonen 2 en 1. Na de laatste bijwerking is remaining gelijk aan 0. De toets remaining > 0 is nu onwaar, dus wordt de lusinhoud niet opnieuw uitgevoerd.

    Er zijn vier waarden getoond, maar de kop is vijf keer gecontroleerd: vier ware controles en één laatste onware controle. Als remaining bij 0 was begonnen, waren er geen doorgangen door de lusinhoud geweest.

  5. 5
    UitdagingVerander de volgorde

    Verplaats in de aftelling remaining -= 1 naar boven print(remaining). Welke vier waarden verschijnen als je bij 4 begint?

    ---reveal---

    De uitvoer is 3, 2, 1 en 0. Elke toets laat nog steeds de oude positieve waarde toe, maar de print gebruikt de bijgewerkte waarde. Als de voorwaarde tijdens de lusinhoud onwaar wordt, wordt die lusinhoud niet onderbroken; de kop toetst de voorwaarde bij de volgende terugkeer.

  6. 6
    TipZoek waarom de lus geen voortgang maakt

    Als een aftelling 4 blijft tonen, zoek dan de bijwerking en kijk naar de inspringing. Een bijwerking na de lus kan niet helpen om de lus te laten eindigen, omdat die nog niet is bereikt.

    Als de bijwerking 1 optelt onder while remaining > 0:, beweegt de waarde van de uitgang af. Een tijdelijke print na de bijwerking laat zien of de waarde in de bedoelde richting verandert.

  7. 7
    VoorbeeldEen veranderende waarde kan het doel toch missen
    n = 2
    while n != 7:
        print(n)
        n += 2
    

    Dit doorloopt 2, 4, 6, 8 en latere even getallen. De variabele verandert telkens, maar geen van die waarden is gelijk aan 7. Als de taak is om even waarden onder 7 te tonen, past while n < 7: daarbij: de volgende controle is onwaar nadat n gelijk wordt aan 8.

  8. 8
    UitdagingHerstel een overgeslagen doel

    Een lus begint bij 5, toont n zolang n != 12 en telt aan het einde 2 op. De taak is om de oneven waarden onder 12 te tonen. Waarom gaat dit mis en welke kop herstelt het?

    ---reveal---

    De waarden blijven oneven en zijn nooit gelijk aan 12. Gebruik while n < 12:. Dit toont 5, 7, 9 en 11 en stopt wanneer n de waarde 13 bereikt. Als je de bijwerking in 1 verandert, verandert de vereiste reeks oneven getallen.

  9. 9
    KernpuntTel decimale stappen met gehele getallen

    Herhaalde decimale optellingen kunnen een doel waarmee op gelijkheid wordt getoetst missen: als je tien keer 0.1 bij 0.0 optelt, krijg je 0.9999999999999999.

    Laat voor een vaste reeks tienden gehele getallen de doorgangen bepalen:

    for i in range(11):
        x = i / 10
        print(x)
    

    Dit berekent elf waarden van 0,0 tot en met 1,0 zonder een opgeslagen decimaal getal exact gelijk te hoeven laten worden aan een stopwaarde.

  10. 10
    UitlegLees vóór het toetsen

    Een stopwaarde betekent “geen gegevens meer”. Voor een verzameling positieve aantallen kan 0 het einde aangeven. De eerste invoer vóór de lus haalt het eerste getal vóór de lus op, zodat de kop een waarde heeft om te toetsen.

    total = 0
    number = int(input("Count (0 to stop): "))
    

    De conversie is van belang: input geeft tekst terug, terwijl deze lus getallen zal vergelijken.

  11. 11
    VoorbeeldVerwerk en lees daarna de volgende waarde
    while number != 0:
        total += number
        number = int(input("Count (0 to stop): "))
    print(total)
    

    Voeg dit toe onder de voorbereiding. De invoer 6, 9 en 0 telt eerst 6 op en daarna 9, wat een totaal van 15 geeft. De nieuwe 0 maakt de volgende controle in de kop onwaar voordat die wordt opgeteld. Zonder de laatste leesinstructie binnen de lusinhoud zou de eerste waarde herhaaldelijk worden verwerkt.

  12. 12
    VerbandWijs alleen onaanvaardbare antwoorden af

    Het verzamelen van invoer stopt bij een speciale waarde. Validatie herhaalt daarentegen totdat een waarde aanvaardbaar is. Om een geheel getal van 1 tot en met 5 te accepteren, herhaal je zolang choice < 1 or choice > 5 en lees je binnen de lusinhoud een nieuwe keuze.

    De voorwaarde moet elk van beide overtredingen beschrijven. Met and zou niets worden afgewezen: één getal kan niet tegelijk onder 1 en boven 5 liggen.

  13. 13
    UitdagingVerwerk gegevens en het stopsignaal

    Scores zijn niet-negatief en -1 is de stopwaarde. Welk totaal en aantal moet een lus voor het gemiddelde gebruiken bij de invoer 0, 9 en -1? Wat als -1 als eerste komt?

    ---reveal---

    Gebruik totaal 9 en aantal 2; dat geeft een gemiddelde van 4,5. Nul is een gegeven, terwijl -1 wordt uitgesloten. Als -1 als eerste komt, blijft het aantal 0; meld dat er geen gegevens zijn in plaats van te delen. De controle van de stopwaarde moet vóór beide bijwerkingen komen.

  14. 14
    UitdagingControleer een volledige invoerroute

    Een lus met eerste invoer vóór de lus herhaalt bij text != 0, maar text komt rechtstreeks uit input. De invoer 0 stopt de lus niet. Leg het probleem met de typen uit en geef twee geldige oplossingen.

    ---reveal---

    Input levert "0", een string, die verschilt van het gehele getal 0. Vergelijk met "0" om een stopwaarde als tekst te houden, of converteer de invoer met int voordat je met 0 vergelijkt. Zowel de eerste als de latere leesinstructies moeten die keuze volgen.

  15. 15
    SamenvattingVolg vóór de uitvoering één pad

    Volg voor een nieuwe while-lus een gewone doorgang, de bedoelde laatste doorgang en een geval waarin de lus nul keer moet worden uitgevoerd. Bepaal op elk herhalend pad welke volgende invoer of bijwerking voortgang mogelijk maakt.

    Zet bij een invoerberekening de stoptoets vóór de verwerking en bepaal hoe lege gegevens moeten worden gemeld. Die controles helpen zowel een vastgelopen lus als een misleidend resultaat te herkennen.

2

Laat elementen en getallenbereiken de herhaling bepalen

13 stappen
Doorloop waarden rechtstreeks, maak oplopende en aflopende getallenbereiken en vergelijk een tellende for-lus met while.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieGeef elk element een beurt
  2. 2
    UitlegDe variabele bevat het huidige element
  3. 3
    VoorbeeldOok spaties zijn tekens
  4. 4
    UitdagingKen de elementvariabele opnieuw een waarde toe
  5. 5
    UitlegBegin bij nul als alleen een eindgrens is gegeven
  6. 6
    VoorbeeldKies een stapgrootte en bekijk het bereik
  7. 7
    TipAflopende waarden hebben een negatieve stapgrootte nodig
  8. 8
    UitdagingNeem de laatste vereiste waarde mee
  9. 9
    VerbandStem de stopregel af op de taak
  10. 10
    VoorbeeldZet een aftelling om
  11. 11
    UitdagingEen latere toekenning maakt range niet opnieuw
  12. 12
    UitdagingZet de grens om en behoud de gegevens
  13. 13
    SamenvattingControleer eerst de geleverde waarden
3

Bepaal wat er na een overeenkomst of overslaan gebeurt

14 stappen
Volg break, continue en de else van een lus in zoekacties en invoerlussen.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieDrie verschillende vervolgstappen
  2. 2
    UitlegBreak verlaat de lus waarin de instructie staat
  3. 3
    VoorbeeldLees vóór een uitgang midden in de lusinhoud
  4. 4
    UitdagingZoek de uitgang
  5. 5
    UitlegContinue verlaat alleen deze doorgang
  6. 6
    TipEen overgeslagen bijwerking kan while laten vastlopen
  7. 7
    KernpuntPass slaat niets over
  8. 8
    UitdagingVoorspel drie versies
  9. 9
    UitlegElse hoort bij de lus
  10. 10
    KernpuntOok nul doorgangen eindigen normaal
  11. 11
    VerbandLeg dezelfde gebeurtenis expliciet vast
  12. 12
    UitdagingSucces bij de laatste toegestane poging
  13. 13
    UitdagingCombineer overslaan met normale voltooiing
  14. 14
    SamenvattingTeken de bestemming van een sprong
4

Bouw een lusresultaat op en bewaar het

14 stappen
Volg een gefilterd gemiddelde, een zoekactie naar de beste waarde en beslissingen of minstens één of alle elementen voldoen.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieEen resultaat blijft bewaard bij de volgende doorgang
  2. 2
    UitlegTel dezelfde groep en bepaal het totaal
  3. 3
    VoorbeeldBereken het gemiddelde na het verzamelen
  4. 4
    KernpuntStartwaarden passen bij de bewerking
  5. 5
    UitdagingZoek de fout bij het opnieuw instellen
  6. 6
    UitlegNeem het eerste element als eerste beste waarde
  7. 7
    VoorbeeldSla op waar de beste waarde voorkwam
  8. 8
    UitdagingGa om met gelijke waarden en lege gegevens
  9. 9
    UitlegEen zoekvlagvariabele onthoudt een gebeurtenis
  10. 10
    VoorbeeldEen controle of alles voldoet stopt bij een tegenvoorbeeld
  11. 11
    UitdagingBewaar de eerste of de laatste
  12. 12
    VerbandKies de toestand die de taak nodig heeft
  13. 13
    UitdagingBeschrijf een leeg gefilterd resultaat
  14. 14
    SamenvattingBenoem het resultaat voordat je bijwerkingen kiest
5

Bouw rijen en stuur een geneste zoekactie

11 stappen
Volg hoe de binnenste lus opnieuw begint, hoe het werk groeit, hoe resultaten per rij ontstaan en hoe je beide lussen verlaat.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieEén volledige binnenste uitvoering per buitenste doorgang
  2. 2
    VoorbeeldHoud de rij gelijk
  3. 3
    UitlegBeëindig elke rij op het buitenste niveau
  4. 4
    KernpuntTel vast en groeiend werk in de binnenste lus
  5. 5
    UitdagingStel een resultaat per rij opnieuw in
  6. 6
    UitlegEen break in de binnenste lus stopt de rijen niet
  7. 7
    VoorbeeldGeef een gevonden overeenkomst door aan de buitenste beslissing
  8. 8
    TipVerwar eindwaarden van variabelen niet met een opgeslagen overeenkomst
  9. 9
    UitdagingVerwijder één uitgang
  10. 10
    UitdagingCombineer een filter met een groeiende grens
  11. 11
    SamenvattingVolg een rij voordat je aantallen vermenigvuldigt
6

Volg een grensfout tot de oorzaak

10 stappen
Noteer bijwerkingen op volgorde, maak onderscheid tussen controles en doorgangen en herstel scheidingstekens in de uitvoer.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieMaak het werkelijke werk zichtbaar
  2. 2
    UitlegKies wanneer je elke waarde noteert
  3. 3
    VoorbeeldVolg alle drie de bijwerkingen
  4. 4
    UitdagingVerplaats de verhoging
  5. 5
    TipGebruik een print als volgpunt
  6. 6
    VoorbeeldLaat nul de extra doorgang zichtbaar maken
  7. 7
    UitdagingControleer beide uiteinden van een aftelling
  8. 8
    UitlegMaak onderscheid tussen elementen en tussenruimtes
  9. 9
    UitdagingControleer een volledige oplossing
  10. 10
    SamenvattingControleer de bedoelde grenswaarden

Lussen in Python: oefenvragen

50 Oefenvragen in 5 sets

Set 1: Volg de eerste stappen van een lus10 Oefenvragen

Vraag 1 van 10

Wat toont dit programma?

n = 0
while n > 0:
    print("Go")
    n -= 1
print("End")
  1. Go, daarna End
  2. Alleen End
  3. Helemaal niets
  4. Go herhaaldelijk
Toon antwoordVerberg antwoord
Antwoord: B
De eerste toets, 0 > 0, is onwaar, dus slaat Python de hele lusinhoud over en bereikt het de laatste print. Een while-lus voert niet gegarandeerd één doorgang uit voordat de voorwaarde wordt gecontroleerd. De niet-ingesprongen print("End") wordt ook uitgevoerd als de lusinhoud geen iteraties heeft.

Vraag 2 van 10

Waarom blijft deze lus waarden tonen?

n = 2
while n != 9:
    print(n)
    n += 2
  1. Ze doorloopt elk geheel getal maar slaat de toets over.
  2. Ze zet n vóór elke vergelijking terug op 2.
  3. Ze stopt met het bijwerken van n nadat die 9 passeert.
  4. Ze doorloopt even waarden en bereikt nooit 9.
Toon antwoordVerberg antwoord
Antwoord: D
Door de bijwerking doorloopt de lus 2, 4, 6, 8, 10 en latere even gehele getallen, dus wordt n nooit gelijk aan 9. Het passeren van 9 maakt n != 9 niet onwaar. Voor de taak om deze even waarden onder 9 te doorlopen, zou een grens zoals n < 9 stoppen zodra de volgende waarde die overschrijdt.

Vraag 3 van 10

Een lus leest niet-negatieve scores en gebruikt -1 om te stoppen. De invoer is 12, 0, 18, -1. Welk gemiddelde moet de lus melden, zonder de stopwaarde mee te tellen?
  1. 10.0
  2. 7.25
  3. 15.0
  4. 9.666666666666666
Toon antwoordVerberg antwoord
Antwoord: A
De drie gegevenswaarden tellen op tot 30 en 0 is een geldige score, dus is het aantal 3 en het gemiddelde 30 / 3, oftewel 10.0. Bij een aantal van 2 zou nul ten onrechte worden weggelaten. De stopwaarde -1 draagt niet bij aan het totaal en ook niet aan het aantal.

Vraag 4 van 10

Hoe vaak wordt de lusinhoud van deze lus uitgevoerd?

for ch in "up! ":
    print(ch)
  1. 2
  2. 3
  3. 4
  4. 5
Toon antwoordVerberg antwoord
Antwoord: C
De string heeft vier tekens: twee letters, een uitroepteken en een spatie aan het einde. De lus doorloopt elk teken eenmaal, inclusief de spatie. Als je alleen zichtbare tekens zonder spatie telt, krijg je 3 en mis je een werkelijke iteratie van de lusinhoud.

Vraag 5 van 10

Welke waarden bevat list(range(3, 12, 4))?
  1. [3, 7]
  2. [3, 7, 11]
  3. [3, 7, 11, 15]
  4. [4, 8, 12]
Toon antwoordVerberg antwoord
Antwoord: B
De startwaarde is 3 en elke stap telt 4 op, wat 3, 7 en 11 geeft voordat de volgende waarde de eindgrens zou overschrijden. De eindgrens 12 is een grens, geen extra geleverde waarde. Als je bij 4 begint, verwar je de stapgrootte met de startwaarde.

Vraag 6 van 10

Een scherm moet 8, 6, 4, 2, 0 in die volgorde tonen. Welk getallenbereik levert precies die waarden?
  1. range(8, -1, -2)
  2. range(8, 0, -2)
  3. range(8, -2, 2)
  4. range(8, 1, -2)
Toon antwoordVerberg antwoord
Antwoord: A
Een stapgrootte van -2 levert aflopende even gehele getallen vanaf 8 en een eindgrens onder 0 maakt het mogelijk om 0 mee te nemen. Met eindgrens 0 sluit het bereik 0 uit en eindigt het bij 2. Een positieve stap vanaf 8 naar een lagere eindgrens zou helemaal geen waarden opleveren.

Vraag 7 van 10

Wat toont dit programma?

for n in [5, 11, 14, 18]:
    if n % 2 == 0:
        print(n)
        break
print("Finished")
  1. 14, daarna 18, daarna Finished
  2. 5, daarna Finished
  3. Alleen 14
  4. 14, daarna Finished
Toon antwoordVerberg antwoord
Antwoord: D
De eerste even waarde is 14, dus toont de lusinhoud die waarde en beëindigt break de lus voordat 18 wordt onderzocht. Daarna bereikt de uitvoering de print na de lus, die “Finished” toont. Break stopt de lus waarin de instructie staat; het hele programma eindigt daardoor niet.

Vraag 8 van 10

Wat toont dit programma?

count = 0
for amount in [6, 13, 9, 17]:
    if amount >= 10:
        count += 1
print(count)
  1. 4
  2. 30
  3. 2
  4. 17
Toon antwoordVerberg antwoord
Antwoord: C
Alleen 13 en 17 voldoen aan de voorwaarde en elke geslaagde toets telt 1 op bij count, dus is het eindresultaat 2. Als je de bedragen die voldoen zelf zou optellen, krijg je 30, maar deze bijwerking telt gebeurtenissen. Waarden die niet aan de toets voldoen, laten de teller ongewijzigd.

Vraag 9 van 10

Hoe vaak wordt de binnenste print uitgevoerd?

for row in range(2):
    for col in range(5):
        print("seat")
  1. 10
  2. 7
  3. 5
  4. 25
Toon antwoordVerberg antwoord
Antwoord: A
Er zijn twee buitenste doorgangen en elke doorgang begint een volledige binnenste uitvoering van vijf doorgangen. Als je de twee aantallen vermenigvuldigt, krijg je tien uitvoeringen van de print. De aantallen optellen tot zeven zou twee afzonderlijke lussen beschrijven die na elkaar worden uitgevoerd, niet deze geneste structuur.

Vraag 10 van 10

Wat zijn de eindwaarden van i en total?

i = 1
total = 0
while i < 5:
    i += 1
    total += i
  1. i is 4; total is 10.
  2. i is 5; total is 14.
  3. i is 5; total is 10.
  4. i is 6; total is 20.
Toon antwoordVerberg antwoord
Antwoord: B
De ware controles in de kop gebruiken i-waarden 1 tot en met 4, maar elke verhoging gebeurt vóór de optelling, dus krijgt total de waarden 2, 3, 4 en 5. Dat geeft 14 en de volgende controle met i gelijk aan 5 is onwaar. Een totaal van 10 zou telkens de oude i gebruiken in plaats van de bijgewerkte waarde.
Set 2: Houd invoer en resultaten onder controle10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Wat toont dit programma?

for n in [2, 5, 8]:
    if n == 5:
        continue
    print(n)
  1. Alleen 2
  2. 2, daarna 8
  3. 2, daarna 5, daarna 8
  4. Alleen 8
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Wat toont dit programma?

n = 1
while n > 0:
    n -= 1
    print("Inside")
print(n)
  1. Alleen 0
  2. Alleen Inside
  3. Inside, daarna 0
  4. Inside herhaaldelijk
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een tekstantwoord moet precies “yes” of “no” zijn. Welke while-voorwaarde vraagt opnieuw bij elk onaanvaardbaar antwoord en stopt bij elk van beide aanvaardbare antwoorden?
  1. answer != "yes" and answer != "no"
  2. answer != "yes" or answer != "no"
  3. answer == "yes" or answer == "no"
  4. answer == "yes" and answer == "no"
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Hoeveel elementen levert range(7, 2)?
  1. 2
  2. 5
  3. 6
  4. 0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Wat toont dit programma?

for n in []:
    if n == 7:
        break
else:
    print("Absent")
  1. Absent eenmaal
  2. Helemaal niets
  3. Absent zevenmaal
  4. Een TypeError-melding
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Met welke startwaarde kan deze lus 2, 3 en 4 correct vermenigvuldigen?

product = ___
for n in [2, 3, 4]:
    product *= n
print(product)
  1. 0
  2. 2
  3. 1
  4. 24
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een zoekactie naar een maximum begint met largest = 0 en vervangt die waarde alleen als een element groter is. Welke waarde meldt de zoekactie ten onrechte voor [-8, -3, -6]?
  1. -8
  2. -6
  3. -3
  4. 0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Deze zoekactie heeft geen break. Wat toont ze en waarom?

found = False
for label in ["East", "West", "North"]:
    if label == "West":
        found = True
    else:
        found = False
print(found)
  1. True, omdat een ware vlagvariabele later niet kan veranderen.
  2. False, omdat het laatste element zonder overeenkomst de vlagvariabele terugzet.
  3. False, omdat West niet het eerste element is.
  4. True, omdat de lus bij het overeenkomstige label stopt.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Hoeveel paren worden getoond?

for a in range(3):
    for b in range(4):
        if b == 2:
            break
        print(a, b)
  1. 2
  2. 9
  3. 6
  4. 12
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een teller begint met i gelijk aan 0. De lus gebruikt while i <= n: en telt aan het einde van elke doorgang 1 op, zonder voortijdige beëindiging. Hoe vaak wordt de lusinhoud uitgevoerd voor elk niet-negatief geheel getal n?
  1. n + 1
  2. n
  3. n - 1
  4. 2n
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: Kies grenzen en bewaar zoekresultaten10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Welk getal wordt als eerste getoond?

for n in range(32, 50):
    if n % 6 == 0:
        print(n)
        break
  1. 32
  2. 42
  3. 36
  4. 48
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een programma moet de tienden van 0,0 tot en met 1,0 tonen. Welk ontwerp voorkomt dat de lus wordt gestuurd met herhaalde optelling van zwevendekommagetallen en exacte gelijkheid?
  1. Begin x bij 0,0 en herhaal totdat x == 1.0.
  2. Tel i van 0 tot en met 10 en toon i / 10.
  3. Begin x bij 0,0 en herhaal zolang x != 1.0.
  4. Tel i van 0 tot en met 9 en toon i / 10.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Welke laatste regel toont dit programma?

values = [4, 7]
for value in values:
    value *= 3
print(values)
  1. [12, 21]
  2. [21, 21]
  3. [4, 7, 21]
  4. [4, 7]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Welk getallenbereik levert in aflopende volgorde precies de gehele getallen groter dan -6 en hoogstens 6 die veelvouden van 3 zijn?
  1. range(6, -6, -3)
  2. range(6, -7, -3)
  3. range(3, -6, -3)
  4. range(6, -3, -3)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Hoe vaak toont deze lus een waarde?

limit = 4
for i in range(limit):
    limit = 1
    print(i)
  1. 1
  2. 3
  3. 4
  4. 5
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Wat gebeurt er wanneer dit programma wordt uitgevoerd?

n = 1
for divisor in range(2, n):
    if n % divisor == 0:
        break
else:
    print("Prime")
  1. Het toont niets omdat het bereik leeg is.
  2. Het toont Prime en deelt 1 verkeerd in.
  3. Het geeft een fout omdat range boven de eindgrens begint.
  4. Het vindt deler 1 en slaat het else-blok over.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

De code gebruikt posities die vanaf 1 zijn genummerd. Wat toont de code?

largest = None
best_position = None
position = 0
for n in [9, 14, 6, 14, 8]:
    position += 1
    if largest is None or n >= largest:
        largest = n
        best_position = position
print(best_position)
  1. 2
  2. 5
  3. 3
  4. 4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een controle of alle waarden positief zijn, begint met all_positive = True, zet de waarde op False en voert daarna break uit bij de eerste waarde n <= 0. Welk resultaat en aantal onderzochte elementen geeft dit voor [2, 7, 0, 9, -4]?
  1. False na 3 elementen
  2. False na 5 elementen
  3. True na 2 elementen
  4. True na 3 elementen
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Hoeveel sterretjes toont dit programma in totaal?

for row in range(1, 6):
    for _ in range(row):
        print("*", end="")
    print()
  1. 10
  2. 15
  3. 20
  4. 25
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een lus moet elk geheel getal van 1 tot en met 7 optellen. Welk getallenbereik moet de waarden leveren?
  1. range(1, 7)
  2. range(0, 7)
  3. range(2, 8)
  4. range(1, 8)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: Volg bijwerkingen, filters en uitgangen uit geneste lussen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Wat toont dit programma?

match = None
for n in [9, 12, 7, 16, 5]:
    if n % 4 == 0:
        match = n
print(match)
  1. 12
  2. 5
  3. 16
  4. None
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Hoeveel paren worden getoond?

for a in range(1, 4):
    for b in range(1, 4):
        if a == b:
            continue
        print(a, b)
  1. 6
  2. 3
  3. 9
  4. 2
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Wat toont dit programma?

for n in [3, 8, 5]:
    total = 0
    total += n
print(total)
  1. 16
  2. 13
  3. 0
  4. 5
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Hoe vaak wordt de lusinhoud uitgevoerd en welke eindwaarde heeft amount?

amount = 3
while amount < 40:
    amount *= 2
  1. 3 doorgangen; amount is 24.
  2. 4 doorgangen; amount is 40.
  3. 5 doorgangen; amount is 96.
  4. 4 doorgangen; amount is 48.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Eerst wordt een niet-negatief geheel getal ingevoerd. De onderstaande lus moet waarden buiten 2 tot en met 8 afwijzen en beide grenswaarden accepteren. Wat is er mis met de voorwaarde?

value = int(input("Value: "))
while value < 2 and value > 8:
    value = int(input("Value: "))
  1. Ze accepteert alleen grenswaarden; vervang < door <=.
  2. Ze wijst niets af; vervang and door or.
  3. Ze wijst elke waarde af; vervang and door or.
  4. De laatste leesinstructie ontbreekt; zet input vóór while.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Hoeveel klinkers telt deze lus?

count = 0
for ch in "Orbit":
    if ch in "aeiou":
        count += 1
print(count)
  1. 1
  2. 2
  3. 0
  4. 5
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

De ingevoerde tekstwaarden zijn “6”, “4”, “stop”. Wat toont dit programma na de invoervragen?

total = 0
while True:
    text = input("Amount or stop: ")
    if text == "stop":
        break
    total += int(text)
print(total)
  1. 4
  2. Een ValueError-melding
  3. 10
  4. 6
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Wat toont dit programma voordat het vastloopt?

i = 0
while i < 4:
    if i == 1:
        continue
    print(i)
    i += 1
  1. 0, daarna 1
  2. Alleen 0
  3. 0, daarna 2, daarna 3
  4. Helemaal niets
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Wat is de eindwaarde van total?

total = 0
for n in range(2, 7):
    if n == 4:
        continue
    total += n
    if total > 9:
        break
  1. 5
  2. 14
  3. 16
  4. 10
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een scherm toont 6 waarden op één regel met alleen een komma tussen naast elkaar staande waarden. Hoeveel komma’s moet het tonen?
  1. 6
  2. 5
  3. 7
  4. 4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 5: Combineer luspatronen en test de grensgevallen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Welke tekst toont dit programma?

text = ""
for ch in "lamp":
    if ch == "a":
        continue
    text = ch + text
print(text)
  1. pml
  2. lmp
  3. pmal
  4. mlp
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Welk gemiddelde toont dit programma?

total = 0
count = 0
for n in [3, 11, -1, 14, 6, 20]:
    if n <= 8:
        continue
    total += n
    count += 1
    if count == 2:
        break
if count > 0:
    print(total / count)
  1. 6.25
  2. 15.0
  3. 12.5
  4. 25.0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een taak heeft alle oneven waarden onder 20 nodig, beginnend bij 3. Deze code stopt nooit. Welke oplossing behoudt de vereiste getoonde waarden?

n = 3
while n != 20:
    print(n)
    n += 2
  1. Gebruik while n <= 21:.
  2. Verander de startwaarde in 2.
  3. Gebruik while n < 20:.
  4. Verander de bijwerking in n += 1.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een gebruiker voert een geheel getal n in en daarna moet een programma voor niet-negatieve n precies n keer “Ready” tonen. Welke luskop drukt dat aantal direct uit?
  1. for _ in range(n):
  2. while n >= 0:
  3. for _ in n:
  4. for _ in range(n + 1):
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Beide lussen tonen 4, 2. Welke eindwaarden hebben hun lusvariabelen?

for a in range(4, 0, -2):
    print(a)
b = 4
while b > 0:
    print(b)
    b -= 2
  1. a is 0; b is 0.
  2. a is 2; b is 2.
  3. a is 0; b is -2.
  4. a is 2; b is 0.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Wat wordt in deze lus getoond?

for n in [3, 6, 9]:
    if n == 6:
        pass
    print(n)
  1. 3, daarna 9
  2. 3, daarna 6, daarna 9
  3. Alleen 3
  4. Alleen 6
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

De gebruiker voert “bad”, “bad” en daarna “key” in. Welke melding verschijnt na deze invoervragen?

attempts = 0
while attempts < 3:
    guess = input("Code: ")
    if guess == "key":
        print("Open")
        break
    attempts += 1
else:
    print("Locked")
  1. Alleen Locked
  2. Open, daarna Locked
  3. Helemaal niets
  4. Alleen Open
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een programma moet de eerste dag met de hoogste temperatuur bewaren. Dagnummers beginnen bij 1. Welke vergelijking moet op de lege plaats komen?

highest = None
best_day = None
day = 0
for temp in [-4, -1, -1, -3]:
    day += 1
    if highest is None or ___:
        highest = temp
        best_day = day
  1. temp > highest
  2. temp >= highest
  3. temp < highest
  4. temp <= highest
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Wat toont dit programma op twee regels?

total = 0
for row in range(1, 3):
    for col in range(1, 4):
        total += row * col
    print(total)
  1. 6, daarna 12
  2. 6, daarna 18
  3. 18, daarna 18
  4. 1, daarna 4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Wat toont deze geneste zoekactie?

found = False
for a in range(1, 5):
    for b in range(1, 5):
        if a + b == 7:
            found = True
            break
    if found:
        break
print(a, b)
  1. 4 3
  2. 4 4
  3. 3 4
  4. 1 4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

66 Kernbegrippen, elk met een definitie

A

accumulator
Een accumulator is een variabele die tijdens iteraties een resultaat bewaart en bijwerkt, zoals een som, product of tekst.
De accumulator total bewaart eerdere optellingen wanneer de volgende meting binnenkomt.
accumulator per rij
Een accumulator per rij bouwt een resultaat op voor één buitenste iteratie en wordt opnieuw ingesteld voordat het binnenste werk van die iteratie begint.
De accumulator per rij begint opnieuw voor rij 2, zodat de som rij 1 niet omvat.

B

beëindiging
Beëindiging is het einde van de uitvoering van een lus, wanneer de herhaling stopt door een onware voorwaarde of een instructie die de lus verlaat.
De beëindiging van een aftellus vindt plaats nadat de bijwerking de volgende controle van de voorwaarde onwaar maakt.
binnenste lus
Een binnenste lus staat binnen de lusinhoud van een andere lus en begint een nieuwe uitvoering telkens wanneer de uitvoering haar kop bereikt.
De binnenste lus begint opnieuw bij kolom 1 wanneer het vermenigvuldigingsrooster naar een nieuwe rij gaat.
binnenste omvattende lus
De binnenste omvattende lus is de dichtstbijzijnde omringende lus waarin een instructie staat; dat is de lus die break of continue beïnvloedt.
De binnenste omvattende lus gaat naar haar volgende kolom wanneer haar lusinhoud continue uitvoert.
break-instructie
Een break-instructie is een Pythoninstructie die onmiddellijk de binnenste lus beëindigt waarin ze staat en de resterende lusinhoud en iteraties overslaat.
Een break-instructie beëindigt de zoekactie zodra de eerste waarde die voldoet is getoond.
buitenste lus
Een buitenste lus omringt een andere lus en bepaalt welke groep of rij de binnenste lus bij elke uitvoering verwerkt.
De buitenste lus houdt row gelijk terwijl de binnenste lus elke kolom in die rij doorloopt.

C

continue-instructie
Een continue-instructie is een Pythoninstructie die de resterende instructies van de huidige iteratie overslaat en naar de volgende iteratie gaat.
Continue slaat de optelling voor een negatieve waarde over, terwijl latere waarden nog worden onderzocht.
controle of alle elementen voldoen
Een controle of alle elementen voldoen vraagt of elk element aan een voorwaarde voldoet en kan zonder succes eindigen bij het eerste element dat niet voldoet.
De controle of alle elementen voldoen stopt bij nul wanneer wordt getoetst of elke vastgelegde waarde positief is.
controle of minstens één element voldoet
Een controle of minstens één element voldoet vraagt of minstens één element aan een voorwaarde voldoet en kan met succes eindigen zodra dat het geval is.
De controle of minstens één element voldoet zet haar vlagvariabele op True bij de eerste score boven het vereiste minimum.

D

diagnostische uitvoerinstructie
Een diagnostische uitvoerinstructie is een tijdelijke uitvoerinstructie waarmee je de toestand van een programma op een gekozen punt in de uitvoering onderzoekt.
Een diagnostische uitvoerinstructie na de bijwerkingen toont de teller en het totaal aan het einde van de doorgang.

E

eerste invoer vóór de lus
Bij de eerste invoer vóór de lus lees je de eerste waarde voordat een lus begint, zodat de beginvoorwaarde een waarde heeft om te onderzoeken.
Door de eerste invoer vóór de lus kan een onmiddellijke stopwaarde de gegevensverwerkende lusinhoud volledig overslaan.
eindwaarde
Een eindwaarde is de waarde die een variabele na afloop van de lus bevat en die kan verschillen van de laatst getoonde waarde.
Wanneer een tellus i toont en stopt zodra i 5 bereikt, is de eindwaarde van i 5, ook al was de laatst getoonde waarde 4.
else-blok van een lus
Een else-blok van een lus is een blok dat na normale voltooiing van de lus wordt uitgevoerd en wordt overgeslagen wanneer die lus via break wordt verlaten.
Het else-blok van een lus toont één melding dat niets is gevonden nadat elke kandidaat zonder overeenkomst is gecontroleerd.
exclusieve eindgrens
De exclusieve eindgrens van een getallenbereik is de uitgesloten grens die de geleverde waarden beperkt in de richting van de stapgrootte.
Een eindgrens van 11 zorgt ervoor dat range(1, 11) 10 als laatste geleverde waarde kan meenemen.

É

één-ernaast-fout
Een één-ernaast-fout geeft één doorgang te veel of te weinig, of verschuift een bedoelde eerste of laatste waarde met één.
Door een één-ernaast-fout ontbreekt 10 wanneer een som range(1, 10) gebruikt.

F

filteren
Filteren selecteert elementen die aan een voorwaarde voldoen, zodat alleen die elementen een bepaalde verwerking krijgen of aan een resultaat bijdragen.
Door negatieve waarden uit te filteren, kan de lus alleen de geaccepteerde metingen optellen.
for-lus
Een for-lus kent achtereenvolgende elementen uit een sequentie toe aan een variabele en voert haar lusinhoud uit voor elk geleverd element.
Een for-lus doorloopt de genoteerde scores op volgorde en toont telkens het dubbele van de huidige waarde.

G

gelijke beste waarde
Een gelijke beste waarde ontstaat wanneer meerdere elementen dezelfde beste waarde hebben, zodat een zoekactie naar een positie moet kiezen tussen de eerste en de laatste.
Bij twee gelijke beste scores van 12 blijft onder een strikte groter-dantoets de eerdere positie bewaard.
geneste lus
Een geneste lus is een lus binnen de lusinhoud van een andere lus, waardoor het binnenste werk voor elk buitenste element kan worden herhaald.
Een geneste lus toont een afzonderlijke reeks kolommen voor elke rij van het vermenigvuldigingsrooster.
geneste zoekactie
Een geneste zoekactie controleert combinaties met een lus binnen een andere lus en kan een vlagvariabele voor een gevonden overeenkomst over beide niveaus bijhouden.
De geneste zoekactie gebruikt twee breaks om beide lussen bij het eerste succesvolle paar te stoppen.
geordend paar
Een geordend paar legt twee waarden vast met verschillende rollen als eerste en tweede waarde, zodat omkering een andere uitkomst kan beschrijven.
Het geordende paar (2, 5) voor twee dobbelstenen verschilt van (5, 2), omdat de eerste dobbelsteen verandert.
getallenbereik
Een getallenbereik beschrijft gehele getallen met gelijke tussenstappen via een startwaarde, een uitgesloten eindgrens en een stapgrootte ongelijk aan nul, zonder een volledige lijst te maken.
Het getallenbereik range(2, 11, 2) levert vijf even waarden van 2 tot en met 10.
grensgeval
Een grensgeval toetst een uiterste van het bedoelde werk van een lus, zoals nul elementen, één element of de laatste meegenomen waarde.
Het grensgeval n gelijk aan nul onthult de extra doorgang die ontstaat door i <= n te toetsen.

H

hekpalenfout
Een hekpalenfout verwart het aantal elementen met het aantal grenzen of tussenruimtes, zoals scheidingstekens tussen getoonde waarden.
Door een hekpalenfout verschijnen zes komma’s na zes waarden, terwijl slechts vijf komma’s ertussen nodig zijn.

I

initialisatie
Initialisatie kent een variabele haar startwaarde toe voordat een berekening of een herhaald proces die gebruikt.
De initialisatie zet de teller op nul voordat waarden die voldoen zijn geteld.
invoervalidatielus
Een invoervalidatielus herhaalt een verzoek zolang het gegeven antwoord niet voldoet aan de voorwaarden voor een aanvaardbare waarde.
Een invoervalidatielus vraagt opnieuw wanneer een ingevoerd menunummer buiten 1 tot en met 4 valt.
iteratie
Een iteratie is één doorgang door een lusinhoud, waarbij de instructies op het uitgevoerde pad op volgorde worden uitgevoerd.
Elke iteratie van een aftellus toont één getal voordat het resterende aantal wordt bijgewerkt.

K

KeyboardInterrupt
KeyboardInterrupt is de onderbreking die Python normaal meldt wanneer een gebruiker de uitvoering in een terminal met Ctrl+C stopt.
Als je een vastgelopen lus in een terminal met Ctrl+C stopt, krijg je KeyboardInterrupt en een stacktrace.
kortsluitevaluatie
Kortsluitevaluatie slaat het latere deel van een booleaanse expressie over zodra het resultaat door het eerdere deel is bepaald.
Kortsluitevaluatie van or voorkomt dat een eerste numeriek element met None wordt vergeleken.

L

leeg getallenbereik
Een leeg getallenbereik levert geen waarden omdat de startwaarde in de richting van de stapgrootte niet aan de grens voldoet.
Het lege getallenbereik range(5, 1) geeft een for-lus geen werk voor de lusinhoud en veroorzaakt geen fout.
lidmaatschapscontrole
Een lidmaatschapscontrole controleert of een waarde in een sequentie voorkomt en levert met in een booleaans resultaat op.
De lidmaatschapscontrole ch in "aeiou" bepaalt of een klinkerteller wordt verhoogd.
lineair zoeken
Lineair zoeken onderzoekt elementen één voor één in hun sequentievolgorde totdat de vereiste overeenkomst is gevonden of alle elementen zijn doorlopen.
Een lineaire zoekactie naar de eerste even waarde in een gemengde lijst stopt zodra die er een bereikt, zoals 8.
lopend totaal
Een lopend totaal is de opgebouwde som op een bepaald moment tijdens de verwerking, vóór of bij het laatste element.
Als je het lopende totaal binnen de lusinhoud toont, zie je hoe elk element het subtotaal verandert.
lus
Een lus herhaalt een blok instructies volgens een voorwaarde of een sequentie van elementen die het werk levert.
Een aftellus toont een waarde en verlaagt die voordat wordt beslist of de lus herhaalt.
lus met een bepaald aantal herhalingen
Een lus met een bepaald aantal herhalingen heeft een vastgelegde sequentie van elementen of een aantal herhalingen, ook als dat aantal tijdens de uitvoering wordt berekend.
Een lus met een bepaald aantal herhalingen herhaalt de begroeting n keer nadat n bij de gebruiker is ingelezen.
lus met een onbepaald aantal herhalingen
Een lus met een onbepaald aantal herhalingen herhaalt volgens een voorwaarde waarvan het stoppunt niet als vast aantal herhalingen is opgegeven.
Een lus met een onbepaald aantal herhalingen verzamelt berichten totdat de gebruiker het gekozen stopwoord typt.
lus met een stopwaarde
Een lus met een stopwaarde herhaalt de verwerking van invoer totdat ze een aangewezen waarde tegenkomt die betekent dat de lus moet stoppen.
Een lus met een stopwaarde kan een onbekend aantal positieve metingen verzamelen.
lusinhoud
De lusinhoud is het ingesprongen blok instructies dat voor elk element of elke geslaagde controle van de voorwaarde wordt herhaald.
In een aftellus bevat de lusinhoud zowel de print als de bijwerking die de waarde dichter bij nul brengt.
lusvariabele
Een lusvariabele bevat het huidige element dat door een for-lus is toegekend en kan worden gebruikt door instructies in de lusinhoud.
De lusvariabele score bevat steeds één score, terwijl scores de volledige lijst aanduidt.

M

maximum
Een maximum is de grootste waarde in een verzameling gegevens; een lus kan die vinden door de grootste waarde tot dan toe te bewaren.
Het maximum van -8, -3 en -6 is -3, ook al ligt elke kandidaat onder nul.
minimum
Een minimum is de kleinste waarde in een verzameling gegevens; een lus vervangt haar opgeslagen waarde telkens wanneer een kleiner element verschijnt.
De minimumtemperatuur wordt -7 wanneer die meting lager is dan de opgeslagen beste waarde.

N

None
None is de speciale waarde van Python voor het ontbreken van een waarde, die in een lus voor de beste waarde aangeeft dat nog geen element is gezien.
None blijft de opgeslagen beste waarde wanneer de lus die naar een maximum zoekt een lege lijst ontvangt.
normale voltooiing
Bij normale voltooiing eindigt een for-lus doordat alle elementen zijn doorlopen of een while-lus doordat de voorwaarde onwaar is, zonder break uit te voeren.
Bij normale voltooiing van een lege for-lus wordt het else-blok toch bereikt.

O

oneindige lus
Een oneindige lus blijft herhalen zonder via haar voorwaarde of een andere besturingsinstructie een uitgang te bereiken.
Een lus zonder bijwerking wordt een oneindige lus die steeds hetzelfde positieve getal blijft tonen.
opgeslagen overeenkomst
Een opgeslagen overeenkomst is een afzonderlijke registratie van een kandidaat die voldoet en beschikbaar blijft terwijl de huidige lusvariabelen veranderen.
Een opgeslagen overeenkomst van 3 en 4 bevat die waarden nog steeds nadat de zoekactie doorgaat met het onderzoeken van latere paren.
overeenkomst
Een overeenkomst is een element dat aan een zoekvoorwaarde voldoet, die om gelijkheid of een andere eigenschap zoals deelbaarheid kan vragen.
Wanneer 18 het eerste geleverde getal is dat deelbaar is door 6, wordt de overeenkomst 18 opgeslagen.

P

pass-instructie
Een pass-instructie is een Pythoninstructie die geen actie uitvoert en een plaats kan innemen in een blok waar een instructie vereist is.
Pass vult een onvoltooide if-inhoud, maar de print na die if wordt nog steeds uitgevoerd.
productaccumulator
Een productaccumulator vermenigvuldigt een opgeslagen resultaat met geselecteerde factoren en begint normaal bij één om de eerste factor te behouden.
Een productaccumulator die bij één begint, geeft 24 na vermenigvuldiging met 2, 3 en 4.

R

rekenkundig gemiddelde
Een rekenkundig gemiddelde bereken je hier door de som van geselecteerde waarden te delen door het aantal van die waarden.
Het gemiddelde van de scores die voldoen gebruikt hun aantal, zonder afgewezen invoerwaarden en de stopwaarde mee te tellen.

S

samengestelde toekenning
Een samengestelde toekenning combineert een bewerking en een toekenning en vervangt de waarde van een variabele door de bijgewerkte waarde.
De samengestelde toekenning total += n telt het huidige getal op bij het opgeslagen subtotaal.
scheidingstekst
Scheidingstekst is tekst tussen aangrenzende elementen in de uitvoer; bij een niet-lege sequentie van n elementen moeten n - 1 van zulke tussenruimtes worden gevuld.
Als je vóór elk volgend element scheidingstekst toont, voorkom je een extra streepje na het laatste element.
sequentie
Een sequentie is een geordende verzameling elementen, zoals de tekens van een string of de waarden in een lijst.
De sequentie “a b” levert drie tekens, inclusief de spatie tussen de letters.
stapgrootte
De stapgrootte van een getallenbereik is de gehele verandering ongelijk aan nul tussen opeenvolgende geleverde waarden; standaard is die positief één.
Een stapgrootte van -2 laat range(8, 0, -2) aflopende even waarden doorlopen.
stapsgewijs volgen
Stapsgewijs volgen doorloopt code instructie voor instructie en legt veranderingen en uitgevoerde paden vast om de waarden en uitvoer te voorspellen.
Stapsgewijs volgen laat zien dat verhogen vóór het optellen elke waarde verschuift die in de som wordt gebruikt.
startwaarde
De startwaarde van een getallenbereik is het eerste gehele getal dat in aanmerking komt; standaard is die nul als alleen de eindgrens is opgegeven.
Een startwaarde van 3 laat range(3, 8) bij 3 beginnen in plaats van bij de standaardwaarde nul.
stopwaarde
Een stopwaarde is een speciale invoerwaarde die het einde van de gegevens aangeeft en gescheiden blijft van echte gegevens.
De stopwaarde -1 beëindigt het verzamelen van scores, terwijl nul een geldige score blijft.

T

teller
Een teller is een accumulator die telkens met één toeneemt wanneer een bepaalde gebeurtenis of een geaccepteerd element voorkomt.
De teller neemt alleen toe voor scores boven de gekozen drempelwaarde, niet voor elke invoer.
tellus
Een tellus doorloopt achtereenvolgende numerieke waarden met een startwaarde, een grenstoets en een stapgrootte.
Een tellus die bij 10 begint en met stappen van -2 telt, doorloopt 10, 8, 6, 4 en 2, of die nu met for of while is uitgedrukt.
typeconversie
Typeconversie zet een waarde om naar een ander type, zoals het converteren van numerieke invoertekst naar een geheel getal met int.
Door typeconversie kan de lus de ingevoerde string “0” vergelijken met een stopwaarde die een geheel getal is.

U

uitvoeringstabel
Een uitvoeringstabel legt de toestand van variabelen tijdens lusdoorgangen vast, met kolomlabels die aangeven wanneer waarden worden bekeken.
De uitvoeringstabel maakt onderscheid tussen i vóór de lusinhoud en i na de verhoging.

V

vlagvariabele
Een vlagvariabele is een booleaanse variabele die voor latere beslissingen vastlegt of een gebeurtenis of situatie is opgetreden.
De vlagvariabele found blijft na een overeenkomst True, zodat het programma na het zoeken kan melden dat er iets is gevonden.
voortijdige beëindiging
Een voortijdige beëindiging verlaat een lus vóór het normale einde, bijvoorbeeld wanneer een zoekactie na een gevonden overeenkomst break uitvoert.
Bij een lus die een veelvoud van een getal zoekt, voorkomt een voortijdige beëindiging dat latere getallen worden onderzocht zodra het eerste veelvoud is gevonden.

W

while True-lus
Een while True-lus heeft een altijd ware kop en vertrouwt op een besturingsinstructie in de lusinhoud om de lus zo nodig te verlaten.
Een while True-lus leest één regel, toetst de stopwaarde en toont alleen echte gegevens opnieuw.
while-lus
Een while-lus toetst vóór elke doorgang een voorwaarde en herhaalt haar ingesprongen lusinhoud zolang de voorwaarde waar is.
Een while-lus kan een hoeveelheid blijven verdubbelen totdat die een vereist minimum bereikt.

Z

zwevendekommabenadering
Bij een zwevendekommabenadering worden veel decimale breuken als nabijgelegen binaire waarden opgeslagen, zodat herhaalde optellingen mogelijk geen exact doel bereiken.
Door de zwevendekommabenadering is stoppen op exacte gelijkheid na herhaaldelijk 0,1 optellen onbetrouwbaar.

Over deze les

Door StudeliFout melden

Maak je eigen Studiemateriaal

Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.

Aan de slag