Basiselementen

Een programma is een reeks instructies die specificeren hoe een bewerking gedaan moet worden. Zo’n bewerking kan wiskundig zijn, zoals het oplossen van een stelsel vergelijkingen, of het vinden van de nulpunten van een polynoom. Maar het kan ook om een symbolische bewerking gaan, zoals het zoeken en vervangen van tekst in een document.

Hoewel de details verschillen, is er een beperkt aantal instructies dat in feite voorkomt in elke programmeertaal:

gegevensinvoer (input)
Verkrijgen van gegevens van het toetsenbord, uit een bestand of bijvoorbeeld via het internet.
gegevensuitvoer (output)
Laten zien van gegevens op het scherm, wegschrijven naar een databestand of op een andere manier.
berekeningen
Uitvoeren van basale wiskundige bewerkingen zoals optellen en vermeningvuldigen.
voorwaardelijke actie (conditional execution)
Controleren of aan een voorwaarde voldaan wordt en afhankelijk daarvan de juiste code uitvoeren.
herhaling (repetition)
Een actie herhaaldelijk verrichten, vaak met wat variatie.

En geloof het of niet, maar dat is zo’n beetje alles wat je nodig hebt. Elk programma dat je ooit gebruikt hebt op de computer, hoe ingewikkeld ook, bestaat in de basis uit instructies van deze soort. Programmeren kun je zien als het opdelen van een grote, complexe taak in steeds kleinere subtaakjes, tot je een programma kunt implementeren in een programmeertaal, opgebouwd uit bovenstaande vijf elementen.

Hieronder vind je enkele van deze elementen zoals je ze in Python kunt terugvinden. De oplossing voor de eerste opdracht kun je straks met behulp van deze elementen implementeren.

Printen

Als je een programma hebt geschreven kun je het uitvoeren (runnen). De computer loopt dan stap voor stap door je programma en voert de instructies uit die op elke regel staan.

Maak tekstbestand module1.py (weet je nog hoe?) en zet er de volgende regels in:

print "Hallo, wereld!"
print "Hee, hallo daar."
print "Zo tikt het lekker door."
print "Grappig"
print 'Hee, print dit nog?'
print "Ivo's computer doet het vandaag niet."
print 'Hij zei: "Hallo."'

Oefenen doe je in deze cursus door elk voorbeeld letterlijk over te tikken. Gebruik niet de copy-paste functie, want dan maak je geen fouten en dan leer je veel minder. Tik dus alle voorbeelden over en verbeter ze als je een foutmelding krijgt!

Start nu het programma door in de Terminal in te geven:

python module1.py

Wat komt er uit? Heb je nog tikfouten gemaakt? En heb je gezien dat de aanhalingstekens soms verschillen? Je moet de reeks letters achter print starten en eindigen met aanhalingstekens (enkele of dubbele). Zo’n reeks noemen we een string.

We kunnen ook meerdere waarden op één regel printen. Standaard voegt het print-commando een ENTER toe aan de tekst, zodat de volgende print op een nieuwe regel doorgaat. Je kunt ook zorgen dat deze ENTER weggelaten wordt:

print "De temperatuur is",
print 8,
print "graden"

Daarmee wordt de hele boodschap keurig op één regel geprint. Probeer vooral uit!

Berekeningen

Voeg vervolgens ook nog de volgende regels toe:

print 1
print 1 + 1
print 1 + 1 + 1
print 3 + 2
print 8
print 5 + 8 + 8 - 8
print "5 + 8 + 8 - 8"

Je kunt dus ook rekenen. Het resultaat van de berekening wordt naar het scherm geprint. Behalve die laatste dan: daar staat de formule (expressie) tussen aanhalingstekens. Net als hierboven bij de tekstjes. Dat is dus een string en geen formule die berekend kan worden.

Krijg je een foutmelding als je je programma uitvoert? Dan is de kans groot dat je een tikfout hebt gemaakt waardoor Python niet meer begrijpt wat de bedoeling is. Kijk goed waar je de fout hebt gemaakt en probeer deze op te lossen. Kom je er niet uit, vraag dan vooral om hulp. Foutmeldingen leren begrijpen is een belangrijk onderdeel van deze cursus. Dat is ook waarom we heel graag willen dat je tijdens het oefenen fouten maakt!

Operators

Hieronder vind je een lijstje van operators die je kunt gebruiken om formules samen te stellen.

operator uitleg
1 + 2 optellen
2 - 1 aftrekken
1 * 2 vermenigvuldigen
2 / 1 delen
2 % 1 modulus (rest bij deling)
2 ** 1 machtsverheffen

Let op: als je twee gehele getallen deelt met de /-operator, zal er altijd een geheel getal uitkomen. Dan is 3/2 dus niet 1.5, maar 1. Dat is waarom de %-operator er mooi bijpast; die geeft de “rest”.

Variabelen

