Les 5: For/While loops

Je hebt al eerder kennis gemaakt met hoe for-loops werken. Als je wilt dat iets tien keer wordt herhaald, dan gebruik je de for-loop. Hier een voorbeeld:

for nummer in range(10):
  print ("Dit is herhaling " + str(nummer))

In dit geval wordt de regel "Dit is herhaling" tien keer herhaald. En na de zin Dit is een herhaling volgt de inhoud van de loopcounter i

Je kunt nu ook invoer van de gebruiker gebruiken om je for-loop aan te passen:

aantal = int(input("Hoe vaak wil je gegroet worden?"))

for groet_nummer in range(aantal):
  print("Dit is groet nummer: " + str(groet_nummer))

Je kunt ook loops en if-statements combineren natuurlijk:

keuze = input("Kies 'een' voor een enkele groet en 'veel' voor veel groeten.")

if keuze == 'een':
  print("Welkom!")
elif keuze == 'veel':
  aantal = int(input("Hoeveel groeten wil je?"))
  
  for _ in range(aantal):
    print("Welkom!")
else:
  print("Jouw keuze is niet geldig: " + keuze)

Opdracht - dierentuin

Schrijf een programma dat vraagt of iemand wel of niet naar de dierentuin wil, en als het antwoord ja is, vraag dan met hoeveel mensen zij erheen willen. Print dan voor ieder persoon waarvan ze willen die mee gaat een keer “veel plezier!”.

Opdracht - Dierentuin of de film

Breid het voorgaande uit. Als er op de eerste vraag een nee gegeven wordt, vraag dan of ze anders misschien naar de film willen. Zo ja, met hoeveel personen (en weer zo vaak printen), en zo nee print dan een gepast antwoord.

Opdracht - Getallen optellen

Schrijf een programma dat getallen gaat optellen. Vraag eerst hoeveel getallen een gebruiker wil optellen. Vraag daarna steeds opnieuw om een getal en tel dat op bij het totaal. Aan het einde print je:

De som van de getallen is <som van de getallen>. HINT: Gebruik een teller buiten je for-loop: som = 0 for _ in range(5): som = som + getal print(som)

Interactieve while loops

In de voorgaande herhalingen weet je precies hoe vaak je het wilt herhalen. Maar wat als je niet van te voren weet hoe vaak je iets wilt herhalen? Dan gebruik je een andere soort loop. De while-loop.

while True:
  woord = input("Typ een woord")
  lengte = len(woord)
  print ("De lengte van jouw woord is " + str(lengte))
  
print ("EINDE")

Als je dit programma uitvoert, dan zal hij nooit stoppen. Hij zal continu vragen om een woord in te typen en zodra je een woord intypt geeft hij de lengte van het ingetypte woord. Dit betekent dat het woordje EINDE nooit geprint zal worden.

While loop stoppen

We kunnen een while loop ook laten stoppen door gebruik te maken van een boolean (True/False waarde). We kunnen namelijk dit zeggen: Als iemand het woordje quit intypt, dan stoppen we met de loop.

doorgaan = True  #doorgaan krijgt de waarde True

while doorgaan:  #Zolang doorgaan == True, ga door met de loop
  woord = input("Typ een woord")
  if woord == "quit": 
	doorgaan = False #Zet doorgaan op False zodat de loop stopt
  else:
	lengte = len(woord)
	print ("De lengte van jouw woord is " + str(lengte))
 
print ("EINDE")

Dit worden ook wel interactieve while loops genoemd. Het aantal keren dat de loop herhaalt is dan niet van te voren bepaald, maar hangt af van de invoer van de gebruiker!

Opdracht - Herhalen tot stop

Maak een interactieve while loop waarin een gebruiker net zo lang woorden kan intypen, totdat hij het woordje stop ingeeft. Zodra hij dat doet, gaat het programma uit de loop en eindigt hij. Een verloop van het programma zou er als volgt uit kunnen zien:

>>> Voer een woord in: hoi >>> Voer een woord in: doei >>> Voer een woord in: informatica >>> Voer een woord in: boe >>> Voer een woord in: stop >>> Je wilt stoppen? Dat kan! Tot de volgende keer!

Opdracht - Herhalen tot stop

Lees herhaaldelijk een woord in van de gebruiker. Print dan steeds uit: Wat een mooi woord: Waarbij het woord is dat de gebruiker invoert. Zodra de gebruiker stop invoert stop je de loop.

Strings

Strings zijn rijen met letters

Een stukje tekst (string) in Python is eigenlijk een rij met letters. En zo kun je een variabele met tekst ook benaderen. Zie het volgende voorbeeld:

