[7] Variabelen en constanten We gaan een eenvoudig programma schrijven waarbij we reclame maken voor CoderDojo Dendermonde. Volg mee via 07_VariabelenConstanten.py Dit is wat er moet verschijnen op het scherm op het einde van het programma: We verwachten je bij CoderDojo Dendermonde! De volgende sessie gaat door op zaterdag 4 april in de jeugddienst aan de achterkant van de bib (Dendermonde). We verwachten 36 kids van 7 tot 16 jaar (dat zijn 10 verschillende leeftijden!) Afspraak om 10 uur! Natuurlijk is dit een fluitje van een cent als we gewoon de 5 bovenstaande regels via een print-commando op het scherm laten verschijnen. Maar zo makkelijk gaan we ons er niet van af maken! Als we gewoon de 5 regeltjes tekst in een programma zouden steken, zouden we ons programma elke keer moeten aanpassen als er een nieuwe sessie is. Laten we even op zoek gaan naar de elementen in de tekst die mogelijk kunnen veranderen, en hoe waarschijnlijk het is dat ze veranderen: We verwachten je bij CoderDojo Dendermonde! De volgende sessie gaat door op zaterdag 4 april in de jeugddienst aan de achterkant van de bib (Dendermonde). We verwachten 36 kids van 7 tot 16 jaar (dat zijn 10 verschillende leeftijden!) Afspraak om 10 uur! Een aantal elementen is in het rood aangeduid. Dit zijn elementen waarvan we denken dat ze niet erg vaak gaan veranderen, maar het is wel mogelijk. De naam van de stad bijvoorbeeld (en die komt 2 keer voor), als we ons programma willen doorgeven aan een andere CoderDojo-organisatie. Of de locatie die is al een keer veranderd (we zaten vroeger in drukkerij Roose). En het aantal verschillende leeftijden dat aanwezig gaat zijn (alle leeftijden van 7 tot en met 16 jaar). En ook het beginuur gaat niet snel wijzigen, maar het kan wel. Het aantal verschillende leeftijden is in het blauw aangeduid, omdat dit een berekende waarde is: als de leeftijdsgrenzen wijzigen, moet deze waarde ook mee wijzigen. Een aantal elementen is in het groen aangeduid. Dit zijn de elementen waarvan we denken dat ze veel sneller gaan wijzigen. Het aantal ingeschreven kinderen per sessie, en de datum van de volgende sessie. Deze waarden gaan we niet in onze programmacode opnemen, om te vermijden dat we elke maand ons programma moeten aanpassen. In de plaats daarvan gaan we die waarden vragen aan de gebruiker, voor we ons tekstje laten zien. We gaan in ons programma intensief gebruik maken van variabelen. Variabelen zijn een soort kleine doosjes waar we een waarde kunnen insteken, en die op elk moment weer kunnen uithalen. Let op, de naam die je kiest voor je variabele mag geen Python-commando zijn. Je mag je variabele dus niet bv. print noemen. Python [7] Variabelen en constanten versie 9/03/2015 1/5
Om een variabele te definiëren kiezen we een naam, en kennen we de waarde toe aan de variabele door er een = teken tussen te zetten. Zo dus: naam = 'Bart' Voeren we even daarna volgende regel uit: print('hallo', naam) dan verschijnt op ons scherm: Hallo Bart De variabele naam is tijdens de uitvoering van het programma dus vervangen door zijn inhoud, zijnde Bart. De inhoud van een variabele kan overschreven worden. Bekijk volgende code: naam = 'Jan' naam = 'Lotte' print('hoi', naam) Wat zal er verschijnen, denk je? Dit: Hoi Lotte De variabele naam werd eerst gevuld met de inhoud Jan, en werd direct daarna overschreven met Lotte. Enkel de laatste naam blijft bewaard in de variabele. Soms willen we niet dat de inhoud van een variabele kan overschreven worden in de programmacode. Als we bv. een variabele PI definiëren: PI = 3.14159265358979 dan is het niet de bedoeling dat PI in de loop van het programma wordt vervangen door een ander getal. PI is dus eigenlijk geen variabele maar een constante. Let er trouwens op dat we in Python komma-getallen met een punt schrijven. Dus: 3.14, niet 3,14. Andere programmeertalen hebben manieren om constanten te definiëren, zodat ze nooit meer kunnen overschreven worden. Python heeft dat jammer genoeg niet. Het is dus niet mogelijk om in Python een variabele te definiëren die niet meer kan overschreven worden. Opletten is dus de boodschap. Om visueel duidelijk te maken wat er een variabele is en wat er een constante is, is het een goede gewoonte om namen van constanten in HOOFDLETTERS te schrijven. Dat is geen verplichting, en dat verandert niets aan de manier van werken, maar het is een goede gewoonte waarmee we duidelijk maken dat een bepaalde variabele nooit zal / mag veranderen. Python [7] Variabelen en constanten versie 9/03/2015 2/5
Goed! Terug naar ons programma om reclame te maken voor CoderDojo. We bepalen nu welke variabelen we gaan gebruiken, en of ze constant gaan zijn (en we ze dus in hoofdletters schrijven), of ze variabel gaan zijn, of als het berekende waarden zijn. volgendedatum aantalkinderen STAD_NAAM LOCATIE MIN_LEEFTIJD MAX_LEEFTIJD STARTUUR aantalleeftijden We beginnen ons programma met het definiëren van onze constanten STAD_NAAM = 'Dendermonde' LOCATIE = 'de jeugddienst aan de achterkant van de bib' MIN_LEEFTIJD = 7 MAX_LEEFTIJD = 16 STARTUUR = 10 Nu we de minimum leeftijd en de maximum leeftijd kennen, kunnen we het aantal leeftijden berekenen. Dat is de maximum leeftijd min de minimum leeftijd, en dan doen we daar eentje bij. aantalleeftijden = MAX_LEEFTIJD - MIN_LEEFTIJD + 1 Tenslotte moeten we nog een aantal dingen vragen aan onze gebruiker van ons programma. Dat doen we met het input-commando: volgendedatum = input('geef de volgende datum in: ') aantalkinderen = input('hoeveel kinderen zijn er ingeschreven voor de volgende sessie? ') Het programma zal nu even stoppen om te vragen wat de volgende datum is en hoeveel kinderen er ingeschreven zijn. Belangrijke opmerking: Je mag de schrijfwijze van je variabele-namen volledig zelf kiezen, maar eens je iets gekozen hebt, moet je je er wel aan houden. Hoofdletters doen er toe in Python! Als we dus aantalkinderen bepaald hebben als variabele, dan is dat iets anders dan AantalKinderen, of aantalkinderen, of AANTALKINDEREN. Nu we alle variabelen hebben, is het tijd om de tekst weer te geven. Dat kunnen we bv. doen door in een print-commando de tekst op te knippen in verschillende stukken, en met komma s de tekst-fragmenten en de variabelen aan elkaar te plakken. print('we verwachten je bij CoderDojo', STAD_NAAM, '! ') print('de volgende sessie gaat door op zaterdag', volgendedatum, 'in', LOCATIE, '(', STAD_NAAM, ').') print('we verwachten', aantalkinderen, 'kids van', MIN_LEEFTIJD, 'tot', MAX_LEEFTIJD, 'jaar (dat zijn', aantalleeftijden, 'verschillende leeftijden!)') print('afspraak om', STARTUUR, 'uur!') Python [7] Variabelen en constanten versie 9/03/2015 3/5
Ons programma is klaar om uit te voeren. En? Werkt alles? En probeer nu eens de variabelen te veranderen, en voer het programma dan opnieuw uit. Als je het lastig vindt om je tekst op te delen in stukken, bestaat er nog een andere manier om variabelen op te nemen in een tekst. Het bovenstaande stuk code kunnen we ook zo schrijven: print('''we verwachten je bij CoderDojo %s! De volgende sessie gaat door op %s in %s (%s). We verwachten %s kids van %s tot %s jaar (dat zijn %s verschillende leeftijden!) Afspraak om %s uur!''' % (STAD_NAAM, volgendedatum, LOCATIE, STAD_NAAM, aantalkinderen, MIN_LEEFTIJD, MAX_LEEFTIJD, aantalleeftijden, STARTUUR)) Hierbij hebben we 2 nieuwe dingen gedaan: We hebben slechts één print-commando gebruikt, in plaats van een commando voor elke regel. Om een lang stuk tekst te maken van meerdere regels laat je de tekst beginnen en eindigen met 3 enkele quotes ('''). Het tweede wat we gedaan hebben, is plaatshouders voorzien voor waar de variabelen moeten komen. Dit doen we door de %s notatie. Overal waar een %s staat, moet er een variabele komen. De variabelen worden achteraf toegevoegd door na de string een %-teken te zetten en vervolgens alle variabelen op te lijsten tussen haakjes. Om dat laatste beter te snappen krijg je hier nog een eenvoudiger voorbeeld: print('mijn naam is %s en ik ben %s jaar. ' % (naam, leeftijd)) Als je deze code uitvoert krijg je bv.: Mijn naam is Bert en ik ben 11 jaar. Lege variabelen: None Soms willen we een variabele initialiseren. Dat wil zeggen dat we er in ons programma voor zorgen dat een variabele bestaat, zodat we later in het programma de variabele bijvoorbeeld in een vergelijking kunnen gebruiken. Als we een variabele maken in Python, moeten we aan Python vertellen wat de inhoud van die variabele is. Maar soms willen we dat onze variabele voorlopig nog een leeg doosje is. We bepalen dus nog geen waarde. Soms is het niet moeilijk om te bedenken welke waarde we er dan moeten aan geven. Als we bv. weten dat onze variabele een tekst wordt, kunnen we een lege tekst in de variabele steken. Dat doen we door de variabele gelijk te stellen aan '' (= 2 quote-tekentjes). Of een leeg getal kunnen we gelijk stellen aan 0. Maar wat nu als we echt nog totaal geen idee hebben van de soort waarde die in onze variabele gaat terecht komen? Dan kunnen we het speciale Python-keyword None gebruiken. Dan maakt Python echt een volledig lege variabele aan, waar nog niets van inhoud in zit. Python [7] Variabelen en constanten versie 9/03/2015 4/5
Enkele voorbeelden: leeggetal = 0 legetekst = '' legevariabele = None Er zit nog veel meer in variabelen Wat je op deze leerfiche geleerd hebt is nog maar het topje van de ijsberg als het op variabelen aankomt. Variabelen worden pas echt interessant als ze dynamisch berekend worden (bv. het aantal dagen tussen vandaag en de volgende CoderDojo-sessie) en als we er complexe bewerkingen mee doen. Of als we beslissingen laten afhangen van de inhoud van variabelen ( Als de leeftijd kleiner is dan 11, doe dan ). Wat nog ontbreekt in ons programma is invoervalidatie (input validation). Daarbij controleren we in ons programma of de gebruiker wel de juiste soort gegevens invoert. Als we de datum vragen kan je nu perfect varkentjesdag invullen en als het aantal kinderen gevraagd wordt kan je veel te veel invullen. Je programma zal werken en een grappige tekst tonen, maar een goede programmeur houdt dat soort verkeerde invoer tegen. Maar eerst moet je iets over types leren. En daar gaat de volgende leerfiche over. Invoervalidatie komt aan bod in leerfiche [17] Fouten vinden en oplossen. Oefening Maak je eigen programma waarbij je de computer een aantal variabelen laat vragen, zoals naam, leeftijd, favoriete kleur, favoriete boek, favoriete film, favoriete game, huisdier, en brouw er dan een tekstje mee, bijvoorbeeld: Dag Arne, wat leuk dat je er bent! Ben jij al 11 jaar? Tof! Je favoriete film is Despicable Me! Waaw, die vind ik ook tof. En ik speel ook heel graag Minecraft. Daaag! Python [7] Variabelen en constanten versie 9/03/2015 5/5