Chapter 7: Iterations

  • Computers raken niet verveeld en kunnen taken vele malen herhalen zonder klagen.

  • Mensen houden niet van overmatige herhaling, dus repetitieve taken moeten aan computers worden overgelaten.

  • Iteraties: Programmeerconstructies die herhaling mogelijk maken, vaak "loops" genoemd.

7.1 While Loop
  • Een "while loop" herhaalt een codeblok zolang een booleaanse expressie waar is.

  • Syntax:- while boolean_expression: code_block

  • De booleaanse expressie wordt getest. Als deze waar is, wordt het codeblok uitgevoerd. Na uitvoering keert Python terug naar de booleaanse expressie en test deze opnieuw.

  • Dit herhaalt zich totdat de booleaanse expressie onwaar is, waarna Python het codeblok overslaat en verdergaat.

  • Als de booleaanse expressie in eerste instantie onwaar is, wordt het codeblok volledig overgeslagen.

7.1.1 While Loop, Eerste Voorbeeld
  • Print nummers 1 tot en met 5 met behulp van een while loop:- python i = 1 while i <= 5: print(i) i += 1 print("Klaar")

  • De variabele i is geïnitialiseerd op 1. De while loop gaat door zolang i kleiner is dan of gelijk is aan 5.

  • Binnen de loop wordt de waarde van i afgedrukt en vervolgens wordt i met 1 verhoogd.

  • Nadat de loop is voltooid (wanneer i 6 wordt), wordt het woord "Klaar" afgedrukt.

7.1.2 While Loop, Tweede Voorbeeld
  • Vraagt de gebruiker om vijf numbers en berekent hun som:

    • python from iput import inputinteger total = 0 counter = 0 while counter < 5: number = inputinteger("Geef een nummer: ") total += number counter += 1 print("Totaal is", total)

  • Variabelen total en counter zijn geïnitialiseerd. total slaat de som van de nummers op, en counter houdt bij hoe vaak de loop is uitgevoerd.

  • De loop wordt vijf keer uitgevoerd. In elke iteratie wordt de gebruiker gevraagd om een nummer in te voeren, dat wordt toegevoegd aan total, en counter wordt verhoogd.

    • Let op: indices worden vaak begonnen bij 0, wat de code gemakkelijk leesbaar maakt.

  • Wegwerp variabele: De variabele counter is een "wegwerp variabele."

    • Het wordt alleen gebruikt om het aantal loops te tellen. Het heeft geen betekenis tijdens de loop of erna.

    • Programmeurs gebruiken vaak namen van één letter, meestal i of j voor deze variabelen.

7.1.3 While Loop Onder Gebruikerscontrole
  • Hiermee kan de gebruiker zoveel nummers invoeren als hij wil, en stopt wanneer hij nul invoert.- python from iput import inputinteger num = -1 total = 0 while num != 0: num = inputinteger("Geef een nummer: ") total += num print("Totaal is", total)

  • De variabele num is geïnitialiseerd op -1 om ervoor te zorgen dat de loop minstens één keer wordt uitgevoerd. Dit is betekenisloos.

  • De loop gaat door totdat de gebruiker 0 invoert.

  • Een alternatieve aanpak vermijdt betekenisloze initialisatie, maar dupliceert de functieaanroep inputinteger():- python from iput import inputinteger num = inputinteger("Geef een nummer: ") total = 0 while num != 0: total += num num = inputinteger("Geef een nummer: ") print("Totaal is", total)

7.1.4 Eindeloze Loops
  • Een veelvoorkomend gevaar bij while loops is het creëren van loops die nooit eindigen.

  • Voorbeeld:- python number = 1 sum = 0 while (sum * sum) % 1000 != 0: sum += number print("Totaal is", sum)

  • De variabele number is geïnitialiseerd op 1 maar wordt nooit gewijzigd binnen de loop. Daarom is de booleaanse expressie nooit onwaar en de loop blijft oneindig draaien.

  • Om eindeloze loops te vermijden, voegt u onmiddellijk een regel code toe die de variabele wijzigt die in de booleaanse expressie wordt getest.

7.1.5 While Loop Oefeningen
  • Schrijf code die aftelt vanaf een specifiek nummer en elk nummer afdrukt (bijv. 10, 9, 8, …). In plaats van nul af te drukken, moet het programma "Start!" afdrukken

  • Schrijf code om de faculteit van een nummer te berekenen. De faculteit van 5 (5!) is 5 * 4 * 3 * 2 * 1 = 120.

