Programmeren en Wetenschappelijk Rekenen in Python
Wi1205AE I.A.M. Goddijn, Faculteit EWI
22 mei 2014
Bijeenkomst 10
Onderwerpen
Tips met betrekking tot ”debuggen”
Type foutmeldingen
Object geori¨enteerd programmeren (On-)veranderlijk? Pas op!
Tips met betrekking tot “debuggen”
Het volgende programma bevat een fout:
importnumpy as np
importmatplotlib.pyplot as plt x =np.arange(−5., 5.01, 0.01) y 1 =np.sin(x )
y 2 = 0.5 plt.plot(x , y 1) plt.plot(x , y 2) plt.show( )
Het regelnummer (line 9) en het type fout (ValueError) zijn van belang.
En nu is de fout verbeterd:
importnumpy as np
importmatplotlib.pyplot as plt x =np.arange(−5., 5.01, 0.01) y 1 =np.sin(x )
y 2 = 0.5 + 0.0 ∗ x plt.plot(x , y 1) plt.plot(x , y 2) plt.show( )
Er zijn ook andere mogelijkheden om de fout te verbeteren.
Tips
Kleine fouten:
vergeten accolades, haakjes (let op de syntax kleur van de editor),
kijk of niet vergeten is een dubbel ‘is’-teken te gebruiken.
Accolades en haakjes: controleer de regel voor de foutmelding. Is die goed be¨eindigd?
Gebruik print opdrachten om in te zoomen op typefout.
Controleer de waarden van variabelen in de ‘shell’.
Spyder optie: interactie met ‘Shell’ na het ‘runnen’ van een programma
Type foutmeldingen
“Syntax fout”
Er zit een fout of fouten in de programmeercode.
“Runtime fout”
De “Runtime” is de tijd tussen het starten van een programma en het be¨eindigen van het programma . De melding “Runtime Error” zegt dus dat er iets fout is gelopen tijdens het werken van het programma.
“Logische fout”
De gedachtengang die ten grondslag ligt aan het programma is niet goed of niet goed geprogrammeerd waardoor er ongewenste resultaten worden verkregen.
Dergelijke fouten zijn soms moeilijk te vinden.
Object geori¨ enteerd programmeren (OOP)
Voorbeeld
(Pygame ge¨ımporteerd als pg)
Klasse (Class) Rect
Object shiprect = pg.Rect(x , y , w , h) Leden (Members) = data shiprect.centerx = 300
shiprect.centery = 300 Methode (method) = functies shiprect.move(dx , dy )
Voorbeeld (Python)
Klasse (Class) str
Object txt = ”TEST”
Methoden (methods) = functie txt.lower( )
Structuur van een klasse def . . . .
| {z }
naam klasse
:
declaraties
def init (self,. . . , . . . , . . . , . . . , . . . , . . .
| {z }
invoervariabelen
)
self. . . .
| {z }
naam lid
= . . . .
| {z }
variabele of waarde
self. . . .
| {z }
naam lid
= . . . .
| {z }
variabele of waarde
def . . . .
| {z }
naam methode
(self, . . . , . . . , . . .
| {z }
invoervariabelen
) of
def . . . (self)
Voorbeelden
vb-1, een klasse met betrekking tot werknemers vb-2, een regen van ballen
Opmerkingen
init heet de constructor en del heet de destructor van de klasse
De naam van een klasse begint vaak met een hoofdletter (Rect of Button bijvoorbeeld)
Een object heet een instantie (“instance”) van een klasse
Object geori¨enteerd programmeren is geen tentamenstof!!!
Wel moet een programma dat zo geschreven is gelezen en be- grepen kunnen worden.
(On-)veranderlijk
‘Integers’, ‘floats’,‘strings’ en ‘tuples’ zijn onveranderlijk (‘immutable’)
‘Lijsten’ en ‘objecten’ zijn veranderlijk (’mutable’) (het adres in het geheugen blijft behouden wanneer een wijziging wordt aangebracht)
vb-xhtml Pas op!
Tip: maak testprogramma’s op de volgende website:
http://www.pythontutor.com
(On-)veranderlijk
Opgave over het breken van een code
Ga door met de opdracht over de bisecrtiemethode/Project Euler
Bespreken diagnostische toets