10. Python: Iets meer basics#
Nu je iets weet van data-types, numpy en plotten, is het tijd voor de volgende stap… programmeren in Python.
10.1. Leerdoelen#
functies
conditionals
loops
10.2. Functies#
In programmeren wil je vaak gebruik maken van het zelfde stukje code, maar dan misschien met anderen waarden. Het is dan niet handig om steeds dezelfde code te moeten typen… je kunt gebruik maken van functies.
Bekijk de onderstaande code. Hoe is hier handig gebruik gemaakt van een functie?
import numpy as np
import matplotlib.pyplot as plt
def functie(x,a,b):
return a*x+b
x = np.linspace(0,10,100)
plt.figure()
plt.xlabel('$x$')
plt.ylabel('$f(x)$')
plt.plot(x,functie(x,2,3),label='$f(x)=2x+3$')
plt.plot(x,functie(x,3,2),label='$f(x)=3x+2$')
plt.legend()
plt.show()
Bovenstaande code maakt gebruik van een functie met drie input variabelen (x, a en b).
def functie(x,a,b):
return a*x+b
Die drie variabelen bestaan alleen in de functie. Het zijn zogenaamde ‘local variables’. Bekijk onderstaande code maar eens:
def f():
s = 'Ik ben een lokale variabele'
print(s)
print(s)
Bij het uitvoeren van bovenstaande cell wordt er een error terug gegeven, \(s\) bestaat namelijk alleen binnen de functie \(f()\).
Maak een functie genaamd som, die de som van twee waarden terug geeft.
# Jouw code
Maak een array:
arr = np.array([10, 20, 30, 40, 50]).
Schrijf een functie genaamd edit_array met de volgende parameters:
array (de originele array)
indices_to_remove (een lijst met indexen van elementen die verwijderd moeten worden)
elements_to_add (een lijst met elementen die aan het einde van de array moeten worden toegevoegd)
Laat de functie:
De opgegeven elementen verwijderen met np.delete.
De opgegeven elementen toevoegen met np.append.
De bewerkte array teruggeven.
Roep de functie aan met:
indices_to_remove = [1, 3] (verwijder elementen op index 1 en 3: 20 en 40).
elements_to_add = [60, 70] (voeg 60 en 70 toe).
Print de resulterende array.
# jouw code
10.3. Conditionals#
Conditionals (voorwaardelijke statements) in Python worden gebruikt om beslissingen te nemen in je code. Met conditionals kun je een specifieke actie uitvoeren als een bepaalde voorwaarde waar is. Dit wordt vaak gedaan met de if-**statement**
en bijbehorende varianten zoals elif
en else
.
Het basisidee van een if-statement is simpel:
Controleer of een voorwaarde waar is (bijvoorbeeld: “Is het getal groter dan 10?”).
Als dat zo is, voer dan een specifieke code uit.
x = 15
if x > 10:
print("x is groter dan 10")
Python controleert de voorwaarde x > 10.
Omdat dit waar is (15 is groter dan 10), wordt de regel binnen de if uitgevoerd, en zie je de tekst: x is groter dan 10.
x = 15
if x > 10:
print("x is groter dan 10")
Soms wil je meerdere voorwaarden controleren. Daarvoor kun je elif
en else
gebruiken:
elif
: Dit staat voor “else if” en wordt gebruikt om extra voorwaarden toe te voegen.else
: Dit wordt uitgevoerd als geen van de bovenstaande voorwaarden waar is.
Note
Let op inspringingen (indentation): In Python bepaalt de inspringing welke code bij een bepaalde conditie hoort. Gebruik 4 spaties of een tab.
x = 15
if x > 20:
print("x is groter dan 20")
elif x > 10:
print("x is tussen 11 en 20")
else:
print("x is 10 of kleiner")
Je kunt ook meerdere voorwaarden combineren met and, or en not:
and
: Beide voorwaarden moeten waar zijn.or
: Eén van de voorwaarden moet waar zijn.not
: Keert de voorwaarde om.
x = 15
y = 5
if x > 10 and y > 10:
print("x en y zijn beide groter dan 10")
elif x > 10 or y > 10:
print("x of y is groter dan 10")
else:
print("Geen van beide is groter dan 10")
In een bar wordt limonade, bier en wodka verkocht. Limonade mag gekocht worden door iedereen. Bier voor mensen boven de 18 en wodka alleen boven de 21.
Schrijf de code die terug geeft of het product verkocht mag worden. Maak gebruik van een functie, met de inputvariabele drankje
en leeftijd
.
# jouw code
10.4. Loops#
Loops zijn een constructie in een programmeertaal waarmee je hetzelfde stukje code herhaaldelijk kunt uitvoeren.
In Python zijn er twee soorten loops: while
-loops en for
-loops. We zullen eerst while
-loops bekijken en daarna verdergaan met de meer gebruikelijke for
-loops.
10.4.1. While-loop#
Met de while-opdracht kun je een opgeven codeblok steeds opnieuw laten uitvoeren totdat aan een bepaalde voorwaarde is voldaan:
while expressie:
code...
Zolang de expressie waar is, wordt het codeblok steeds opnieuw uitgevoerd. Een eenvoudig voorbeeld waarbij we een while-loop gebruiken om tot 10 te tellen:
i = 1
while i <= 10:
print(i)
i = i+1
In dit voorbeeld gebruiken we een while-loop om alle getallen tussen 1 en 10 op te tellen:
i = 1
som = 0
while i<= 10:
som = som + i
i = i+1
print("De totale som is", som)
Warning
Let op dat je bij while-loops voorzichtig moet zijn om ervoor te zorgen dat het codeblok iets doet waardoor de expressie op een gegeven moment onwaar wordt, anders blijft de loop eindeloos doorlopen!
Schrijf de code die er voor zorgt dat de som van alle even getallen tussen 0 en 100 (excl) wordt berekend.
# jouw code
Voor de bovenstaande voorbeelden zou je doorgaans een for-loop gebruiken, wat we in de volgende sectie zullen zien. Een plek waar while-loops erg handig zijn, is als je niet van tevoren weet hoeveel iteraties van de loop je nodig hebt.
Laten we bijvoorbeeld de volgende som bekijken:
Stel dat we willen weten: voor welke is de som groter dan 30? We kunnen dit eenvoudig controleren met een while-loop:
from numpy import sin
i = 1
s = 0
while s<30:
s += sin(i)**2
i += 1
print("Sum is", s)
print("i is", i)
Let op, we hebben hier ook een nieuwe operator += gebruikt: dit is een speciale toewijzingsoperator die de variabele met het opgegeven bedrag verhoogt. a += 1 is equivalent aan a = a + 1 (het scheelt alleen wat typewerk, bedenk wel: programmeurs zijn lui…).
Schrijf een functie om de faculteit van een getal te berekenen met behulp van een while-loops. De faculteit, aangegeven met !, is het product van alle getallen tot dat getal, d.w.z. \(4!=4\cdot3\cdot2\cdot1\). Merk op dat 0!=1.
# jouw code
Python biedt extra opdrachten voor het regelen van de uitvoeringsstroom in een loop: break
en continue
.
break
is een commando dat je kunt gebruiken om het verlaten van een loop te forceren. Je kunt bijvoorbeeld de while-loop hierboven vervangen met zoiets als dit:
s = 0
i = 0
while True:
s += sin(i)**2
i += 1
if s > 30:
break
print(s)
De instructie continue
wordt gebruikt als je de rest van de code in het codeblok wilt overslaan en de volgende loop opnieuw wilt starten. Dit kan soms handig zijn als je geen else-instructie wilt toe te voegen. (Onthoud dat programmeurs luie typisten zijn… en het kan handig zijn als je een groot, lang en ingewikkeld codeblok hebt…)
s = 0
for i in randint(0,30,100):
if (i % 5) == 0:
continue
s += i
print("The sum of +/-100 random numbers between 0 and 30 excluding those that are divisible by 5 is:", s)
10.4.2. For-loop#
De for
-loop is ontworpen om een stuk code een vast aantal keren uit te voeren. De syntaxis van de for
-loop is:
for i in (a, b, c, d, ...):
code block
In elke volgende iteratie van de for-loop wordt de variabele i
de volgende waarde toegewezen die in de lijstwaarden wordt geleverd.
We kunnen onze bovenstaande somberekening herhalen met behulp van de volgende for-loop:
s = 0
for i in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10):
s += i
print(s)
Het zou alleen veel leesbaarder zijn als we het zo zouden schrijven:
s = 0
i = np.arange(1,11)
for i in i:
s+=i
print(s)
Of zelfs nog beter:
s = 0
for i in range(1,11):
s+=i
print(s)
Schrijf code die een variabele i
met een beginwaarde van nul creëert. Gebruik een while-loops die i
met één verhoogt zolang i
kleiner is dan een miljoen. Laat je loop stoppen als i
voldoet aan de voorwaarde. Laat je code de i
afdrukken die voldoet aan deze voorwaarde (als er een is).
# jouw code
In deze opdracht maak je zelf je dataset en ga je die vervolgens curve fit.
Voer de volgende opdrachten uit:
Maak een numpy array \(x\) van 0 tot en met 50 in stapjes van 1.
Maak een numpy array \(y\) van 50 tot en met 0 in stapjes van 1.
Maak een numpy array \(R\) bestaande uit 50 elementen die random de waarde -1, 0, of 1 hebben (bijv [0 0 1 1 -1 0 0 1 1]).
Voeg de waarden van \(R\) toe aan \(y\) zodanig dat \(y = y + R\).
Plot \(y\) als functie van \(x\).