7.2 For loop
  • Een alternatieve manier om loops te implementeren.

  • Gemakkelijker en veiliger in gebruik dan while loops, maar niet geschikt voor alle iteratieproblemen.

  • Alles wat een for loop kan doen, kan een while loop ook doen, maar niet andersom.

  • Syntax:- for variable in collection: code block

  • Een for loop krijgt een verzameling items en verwerkt deze items één voor één in de volgorde waarin ze worden aangeboden.

  • Elke cyclus door de loop verwerkt één item door het op te slaan in de variabele naast de for.

  • De variabele hoeft niet te bestaan voordat de for loop wordt bezocht. Als de variabele al bestaat, wordt deze overschreven. Als deze niet bestaat, wordt deze aangemaakt.

7.2.1 For Loop met Strings
  • Een string is een verzameling karakters. De string "banaan" is bijvoorbeeld een verzameling van de karakters "b", "a", "n", "a", "a" en "n", in die volgorde.

  • De volgende code verwerkt elk van de karakters van deze verzameling:- python for letter in "banaan": print(letter) print("Klaar")

  • Wanneer de for loop wordt aangetroffen, maakt Python een "iterabele" (lijst van alle karakters in de string, in de volgorde waarin ze voorkomen) van de verzameling.

  • Het plaatst de eerste van deze karakters in de variabele letter, waarna de code wordt herhaald voor elk karakter.

7.2.2 For loop met een Variabele Verzameling
  • De bovenstaande code gebruikt de string verzameling, maar kan ook een variabele gebruiken als de variabele een string bevat.

  • De volgende code is bijvoorbeeld gelijk aan de vorige:- python s = "banaan" for letter in s: print(letter) print("Klaar")

  • De string die de loop verwerkt, wordt slechts één keer bepaald, wanneer deze voor het eerst wordt gestart. Als de string tijdens de loop wordt gewijzigd, heeft dit geen invloed op het loopingproces.

  • Het is een kenmerk van for loops dat ze gegarandeerd eindigen, dat wil zeggen, for loops kunnen niet eindeloos zijn!

  • Het is mogelijk om een conditie in het codeblok van een loop te stoppen.

7.2.3 For loop met een Reeks Nummers
  • Python heeft een functie range() waarmee het een reeks opeenvolgende nummers kan genereren.

  • Het wordt vaak gebruikt in combinatie met een for loop, bijvoorbeeld om een loop te creëren die een specifiek aantal keren wordt uitgevoerd.

  • De eenvoudigste manier om range() aan te roepen is met één parameter, het gehele getal. De functie genereert dan een opeenvolgende lijst van gehele getallen vanaf nul, tot maar niet inclusief de parameter.- python for i in range(10): print(i)

  • range() kan worden aangeroepen met meer dan één parameter. Als je het er twee geeft, dan is de eerste het startnummer en de tweede het eindnummer, niet inclusief.

  • Als je het drie nummers geeft, zijn de eerste twee zoals voorheen, en de derde is de stapgrootte, dat wil zeggen de afstand tussen de gegenereerde nummers. De standaard stapgrootte is 1.

  • Als je wilt aftellen, is dat mogelijk door een negatieve stapgrootte te geven.- python for i in range(1, 11, 2): print(i)

7.2.4 For loop met een Handmatige Verzameling
  • Als je een verzameling hebt die je zelf hebt samengesteld, kun je deze in de loop gebruiken.

  • Een reeks items tussen haakjes is een "tuple."

  • Tuples worden in detail besproken in hoofdstuk 11.

  • Bijvoorbeeld:

    • python for i in (10, 100, 1000, 10000): print(i)

    • python for i in (“apple”, “peer”, “grape”, “banana”, mango”, “cherry”): print(i)

  • Een verzameling kan verschillende soorten datatypes bevatten.

7.2.5 For loop Oefeningen
  • Je hebt code gemaakt die een while loop heeft die een gebruiker om vijf gehele getallen heeft gevraagd en vervolgens de totale waarde heeft getoond. Doe dit nu met een for loop.

  • Je hebt code gemaakt voor een while loop die aftelt tot nul en vervolgens "Start!" afdrukt. Doe dit nu met een for loop.

  • Ik ga geen oefening geven waarin je de gebruiker om gehele getallen vraagt totdat de gebruiker nul afdrukt. Waarom niet?

7.3 Loop Control
  • Er zijn drie statements die controle geven over hoe een loop wordt uitgevoerd. Dit zijn else, break en continue.

  • Ze werken zowel voor while als for loops.

7.3.1 Else
  • Net als een if statement, kun je een else statement toevoegen aan het einde van een loop.

  • Het codeblok naast else wordt uitgevoerd wanneer de loop eindigt, wat is wanneer de booleaanse zin False is voor een while loop, of wanneer het laatste gehele getal is verwerkt voor de for loop.

  • Voorbeeld:

    • python i = 0 while i < 5: print(i) i += 1 else: print("De loop eindigt , i is nu", i ) print("Klaar")

  • Nadat de while loop hier is geëindigd, is de waarde van i 5.

  • De waarde van fruit is daarna ingesteld op "Aardbei."

