We hebben reeds 2 structuren van gestructureerd programmeren gezien.
De volgende stuctuur die we gaan zien is de iteratie of kortweg een lus.
Bij een iteratie gaat een gedeelte van de code herhaald worden, zolang een bepaalde voorwaarde voldaan is.
Bekijken we de afbeelding . De programmeur eet een appel, en zoals elke (goede) programmeur gaat hij op zoek naar een algoritme.
In pseudo-cod zou dit kunnen zijn:
Zo lang de appel niet op is
Neem een hap
Draai appel een beetje
Gooi het klokkenhuis weg
We merken een aantal elementen op die we ook tegenkwamen bij de if-statement (conditie).
We krijgen hier een blok met instructies die gaat moeten uitgevoerd worden. Net zoals bij de if-statement gaan we deze blok aanduiden door deze te laten inspringen.
Ook hebben we hier een conditie, zolang aan deze boolean expressie voldaan is gaat de blok herhaald worden.
En tenslotte ga je zien dat na de conditie het blok met instructies start met een dubbele punt na de conditie.
Het enige wat je nu nog moet weten is het gereserveerde woord om de iteratie te starten, en dit is while.
Schrijf een script dat aan de gebruiker een geheel getal vraagt van 1 tot 10.
Het script geeft dan de tafel van vermenigvuldiging van dit getal.
Het algoritme zal er als volgt uitzien:
Lees welke tafel je gaat moeten geven -->getal
Zet teller op 1 --> tel
Zolang tel kleiner of gelijk is aan 10 herhaal
Output: tel . getal
Verhoog de teller met 1
Hieronder vind je de grafische voorstelling en de vertaling naar het script
#Tafels
tafel = int(input("Welke tafel wil je? "))
tel = 1
while tel<=10:
print(tel,"x",tafel,"=",tel*tafel)
tel = tel +1
Een goed "algoritme" om tot een while lus te komen is
Bepaal de boolean expressie waaraan voldaan moet zijn zodat de blok wordt uitgevoerd.
Uit je conditie haal je de variabele waarmee je gaat werken. Zorg ervoor dat deze voor je aan je lus start gemaakt is.
Het kan zijn dat je deze variabele een waarde moet geven zodat deze voldoet aan de conditie, anders gaat de blok niet uitgevoerd worden.
Zorg voordat je uit je lus gaat dat deze variabele aangepast wordt, ander krijg je een oneindige lus.
We vragen wel aan de gebruiker om een getal in te geven van 1 t/m 10, maar wat als hij dit niet gaat doet?
Geef ik tekst in, dan zal het programma "crashen". Zie hieronder wat gebeurt als ik tien ingeef, i.p.v. 10.
Dit kunnen we nog niet vermijden, maar we kunnen wel gaan controleren of het ingegeven getal een getal van 1 t/m 10 is. Zo lang het geen getal is van 1 t/m 10 moet ik input vragen, totdat het getal voldoet.
Wanneer is het geen getal van 1 t/m 10?
Als het getal kleiner is dan 1.
Als het getal groter is dan 10
Ik krijg hier 2 condities, en als één van de twee voldaan is, dan voldoet het getal niet aan de vereisten, en moet ik een nieuwe ingave vragen.
In pseudo-code is dit
Zolang getal < 1 of getal >10
lees-->getal
Logische operator : OR
Je kan twee of meerdere boolean expressies met elkaar combineren met een logische operator.
In dit geval gebruiken we de logische operator OR. Deze zal als resultaat TRUE geven als minstens één van de boolean expressie TRUE is.
#Tafels
tafel = 0
while tafel<1 or tafel>10:
tafel = int(input("Welke tafel wil je? "))
tel = 1
while tel<=10:
print(tel,"x",tafel,"=",tel*tafel)
tel = tel +1
Wil je weten hoe je toch kan controeren of er tekst is ingegeven? Klik dan HIER.
Schrijf een script dat aan de gebruiker een positief geheel getal vraagt. Het script geeft dan aan of het gaat over een priemgetal of niet.
Logische operator : AND
Focussen wijeven op de lus. Ook hier hebben we twee boolean expressies die gecombineerd worden. In het vorige voorbeeld hadden we te doen met of (or) hier met en (and).
De and - operator zal als resultaat TRUE geven als alle boolean expressies TRUE zijn.
In ons script wordt dit:
while tel<getal**.5 and getal%tel !=0:
Wat moet er gebeuren als het resultaat TRUE is?
De teller moet met 1 verhoogd worden. Dit kan met:
tel = tel + 1
Verkorte schrijfwijze:
Een variabel aanpassen door er een waarde bij op te tellen, af te trekken, vermenigvuldigen of delen is een praktijk die zeer dikwijls moet gebeuren.
Zelf gebruik ik ze niet veel, maar Python voorziet hier een verkorte schrijfwijze. Omdat je deze wel eens in voorbeeldscripts kan tegenkomen behandel ik ze hier.
Volledig
tel = tel + 3
tel = tel - 2
tel = tel / 10
tel = tel * 3
Verkort
tel += 3
tel -= 2
tel /= 10
tel *= 3
Het volledige script ziet er zo uit:
#priemgetallen
getal = int(input("Geef een natuurlijk getal: "))
tel = 2
while tel<getal**.5 and getal%tel !=0:
tel+=1
if tel>getal**.5:
print("priemgetal")
else:
print("geen priemgetal")