Een waarde is een van de basale onderdelen in een programma. In de voorbeelden hierboven heb je bijvoorbeeld al reeksen letters en ook cijfers gezien. Tot nu toe zijn we alleen bezig geweest met constante waarden, die bij het schrijven van het programma al uitgespeld worden (in het bovenstaande geval ging het bijvoorbeeld om een tekstje "Hello, world!"). Maar als we bij het programmeren al weten wat het antwoord wordt, dan hebben we natuurlijk eigenlijk geen computer nodig! Laten we dus doen waar computers goed in zijn: rekenen.

Om resultaten van berekeningen te kunnen gebruiken in andere berekeningen, moeten we deze tijdelijk op zien te slaan. Als oplossing laat Python je namen toekennen aan waardes. Deze naam-waarde combinaties noemen we variabelen. Door middel van de = operator kunnen we een naam toekennen aan een waarde, en deze vervolgens ergens anders gebruiken. Hier is bijvoorbeeld een programma waar drie keer een = wordt gebruikt om een naam aan een waarde te koppelen:

inkomen = 230
uitgave = 170
winst = inkomen - uitgave
print winst

Op de derde regel wordt de nieuwe naam winst zelfs gekoppeld aan het resultaat van een berekening. Een berekening op basis van eerder gedefinieerde namen. Het is hierbij belangrijk om te letten op de volgorde van de regels code. Python interpreteert jouw code van boven naar beneden. Als je de laatste regel als eerste zou neerzetten, dan ziet het er zo uit:

print winst
inkomen = 230
uitgave = 170
winst = inkomen - uitgave

Nu krijg je een NameError zodra je het programma uitvoert. Want de naam winst is nog niet bekend (defined) op regel 1; die wordt pas bekend gemaakt op regel 4.

Ten slotte kun je een oude naam ook een nieuwe waarde geven:

inkomen = 170
inkomen = inkomen - 10
print inkomen

In feite verander je dus op regel 2 van dit voorbeeld inkomen door er 10 van af te trekken. Dat resultaat is dan ook zichtbaar als je het programma uitvoert.

Types

Er zijn verschillende soorten waardes in Python; we noemen dat een type. In de tabel zie je drie belangrijke types:

voorbeeld type  
'Hello, World!' str een reeks letters: een string
'3.2' str wederom een string, want er staan aanhalingstekens
17 int een geheel getal: een integer
3.2 float een kommagetal: een float, een floating point number

Je kunt waarden ook converteren van het ene naar het andere type. Gebruik bijvoorbeeld int() om een waarde naar een integer om te zetten. Tenminste, als het kan, want anders wordt er geklaagd:

conversie resultaat
print int('32') 32
print int('Hello') ValueError: invalid literal for int(): Hello
print int(3.99999) 3 (let op! geen error, maar er gaat wel informatie verloren)
print int(-2.3) -2
print float(32) 32.0
print float('3.14159') 3.14159
print str(32) '32'
print str(3.14159) '3.14159'

Is het trouwens opgevallen dat kommagetallen op z’n Amerikaans worden geschreven? Met een punt dus! Dit is in vrijwel alle programmeertalen het geval.

Invoer door een gebruiker

Behalve printen naar een gebruiker van jouw programma, kun je ook om invoer van een gebruiker vragen. Zo kun je interactieve programma’s schrijven die op basis van gebruikersinvoer berekeningen doen. In Python zijn er verschillende functies om om invoer te vragen. Eén daarvan is raw_input(), en deze gebruik je zoals hieronder:

voornaam = raw_input("Geef je voornaam: ")
print "Hallo,", voornaam

De string "Geef je voornaam: " die achter de functie raw_input staat, zorgt dat meteen een bericht op het scherm wordt geprint. Dan wacht raw_input totdat de gebruiker iets invult en op enter drukt. Wat de gebruiker heeft ingevuld krijgt nu een naam. In het voorbeeld hierboven wordt de invoer aan de naam voornaam gekoppeld. Op de volgende regel wordt de waarde van voornaam weer uitgeprint.

Nu komt uit raw_input altijd een string. Maar soms wil je natuurlijk dat de gebruiker een getal invoert om daar een berekening mee te doen. Dan kun je de conversie-functies van hierboven gebruiken. Bijvoorbeeld:

aantal_stoelen = raw_input("Hoeveel stoelen moeten gereserveerd worden? ")
aantal_stoelen = int(aantal_stoelen)

Commentaar

Als je in één bestand redelijk wat Python-code hebt geschreven, dan is het handig om duidelijk te maken wat waar staat (voor de lezer van de code zelf, niet voor de gebruiker van het programma). Daarom kun je regels commentaar toevoegen in je code. Die zien er zo uit:

# berekening
x = x + 1

of

# uitvoer
print x

Met zo’n hekje (#) laat je zien dat het geen instructie betreft, maar een stukje tekst waar de computer niets mee hoeft te doen. Het is gebruikelijk om een regeltje commentaar te zetten boven het stuk code waar het naar verwijst.

Naast commentaar voor een stukje code is het ook handig om helemaal bovenaan een bestand duidelijk te vermelden waar het voor dient. Voor module1.py kun je denken aan het volgende:

# Oefeningen met Python module 1
# M. Stegeman
# 24-8-2016

Voeg nu commentaar toe aan je bestand. Maak steeds met een regeltje commentaar duidelijk wat de verschillende onderdelen van je bestand doen.