Python – Leren programmeren – deel 4
Welkom terug bij de 4e Python post. Zoals beloofd kun je na deze post al aardig scripten met Python. Door lekker te spelen met de code en verschillende functies zul je al snel een logisch patroon ontdekken. Dat is ook waarom Python zo mooi is om mee te beginnen! In deze post gaan we eens wat beter kijken naar “loops” zijn essentiële onderdelen. Zonder loops zouden we geen programma’s of “intelligentie” kunnen schrijven in Python. Maar gelukkig kunnen we dat wel… dus ga er maar even lekker voor zitten 🙂
Laten we allereerst eens kijken naar wat “loops” nu eigenlijk zijn. Loops, ofwel lussen in programmacode zijn delen in de programmacode die keer naar keer herhaald worden behalve wanneer aan een bepaalde waarde wordt voldaan waarna de code weer verder gaat.
We kennen 2 soorten loops. De “while” en de “for” loop. Laten we eens wat beter naar de “for” loop gaan kijken.
For Loop
Het volgende voorbeeld gaan we gebruiken:
#Voorbeeld 1: for letter in "Jarno": print ("Huidige letter:", letter) #Voorbeeld 2: fruits = ["banaan", "appel", "mango"] for fruit in fruits: print ("Huidig fruit:", fruit) |
Huidige letter: J
Huidige letter: a
Huidige letter: r
Huidige letter: n
Huidige letter: o
Huidig fruit: banaan
Huidig fruit: appel
Huidig fruit: mango
Een “for” loop herhaalt de input in een bepaalde volgorde en wordt meestal gebruikt als je een bepaalde code een x aantal keer wilt herhalen (loop door tot het einde). De “for” loop noemen we ook wel een “iterator statement”. Vrijwel alles kan opgenomen worden in de iterator variabele (interating_var), zelfs strings.
Wat er gebeurt is als volgt: als een sequentie een expressie lijst (zoals hierboven) bevat dan wordt deze eerst geëvalueerd. Vervolgens wordt het eerste item in de sequentie toegevoegd aan de iteratie variabele (iterating_var). Hierboven zijn deze letter & fruit. Vervolgens wordt het “statements block” uitgevoerd voor elk item in de “iterating_var”. Als alle items verwerkt zijn dan zal de programmacode verder gaan.
Dus:
for <variable> in <sequence>: <statements> else: <statements> |
Als je kijkt naar de 1e “for” loop, let er dan op dat het “print” gedeelte een subblok is van de “for” loop en dus ingesprongen moet worden. De “for” loop zelf eindigt met een dubbele punt.
Wat ook opvalt is dat voorbeeld 1 niet in een data list staat (tussen brackets). Hier wordt iedere letter gezien als een losse input voor de zogenaamde iterating_var. Wanneer we hier wel een list van maken door meerdere waardes met een komma te scheiden en/of door deze tussen brackets te zetten dan zal iedere input als waarde worden gezien voor de iterating_var en niet iedere letter. Bijvoorbeeld:
#Voorbeeld 3: for var in "Dit", "is", "een", "Test": print ("Huidige letter:", var) #Voorbeeld 4: for var in ["Dit", "is", "een", "Test"]: print ("Huidige letter:", var) |
Huidige letter: Dit
Huidige letter: is
Huidige letter: een
Huidige letter: Test
Huidige letter: Dit
Huidige letter: is
Huidige letter: een
Huidige letter: Test
Als we werken met een lijst worden (zoals we al geleerd hebben) alle items uit de lijst geïndexeerde objecten. Zo kunnen we b.v. van alle items uit de lijst alleen de 1e letter opvragen:
#Voorbeeld 5: fruit = ["banaan", "appel", "mango"] for fruits in fruit: print ("Huidig fruit:", fruits[0]) |
Huidig fruit: b
Huidig fruit: a
Huidig fruit: m
Bovenstaande “for” loop zouden we ook als volgt kunnen uitschrijven:
#Voorbeeld 6: fruit = ["banaan", "appel", "mango"] for index in range(len(fruit)): print ("Huidig fruit:", fruit[index][0]) |
Deze optie is in feite hetzelfde behalve dan dat we gebruik maken van de built-in “range” en “len” functie.
“For” loops kunnen een reeks getallen herhalen met behulp van de ‘range’ functie. Onderstaande voorbeeld zal een range van 5 cijfers tonen (te beginnen bij 0):
#Voorbeeld 7: for x in range(5): print(x) |
0
1
2
3
4
Ook kunnen we een specifieke range kiezen, bijvoorbeeld van 3 t/m 11:
#Voorbeeld 8: for x in range(3,12): print(x) |
3
4
5
6
7
8
9
10
11
We kunnen ook nog stappen in een range maken. Het 3e cijfer in de range is de stapwaarde. Om dus de range te bekijken in stappen van 3 gebruiken we:
#Voorbeeld 9: for x in range(3,12,3): print(x) |
3
6
9
Break Statement
Een loop kunnen we onderbreken middels het “break” commando. Na beëindiging van de loop wordt onmiddellijk de volgende code of loop uitgevoerd. Om dit te illustreren gebruiken we het eerste voorbeeld:
#Voorbeeld 10: for letter in "Jarno": if letter == "r": break print ("Letter :", letter) |
Letter : J
Letter : a
Continue Statement
De “continue” statement verwijderd alle resterende statements van de huidige loop en gaat weer door aan het begin van de volgende loop. Dus:
#Voorbeeld 11: for letter in "Jarno": if letter == 'r': continue print ("Letter:", letter) |
Letter: J
Letter: a
Letter: n
Letter: o
Pass Statement
De pass statement is vergelijkbaar met de “continue” statement. Echter is de pass statement een “null” operatie. Als een waarde voldoet aan de “pass” voorwaarde dan wordt deze volledig genegeerd en verwijderd en gaat de Python door met het begin van de volgende loop. B.v.
#Voorbeeld 12: for letter in 'Jarno': if letter == 'r': pass print ('Dit is het pass blok') print ('Letter :', letter) |
Letter : J
Letter : a
Dit is het pass blok
Letter : r
Letter : n
Letter : o
Het pass statement is ook bruikbaar op de plaatsen waar de code uiteindelijk heen gaan, maar moet nog geschreven (bijvoorbeeld in stubs).
Else Statement
Het “else” statement wordt gebruikt als er niet aan een voorgaande voorwaarde voldaan wordt. Bij een “for” loop wordt de “else” statement pas uitgevoerd als alle itteraties zijn doorgevoerd. Bij een “while” loop wordt “else” pas uitgevoerd nadat een voorwaarde als “false” geretourneerd wordt.
Een “else” statement moet altijd voorafgaan van een “if” statement (als – dan):
Voorbeeld:
#Voorbeeld 13: var = 10 waarde = 10 if waarde == var: print ("De variabele is", var, ". Dit voldoet dus WEL aan de gestelde waarde van", waarde,) else: print ("De variabele is", var, ". Dit voldoet dus NIET aan de gestelde waarde van", waarde,) |
De variabele is 10 . Dit voldoet dus WEL aan de gestelde waarde van 10
Met een “normale” else kunnen we maar 1 statement controleren. Maar met “elseif” kunnen we controleren op meerdere voorwaarden. Wanneer “elseif” gebruikt wordt dan eindig je altijd met een normale “else”. Let op, in Python schrijf je een “elseif” als “elif”!
Zoals:
#Voorbeeld 14: var = 10 waarde = 7 if waarde == var: print ("De variabele is", var, ". Dit voldoet dus WEL aan de gestelde waarde van", waarde,) elif waarde+1 == var: print ("De variabele is", var, ". Dit voldoet dus WEL aan waarde", waarde,"+1") elif waarde+2 == var: print ("De variabele is", var, ". Dit voldoet dus WEL aan waarde", waarde,"+2") elif waarde+2 == var: print ("De variabele is", var, ". Dit voldoet dus WEL aan waarde", waarde,"+3") else: print ("De variabele is", var, ". Dit voldoet dus NIET aan de gestelde waarde van", waarde, "of andere acceptabele waardes") |
De variabele is 10 . Dit voldoet dus NIET aan de gestelde waarde van 7 of andere acceptabele waardes
For Loop resume
Laten we nog 1 voorbeeldje doen ter resume van de “for” loop. In onderstaande voorbeeld zoeken we in een string met nummers of er een “even” nummer tussen zit. Dit is dus een nummer dat door 2 te delen is en waarbij de uitkomst uiteindelijk 0 is.
We doen dit door eerst een lijst met nummer te definiëren in een variabele (nummers). Vervolgens gaan we met elk item in de lijst voorzien van een speciale loop variabele (iterating_var). Dan testen we of deze de delen is door 2 waarbij de uiteindelijke uitkomst 0 is. (if num%2 == 0). Als er een nummer is welke deelbaar door 2 is dan zal de computer de melding geven dat de lijst een deelbaar nummer bevat. Zo niet dan wordt medegedeeld dat de lijst geen “even” nummers bevat.
#Voorbeeld 15: nummers = [11,33,55,39,55,75,37,21,23,41,13] for num in nummers: if num%2 == 0: print ("Deze lijst heeft een getal deelbaar door 2 (een even nummer)") break else: print ("Deze lijst heeft GEEN even nummer (deelbaar door 2)") |
Deze lijst heeft GEEN even nummer (deelbaar door 2)
While Loop
De “while” loop is vergelijkbaar met de “for” loop. Het grote verschil is dat de while loop doorgaat tot aan een bepaalde waarde voldaan wordt of tot er een fout gegenereerd wordt. Een klein voorbeeldje van de while loop.
#Voorbeeld 1: teller = 0 while (teller < 5): print ("Het huidige getal is:", teller) teller = teller + 1 |
Het huidige getal is: 0
Het huidige getal is: 1
Het huidige getal is: 2
Het huidige getal is: 3
Het huidige getal is: 4
In bovenstaande voorbeeld zien we een variabele “teller” welke we aan het begin van de code op 0 zetten. Vervolgens starten we de loop. Aan het begin van de loop geven we een bepaalde voorwaarde. Als er niet aan deze voorwaarde voldaan wordt dan zal de loop overgeslagen worden en doorgegaan worden met de vervolgcode. De voorwaarde in bovenstaande code is: “while (teller < 5):”. Dit wil zeggen: zolang de variabele teller lager is dan 5 wordt de loop doorlopen. In de loop wordt de regel “Het huidige getal is” op het scherm getoond met daarachter de waarde van de huidige teller variabele. Vervolgens wordt de teller variabele met deze code “teller = teller + 1” opgehoogd met 1. 0 wordt dus 1, 1 wordt 2… etc. Let ook hierboven weer op het inspringen van een sub codeblok. Een while loop kan ook zo gemaakt worden dat deze oneindig doorloopt en dus theoretisch gezien nooit stopt. Dit noemen we een “infinite loop”. Een voorbeeld van zo’n while loop is:
#Voorbeeld 2: teller = 1 while teller == 1: print ("Het huidige getal is:", teller) |
Het huidige getal is: 1
Het huidige getal is: 1
Het huidige getal is: 1
Het huidige getal is: 1
Het huidige getal is: 1
Enz….
Probeer bovenstaande code niet uit. Deze gaat oneindig door en moet hard afgebroken worden. Een infinite loop wordt gebruikt als een bepaalde code altijd non-stop moet draaien. B.v. tijdens sommige servertaken.
Else Statement
Ook in de “while loop” wordt het “else” statement ondersteund. In een “while loop” wordt het “else” statement pas uitgevoerd wanneer de loop beëindigd wordt. Bijvoorbeeld:
#Voorbeeld 3: teller = 0 while (teller < 5): print ("Het huidige getal is kleiner dan:", teller) teller = teller + 1 else: print ("Het huidige getal is gelijk aan of groter dan:", teller) |
Het huidige getal is kleiner dan: 0
Het huidige getal is kleiner dan: 1
Het huidige getal is kleiner dan: 2
Het huidige getal is kleiner dan: 3
Het huidige getal is kleiner dan: 4
Het huidige getal is gelijk aan of groter dan: 5
Enz….
We kunnen net als ik een “for loop” ook het elif (else if) statement in een while loop gebruiken. Bijvoorbeeld:
#Voorbeeld “4: teller = 6 while (teller < 5): print ("Het huidige getal is kleiner dan:", teller) teller = teller + 1 if teller == 5: print("Het huidige getal is gelijk aan:", teller) elif teller > 5: print("Het huidige getal is groter dan 5") |
Het huidige getal is groter dan: 5
Enz….
Nu een wat groter voorbeeld:
#Voorbeeld “5: tekstregels = list() print('Type een tekstregel.') print('Type "sluiten" om af te sluiten') line = input('Je 1e tekstregel: ') while line != 'sluiten': tekstregels.append(line) line = input('Volgende tekstregel: ') print('Je tekstregels waren:') for line in tekstregels: print(line) |
Hier gebeurt het volgende. Bij het uitvoeren krijgt de gebruiker de prompt te zien “Type een tekstregel.”. De gebruiker type een tekstregel. Deze tekstregel wordt opgeslagen in een lijst en alle tekstregels worden aan de gebruiker geretourneerd wanneer deze het woord “sluiten” typt.
Allereerst maken we een lijst variabele genaamd “tekstregels”, Elke item in de lijstvariabele wordt opgeslagen als een los item. Vervolgens vragen we met de eerste 2 printopdrachten aan de gebruiker om een tekstregel te typen en vertellen we dat de gebruiker het woord “sluiten” moet typen om af te sluiten. Daarna maken we een “line” variabele welke we vullen met een input (gebruikersinput). Daarna start de loop en in de loop gebeurt het volgende. Als de ingetypte input “sluiten” was dan wordt er naar het volgende codeblok gesprongen waar er geprint wordt “Je tekstregels waren:” en vervolgens wordt elke “line” in de “tekstregels” variabele naar het scherm geprint. Als de ingetypte input niet “sluiten” was wordt de ingevoerde tekst (dus de line variabele) toegevoegd (append) aan de “tekstregels” lijst en wordt de vraag “Volgende tekstregel:” aan de gebruiker gesteld waar deze nogmaals een tekstregel kan typen of ervoor kan kiezen om het script te sluiten.
Conclusie
Hoewel we in deze post slechts 2 aspecten (de for en while loop) goed belicht hebben we hiermee een essentiële programmeer eigenschap geleerd. Met deze kennis ben je in staat het systeem zelf diverse variabele te laten testen en hier consequenties aan te verbinden. Op naar nog meer Python kennis. Op naar post 5.