fruit = "banaan"
print (fruit[3])

Door achter de variabele fruit blokhaken (daarmee bedoel ik de tekens ‘[‘ en ‘]’) te plaatsen en daartussen een getal te zetten, geef je eigenlijk aan dat je de letter op positie drie wilt uitprinten. Dus in dit geval zeg ik: geef mij de letter op positie drie in het woord ‘banaan’. Maar denk erom dat python begint te tellen bij 0! Kortom, je krijgt niet de n te zien, maar de a! probeer maar eens.

Opdracht 5a

Maak een programma dat de gebruiker steeds vraagt(in een while loop) om een woord in te voeren. Als het woord begint met een n, dan zegt hij "Je woord begint met een n" en stopt hij met de loop.

Opdracht 5b

Maak een programma dat de gebruiker steeds vraagt(in een while loop) om een woord in te voeren. Als het woord eindigt met een n, dan zegt hij "Je woord eindigt met een n" en stopt hij met de loop.

TIP: Omdat je niet weet hoe lang het woord is, dat de gebruiker intypt, kun je ook niet zomaar naar de zoveelste letter kijken. Maar wellicht kun je wel dankbaar gebruik maken van de len() functie!

Loopen door een woord

Het volgende programma telt het aantal keren dat de letter ‘a’ voorkomt in een woord.

woord = 'banaan'
teller = 0
for letter in woord:
	if letter == 'a':
		teller = teller+ 1
		print (teller)
print (teller)

Hierboven staat een variant van een loop die je als het goed is nog niet eerder hebt gezien. for letter in woord is een loop die in dit geval zes keer wordt herhaald. Waarom? Omdat het woordje banaan uit zes letters bestaat! En elke keer bevat de variabele letter de volgende letter in het woord. De eerste keer bevat het de letter b, de tweede keer de letter a, de derde keer n enzovoorts.

Dit programma demonstreert ook het gebruik van een teller. De variabele teller is aan het begin ingesteld op 0 en vervolgens wordt hij iedere keer opgehoogd zodra een ‘a’ is gevonden. Als de loop afloopt, bevat teller het resultaat: namelijk het totaal aantal ‘a’-s.

Opdracht 6

Pas het bovenstaande programma aan, zodat de gebruiker een woord mag ingeven. Vervolgens moet het programma het aantal klinkers (‘a’, ‘e’, ‘i’, ‘o’ , ‘u’) tellen in dat woord.

For-loops in for-loops

Net als dat if-opdrachting in if-opdrachten gezet kunnen worden, kan dit ook met for-loops. Dit is heel handig als je bijvoorbeeld tien keer door een woord wilt loopen.

woord = 'banaan'
for i in range(5):
  for letter in woord:
  	print (letter)

Zoals je kan zien wordt er hier 5 keer door het woord 'banaan' heen geloopt. En elke keer word er een print actie uitgevoerd per letter in dat woord. Daarom staat elke letter op een nieuwe regel. Als je bijvoorbeeld een ander woord zou nemen in plaats van “for i in range(5):” zou er net zo vaak banaan geschreven worden, als er letters in dat woord zou zitten

woord = 'banaan'
for i in 'koe':
  for letter in woord:
  	print (letter)

Hier zie je dus dat het woord banaan drie keer geprint wordt, omdat het woord 'koe' bestaat uit drie letters. Bij het volgende voorbeeld wordt dat nog iets duidelijker hoe het werkt

woord = 'banaan'
for i in 'koe':
  for letter in woord:
    print (i)
    print (letter)

Hier zie je dat er eerst een 'k’ geprint wordt, vervolgens een 'b’, daarna weer een 'k’, dan een 'a’ etc. Zo zie je dat er per letter in koe, steeds door het woord banaan gegaan wordt.

Opdracht 7

Schrijf een programma dat vier keer, elke letter van het woord “lolly” print.

Opdracht 8

Schrijf een programma dat afwisselend elke letter van twee verschillende woorden print, dus: koe + man wordt:

>>> k >>> m >>> o >>> a >>> e >>> n

De in-operator: checken of een letter in een woord zit

Je kunt in Python ook met de in operator kijken of een letter in een woord voorkomt:

if "i" in woord:
	print ("i zit in het woord: " + woord)
if "ik ben" in zin:
	print ("ik ben zit in de zin: " + zin)
if letter in paragraaf:
	print ("letter zit in de paragraaf")

In alle drie de gevallen is de in-constructie een vergelijking die waar of onwaar is. Daarom mag je hem achter een if zetten.

Last updated