7.3.2 Break
  • Het break statement kan vroegtijdig uit de loop breken. Als Python een break tegenkomt, stopt het met het werken met de loop en keert het niet terug naar de eerste regel van de loop.

  • Voorbeeld:

    • python i = 1 while i <= 1000000: small = int(str(i) + "1") big = int("1" + str(i)) if big == 3 * small: print(big, "is three times", small) break i += 1 else: print("Geen antwoord gevonden")

  • Maximum is gekozen niet omdat het weet of het een miljoen keer door de loop moet gaan, maar het heeft geen idee. Het weet alleen wanneer het een antwoord heeft gevonden en de loop kan breken.

  • Het gebruik van een break kan altijd worden vermeden, maar het kan betere code leesbaarder maken, zoals in dit geval.

  • Als een break wordt uitgevoerd in een loop die ook een else heeft, wordt de code voor de else niet uitgevoerd.

7.3.3 Continue
  • Wanneer het continue statement in het codeblok voor een loop voorkomt, beëindigt het onmiddellijk de cyclus in de loop en keert het terug naar de eerste regel in de loop.

  • Voor een while loop betekent dit dat de booleaanse zin opnieuw wordt geëvalueerd, en voor een for loop betekent het dat de volgende waarde van de verzameling wordt gebruikt.

  • De volgende code print alle nummers tussen 1 en 100 die niet kunnen worden gedeeld door 2 of 3 en die niet eindigen op een 7 of 9.

    • python i = 0 while i < 100: i += 1 if i%2 == 0: continue if i%3 == 0: continue if i%10 == 7: continue if i%10 == 9: continue print(i)

  • De continue statements kunnen altijd worden vermeden, maar ze helpen wel om de code begrijpelijk te maken.

  • Net als breaks kun je alleen continue statements gebruiken in loops.

7.4 Nested Loops
  • Eén simpele statement: je kunt een loop in een andere loop plaatsen!

  • Hier is een voorbeeld van een dubbel-geneste loop:

    • python for i in range(3): print("De buitenste loop begint met i =", i) for j in range(3): print("De binnenste loop begint met j =", j) print(" ",(i,j) = ({},{})”.format(i,j)) print("De binnenste loop eindigt met j =", j) print("De buitenste loop eindigt met i =", i)

  • Eerst krijgt variabele i een waarde van nul, en dan krijgt j waarden van 0, 1, 2.

  • Kan while loops nesten, of for loops of while loops samen.

  • Break of continue beïnvloedt alleen de binnenste loop.

  • Triple-geneste loops is ook mogelijk.

7.5. De Loop-en-een-half
  • De gebruiker wordt gevraagd om paren nummers en je wilt de vermenigvuldiging tonen, en je wilt dat de loop stopt als de gebruiker een nul geeft, ongeacht welk nummer. Om een andere reden kunnen de twee nummers geen delers van elkaar zijn. Laatste vereisten dat nummers tussen 0 - 1000 zijn.

    • Hier is een eerste poging:

    • ```python

    from iput import inputinteger

    i = 3

    j = 7

    while (i != 0) and (j != 0) and (i%j != 0) and (j%i != 0):

    i = inputinteger("Geef nummer 1: ")

    j = inputinteger("Geef nummer 2: ")

    if (i > 1000) or (j > 1000) or (i < 0) or (j < 0):

    print("getallen moeten tussen 0 en 1000 liggen")

    continue

    ```
    print (i, "keer", j, "is", i * j)

    if i == 0 or j == 0:
                print ("Klaar!")
            else:
                print("Fout: som mag niet deelbaar zijn.")
        


    ```


    ```

    • Een versie geeft er de voorkeur aan om waarden te geven met de waarden die de gebruiker opgeeft, in plaats van willekeurige waarden voor de veiligheid in een versie 7.12.

  • Dit creëert echter een nieuw probleem. input komt drie keer voor in de code in plaats van één.

  • “Truc” – stuur de loop puur met continua en breaks.

  • Om een loop “altijd” uit te voeren, gebruik je white True

    • ```python
      from iput import inputinteger
      from sys import exit
      while True:
      i = inputinteger("Voer getal 1 in: ")
      if i == 0:
      break
      j = inputinteger("Voer getal 2 in: ")
      if j == 0:
      break

          if (i < 0 or i > 1000) or  (j < 0 or j > 1000):
      
              print ("Nummers moeten tussen 0 en 1000 zijn")
      
              continue
      
          if i%j == 0 or j%i == 0: