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
iis geïnitialiseerd op 1. De while loop gaat door zolangikleiner is dan of gelijk is aan 5.Binnen de loop wordt de waarde van
iafgedrukt en vervolgens wordtimet 1 verhoogd.Nadat de loop is voltooid (wanneer
i6 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
totalencounterzijn geïnitialiseerd.totalslaat de som van de nummers op, encounterhoudt 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, encounterwordt verhoogd.Let op: indices worden vaak begonnen bij 0, wat de code gemakkelijk leesbaar maakt.
Wegwerp variabele: De variabele
counteris 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
iofjvoor 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
numis 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
numberis 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
forloop kan doen, kan eenwhileloop 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,breakencontinue.Ze werken zowel voor
whilealsforloops.
7.3.1 Else
Net als een
ifstatement, 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
Falseis voor een while loop, of wanneer het laatste gehele getal is verwerkt voor deforloop.Voorbeeld:
python i = 0 while i < 5: print(i) i += 1 else: print("De loop eindigt , i is nu", i ) print("Klaar")
Nadat de
whileloop hier is geëindigd, is de waarde vani5.De waarde van fruit is daarna ingesteld op "Aardbei."
7.3.2 Break
Het
breakstatement kan vroegtijdig uit de loop breken. Als Python eenbreaktegenkomt, 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
breakkan altijd worden vermeden, maar het kan betere code leesbaarder maken, zoals in dit geval.Als een
breakwordt uitgevoerd in een loop die ook eenelseheeft, wordt de code voor deelseniet uitgevoerd.
7.3.3 Continue
Wanneer het
continuestatement 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
continuestatements kunnen altijd worden vermeden, maar ze helpen wel om de code begrijpelijk te maken.Net als breaks kun je alleen
continuestatements 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:
breakif (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: