Savvy - handboek hoofdstuk 1 en 5 - inkijk methode

Page 1


Savvy

informatica wetenschappen

INKIJKEXEMPLAARDIEKEURE

Inleiding

INKIJKEXEMPLAARDIEKEURE

We leven in een digitale wereld. Alles om ons heen wordt meer en meer aangestuurd, geregeld en bepaald door computers. Daarom is kennis over de werking van deze digitale wereld noodzakelijk. We noemen dat het domein van de informaticawetenschappen.

Informaticawetenschappen1 is de wetenschappelijke discipline die de basis vormt voor het ontwerpen van computers, het programmeren van computers, het verwerken van informatie, het algoritmisch oplossen van problemen, het analyseren en begrijpen van algoritmische processen en het bestuderen van de daarmee verbonden socio-technische vraagstukken. Daarmee verschaft de discipline wetenschappelijke fundamenten voor de ICT applicaties van vandaag en morgen.

Het fundamentele, centrale concept van informaticawetenschappen is het algoritme. Een algoritme is een stappenplan dat aangeeft welke beslissingen je moet nemen en welke handelingen je moet uitvoeren. Als je het stappenplan precies volgt, kom je altijd tot de juiste oplossing of voltooi je de taak goed.

Dit boek handelt over het maken van algoritmen. Je vertrekt van de basis en duikt onder in de boeiende wereld van algoritmen. Je leert dat er geen één-op-één relatie is tussen een probleem en een algoritme. Eenzelfde probleem kan door meerdere algoritmen opgelost worden. Afhankelijk van de situatie is soms het ene algoritme meer aangewezen dan het andere.

Een voorstelling van een algoritme in een programmeertaal, zodat het door een computer kan worden uitgevoerd, is een programma. Programma’s ontwerpen, implementeren en verbeteren, noemen we programmeren. Je gaat je algoritmen omzetten in programma’s zodat je kan testen of je denkwijze een juiste oplossing voor het gestelde probleem oplevert. In deze uitgave is er gekozen voor Python als programmeertaal.

Om inzicht te krijgen in de opbouw en werking van algoritmen is het noodzakelijk dat je vanaf het begin zelf algoritmen en programma’s maakt. Enkel op deze manier verwerf je het denkproces dat je in staat stelt om complexere algoritmen te maken en te begrijpen. Alle oefeningen in dit boek zijn ook beschikbaar op Polpo in een digitale programmeeromgeving.

Waarom Savvy? Savvy staat voor slim, snugger, doordacht, inzichtelijk, technisch vaardigprecies wat je moet zijn (en zal worden!) om met algoritmen aan de slag te gaan. Savvy is je gids op weg naar meer inzicht en digitale scherpzinnigheid.

Veel plezier met dit boek.

1 KVAB, Samaey, G. & Van Remortel, J. (2014). Informaticawetenschappen in het leerplichtonderwijs. Standpunten 27

INKIJKEXEMPLAARDIEKEURE

Hoe gebruik je

Dit boek bevat 10 hoofdstukken.

Op het einde van elk hoofdstuk staan oefeningen om de aangeleerde kennis en technieken onder de knie te krijgen en in te oefenen.

Er zijn drie niveaus: gemakkelijk, gemiddeld en gevorderd. Elk hoofdstuk sluit aan op de leerstof uit de vorige hoofdstukken.

Definities en duiding vind je op een groene achtergrond.

Syntax vind je op een blauwe achtergrond.

De syntax is de grammatica van een programmeertaal. Hierbij gebruiken we volgende afspraken:

> woord ::= hierna volgt een verklaring van de betekenis van het woord dat ervoor staat.

> <getal> op de plaats van <getal> plaats je iets dat een getal oplevert.

> {<letter>} nul, één of meerdere letters.

> een|twee je hebt de keuze, je kan “een” of “twee” gebruiken.

> [ … ] hetgeen tussen [] staat is optioneel. Je kan het gebruiken maar je moet het niet gebruiken.

Voorbeeld syntax:

print({<expressie>}[, sep = <seperator>][, end = <end>])

Voorbeelden gebruik: instructie resultaat print()

Je krijgt een lege regel. print(“een wistjedatje”) een wistjedatje

print(5, “maart”, 2026) 5 maart 2026

print(5, “maart”, “2026, sep = “+”)5+maart+2026

Savvy?

INKIJKEXEMPLAARDIEKEURE

In Savvy maak je algoritmen met datastructuren, algoritmische technieken en numerieke methodes. Je gebruikt daarvoor softwarebibliotheken. Vaak haal je de gegevens uit bestanden of schrijf je ze weg naar bestanden. Met deze pictogrammen maken we duidelijk wat aan bod komt in een hoofdstuk:

Datastructuur

Algoritmische techniek

Numerieke methode

Softwarebiblitoheek

Externe gegevensbron

In elk hoofdstuk wordt een gestructureerde programmeertaal gebruikt en een systematiek gehanteerd bij het ontwerpen van de oplossingen voor de concrete problemen.

Interpreteer en experimenteer

Regelmatig komt deze titel aan bod. Onder deze titel staan een aantal taken om uit te voeren. Vaak wordt gevraagd om een programma te lezen en de uitvoer te achterhalen of aan te passen. Het is belangrijk dat je deze opdrachten zorgvuldig en aandachtig uitvoert, want ze vormen een goede basis voor de rest van het hoofdstuk.

bijlage

In bijlage 1, achteraan in dit boek, staat uitgelegd hoe je de ontwikkelomgeving voor Python, Thonny, installeert en gebruikt.

In bijlage 2 vind je een overzicht van de meest voorkomende foutmeldingen bij het debuggen van een programma.

Inhoud

1 2 3 4 5

Debouwstenen DeselectieAllemaalfunctiesDeherhaling

Werkenmetexterne bestanden pagina9 pagina25 pagina42 pagina56 pagina86

INKIJKEXEMPLAARDIEKEURE

INKIJKEXEMPLAARDIEKEURE

6 7 8 9 10

DerecursieZoekenensorteren

MatricesGrafiekentekenenNumeriekemethodes pagina107 pagina120 pagina137 pagina149 pagina163

1 INKIJKEXEMPLAARDIEKEURE

1

De bouwstenen INKIJKEXEMPLAARDIEKEURE

Inhoudstafel

1 INKIJKEXEMPLAARDIEKEURE

1.1 Waarom Python?

Er bestaan heel wat verschillende soorten programmeertalen. In dit boek leer je programmeren in Python. Python is gemakkelijk (en zelfs leuk!) om te leren. In plaats van je in strikte syntaxisregels te storten, leest Python als Engels en is het eenvoudig te begrijpen voor iemand die nieuw is in programmeren.

In de programma’s worden vooral standaard programmeerstructuren gebruikt. Python biedt soms andere mogelijkheden, maar daar kiezen we in dit leerboek bewust niet voor, zodat je gemakkelijk naar een andere programmeertaal kan overschakelen.

Interpreteer en experimenteer

Taak

1 Lees onderstaande programma’s.

2 Wat denk je dat er gebeurt? Wat denk je dat de uitvoer is?

3 Open de programma’s in Thonny, voer ze uit en controleer of je veronderstelling juist is.

Open Begroeting1.py

print("goeiemorgen")

Open Begroeting2.py print("goeiemorgen") print("morgen")

Open Begroeting3.py

print("goeiemorgen", "morgen", "goeiedag")

Open Begroeting4.py

naam = input("Geef een naam in. ") print("goeiemorgen", naam)

Taak

1 Pas Begroeting4.py aan zodat de output wordt:

>>> %Run begroeting5.py

Geef een naam in. Piet goeiemorgen goeiemorgen Piet

2 Bewaar het programma als Begroeting5.py

Taak

1 Open Begroeting6.py en Begroeting7.py.

2 Voer beide programma’s uit. Welk programma zou je gebruiken voor een chatbot?

Begroeting6.py

INKIJKEXEMPLAARDIEKEURE

print("goeiemorgen Piet")

Begroeting7.py

naam = input("Met wie heb ik de eer?") print("Dag", naam)

1.2 Uitvoer

Als je tekst wilt laten verschijnen op het scherm, dan gebruik je de functie print(). We weten dat print een functie is door de haakjes die erachter staan. Tussen de haakjes schrijf je de tekst die je wilt laten verschijnen op het scherm. Deze tekst staat tussen aanhalingstekens (“” of ‘’). Deze geven het begin en het einde van de tekst aan.

print({<tekst>}) tekst ::= sliert van tekens tussen aanhalingstekens.

Aandachtspunten:

> Na het uitvoeren van de print-functie volgt een Enter

> Meerdere teksten worden gescheiden door een komma. De komma wordt in de uitvoer vervangen door een spatie.

Afspraak:

We gebruiken in dit boek “ ” en geen ‘ ’.

Voorbeelden:

instructie resultaat

print(“2-FYS-212”) 2-FYS-212 print(“een”, “twee”) een twee print(“een”, “twee”, “drie”, “vier”) print(“hoedje van papier”)

een twee drie vier hoedje van papier

1.3

Variabelen

Een programma schrijf je niet voor één reeks waarden. Je wilt dat je programma breed toepasbaar is. Daarom verkiezen we Begroeting7.py boven Begroeting6.py. Iedereen die contact legt met de chatbot, wordt persoonlijk aangesproken. Je kan dit vergelijken met formules in een rekenblad, waarbij je celadressen invult in plaats van de waarden die in de cellen staan.

Wil je een probleem algemeen oplossen, gebruik dan variabelen om waarden in op te slaan. Naam in Begroeting7.py is een variabele.

Tijdens het verloop van een programma zal je ook waarden creëren die je tijdelijk moet opslaan om later te kunnen gebruiken. Gebruik ook hiervoor variabelen.

variabele ::= plaats in het geheugen met een naam waarin een waarde wordt bewaard. Je verwijst naar die plaats met de naam van de variabele.

Om een variabele aan te maken en een waarde te geven, gebruik je de toekenning

toekenning ::= <naam variabele> = <expressie>

INKIJKEXEMPLAARDIEKEURE

Noah variabele

naam = "Noah"

toekenning

naam variabele

waarde variabele

De eerste keer dat je in je programma een waarde toekent aan een specifieke variabele naam, wordt de bijhorende variabele gecreëerd. Als je later een andere waarde aan dezelfde variabele toekent, wordt de eerste waarde overschreven, de oorspronkelijke waarde geraakt verloren. In de metafoor van de doos: je maakt de doos leeg en stopt er iets nieuws in, de doos kan maar één inhoud bevatten. Een variabele bevat altijd de laatst verkregen waarde.

Je kan aan een variabele een waarde toekennen of het resultaat van een berekening. Zo een berekening noemen we een expressie.

expressie ::= een combinatie van één of meerdere waarden, variabelen en functies gescheiden door operatoren die als resultaat één waarde oplevert.

naam

Voorbeelden:

naam variabele waarde toekenning

weekdag donderdag

breedte 5

btw 0.21

getal1 10

getal2 7

som 17

Aandachtspunten:

weekdag = “donderdag”

breedte = 5

btw = 0.21

getal1 = 10

getal2 = 7

som = getal1 + getal2

INKIJKEXEMPLAARDIEKEURE

> Variabelen moeten geïnitialiseerd zijn voor je ze kan gebruiken.

>>> som = 0

> Onderstaande expressie geeft een foutmelding (NameError) als de variabele som niet werd geïnitialiseerd.

>>> som = som + 1

initialiseren van een variabele ::= een startwaarde toekennen aan de variabele.

Afspraken:

> Geef betekenisvolle namen aan variabelen. Een uitzondering hierop zijn wegwerpvariabelen. Dit zijn variabelen die slechts in een klein deel van de code gebruikt worden en daarna niet meer, bijvoorbeeld als teller.

> Gebruik enkel kleine letters in de naam van een variabele, geen hoofdletters.

> Een naam van een variabele bevat geen spaties.

> Een naam van een variabele begint met een letter

> Als je een naam voor een variabele wilt maken die uit meerdere woorden bestaat, gebruik dan het onderstrepingsteken (underscore) om de woorden te scheiden, bijvoorbeeld: beginwaarde_loon, straat_nr.

> Gebruik geen gereserveerde woorden als naam voor variabelen, dit zijn woorden met een speciale betekenis voor Python. Zie hieronder:

False

None

True and as assert break class continue def del elif else except finally for from global if import in is lambda nonlocal not or pass raise return try while with yield

Interpreteer en experimenteer

Taak

1 Open Som1.py

2 Voer het programma uit. Kan je uitleggen wat er aan de hand is?

getal1 = input("Geef een getal in.") getal2 = input("Geef een getal in.") som = getal1 + getal2 print("De som is", som)

1.4

Datatypes: integer, float en string

Er bestaan verschillende soorten waarden, bijvoorbeeld een getal of tekst. Als je voor de eerste keer een waarde aan een variabele toekent, dan maak je de variabele aan en geef je die ook een (data)type. Het type wordt bepaald door de waarde die je erin plaatst. Wat je kan doen met de variabele is afhankelijk van het type.

type

integer (int)

float

string (str)

Afspraak:

betekenis

Dit is een geheel getal, een getal zonder cijfers na de komma dat positief, negatief of nul kan zijn.

voorbeelden

INKIJKEXEMPLAARDIEKEURE

1000 -5

0

Dit is een reëel getal, m.a.w. een decimaal getal. Als decimaal teken wordt een punt gebruikt. 5.0 3.658 -153.26

Dit is tekst die bestaat uit geen of meerdere tekens, omsloten door dubbele of enkele aanhalingstekens. “ ” “Hallo” “9000”

We gebruiken steeds dubbele aanhalingstekens om een string aan te duiden.

Een betere definitie van een variabele is:

variabele ::= plaats in het geheugen met een naam waarin een waarde van een bepaald type wordt bewaard. Je verwijst naar die plaats met de naam van de variabele.

Aandachtspunt:

Een variabele krijgt het type van de waarde die je eraan toekent. Dit noemt “soft typing”. Plaats je een waarde van een ander type in de variabele, dan zal het type van deze variabele veranderen. Dit proberen we uiteraard te vermijden, behalve bij standaardaanpassingen die zich voordoen bij het delen van twee integers. Het resultaat is dan van het type float. In de volgende instructies krijgt de variabele “getal” telkens een ander type.

instructie type variabele “getal” getal = “twee” getal = 5 getal = getal / 2 string integer float

1.5 Rekenkundige

operatoren

Voor het uitvoeren van een berekening, heb je operatoren nodig. De betekenis van de operator en het soort operator is afhankelijk van het type van de variabele.

Met rekenkundige operatoren kan je bewerkingen op getallen uitvoeren. De rekenkundige operatoren staan in stijgende prioriteit:

INKIJKEXEMPLAARDIEKEURE

// quotiënt berekenen na een integer of gehele deling

% rest berekenen na een integer of gehele deling (= modulo of restberekening)

Haakjes in een expressie krijgen de hoogste prioriteit.

Als een getal van het type float in een expressie staat, dan heeft de waarde van de expressie ook het type float.

1.6 Invoer

De functie print() voor uitvoer ken je. Er bestaat een analoge functie om gegevens in te voeren:

<variabele>= input([<tekst>])Bij de uitvoering van het programma wordt een invoer van de gebruiker gevraagd. Hetgeen de gebruiker invoert wordt in de <variabele> opgeslagen. De <tekst> gebruik je om de gebruiker van het programma duidelijk te maken welke input je wilt. Het resultaat, de terugkeerwaarde van de functie input() is van het type string

Voorbeelden: invoer uitvoer naam = input("Met wie heb ik de eer?") Met wie heb ik de eer? |

1.7 De functie type()

type(<expressie>) geeft als resultaat het type van de waarde van de <expressie>.

Voorbeelden:

>>> type(5) <class ‘int’>

>>> type(6.2) <class ‘float’>

>>> type("Hallo") <class ‘str’>

>>> type(input("Geef een getal in."))

Geef een getal in. 5 <class 'str'>

INKIJKEXEMPLAARDIEKEURE

1.8 Typeconversie functies

Met de typeconversie functies kan je het type van een waarde wijzigen, indien dit mogelijk is.

int(<expressie>) De waarde van de <expressie> wordt, indien mogelijk, omgezet naar het type integer, anders verschijnt er een foutmelding.

float(<expressie>) De waarde van de <expressie> wordt, indien mogelijk, omgezet naar het type float, anders verschijnt er een foutmelding.

str(<expressie>) De waarde van de <expressie> wordt, indien mogelijk, omgezet naar het type string, anders verschijnt er een foutmelding.

Voorbeelden:

INKIJKEXEMPLAARDIEKEURE

int(“20.5”) foutmelding

int("20.5") geeft een foutmelding omdat wat tussen de aanhalingstekens staat een float is en geen integer.

Interpreteer en experimenteer

Taak

1 Open Som1.py

2 Pas het programma aan zodat het de som berekent van de ingevoerde getallen. Er worden gehele getallen ingevoerd.

3 Bewaar het programma als Som2.py

case-sensitive ::= de programmertaal Python is case-sensitive, m.a.w. er wordt een onderscheid gemaakt tussen hoofdletters en kleine letters.

1.9 De systematiek van het programmeren

Bij programmeren komt steeds dezelfde werkwijze terug:

> Probleemstelling

Dit is een duidelijke omschrijving van het concrete probleem.

Wat is het probleem? Welk resultaat wil je?

> Analyse

Je maakt een analyse van het probleem.

Wat heb je nodig om het probleem op te lossen?

> Algoritme

Je ontwerpt een algoritme om het probleem op te lossen en schrijft het uit aan de hand van bijvoorbeeld een pseudocode, een Nassi-Schneiderman diagram of een flowchart.

Kan je het probleem opsplitsen in deelproblemen?

> Programma

Je zet het algoritme om in de gekozen programmeertaal.

> Testen

Je controleert of je programma werkt door het te testen. Vooraf bepaal je enkele testwaarden zodat alle uitzonderingsgevallen in je programma getest worden.

INKIJKEXEMPLAARDIEKEURE

Gewonnen!

Probleemstelling

Je klas heeft deelgenomen aan een wedstrijd en gewonnen. Jullie krijgen een heleboel filmtickets om gratis naar de cinema te gaan. Maak een programma waarin berekend wordt hoeveel tickets elke leerling krijgt en hoeveel tickets er nog overblijven.

Analyse

Invoer

waarde type

aantal_lln_klas integer aantal_tickets integer

Verwerking

Wat moet je berekenen? Wat doet het programma?

> Hoeveel tickets krijgt elke leerling?

> Hoeveel tickets blijven er over?

Uitvoer

waarde type tickets_per_lln integer tickets_over integer

Algoritme

Voor het noteren van het algoritme gebruiken we een soort pseudocode. We noteren kort wat er moet gebeuren.

lees aantal_lln_klas

lees aantal_tickets bereken tickets_per_leerling met integer deling bereken tickets_over met restoperator schrijf tickets_per_lln schrijf tickets_over

Programma

# Bereken het aantal filmtickets per leerling en de overschot #

# Lees het aantal lln in de klas en het aantal gewonnen tickets in aantal_lln_klas = int(input("Hoeveel leerlingen zitten er in de klas? ")) aantal_tickets = int(input("Hoeveel filmtickets heb je gewonnen? "))

# Bereken het aantal tickets per lln en de overschot tickets_per_lln = aantal_tickets // aantal_lln_klas tickets_over = aantal_tickets % aantal_lln_klas

# Schrijf het aantal tickets per lln en de overschot uit print("Elke leerling krijgt", tickets_per_lln, "filmtickets.") print("Er blijven", tickets_over, "filmtickets over.")

Bewaar het programma onder de naam Filmtickets.py

Testen

Kies testwaarden zodat je wel en geen rest hebt. Bijvoorbeeld:

aantal_lln_klasaantal_tickets tickets_per_llntickets_over

20 40 2 0

20 50 2 10

INKIJKEXEMPLAARDIEKEURE

Maak er een gewoonte van om je programma te voorzien van commentaar. Zo wordt het programma leesbaarder voor anderen. Als je het programma later wilt aanpassen, zie je zelf ook wat de verschillende blokken programmacode doen. Een commentaarregel begint met ‘#’. Python negeert deze regel.

1.10 Oefeningen

Gemakkelijk

1 Je vader wil een rechthoekig stuk tuin afboorden en er een bloemenweide van maken. Om te bepalen hoeveel bloemenzaad en borderrand hij nodig heeft, moet hij de oppervlakte en omtrek van dat stuk gras weten. Maak een programma dat de omtrek en oppervlakte van een rechthoek berekent. Bepaal zelf wat moet worden ingegeven. Verzorg de uitvoer.

Bewaar het programma onder de naam Rechthoek.py.

INKIJKEXEMPLAARDIEKEURE

2 De bank geeft kasbonnen uit met een vaste rentevoet en een vaste looptijd met enkelvoudige intrest. Maak een programma voor de bank dat de intrest berekent die een kasbon opbrengt. De waarde van de kasbon, de rentevoet en de looptijd worden ingegeven.

Je kan de enkelvoudige intrest berekenen via de formule I = k · i · n met I = intrest, k = beginkapitaal, i = rentevoet (in de vorm 0,045) en n = looptijd in jaar.

Bewaar het programma onder de naam Intrest1.py

3 Je bent geboeid door Amerika en wilt er graag naartoe. Maar hoe warm is het er nu juist? In België wordt de temperatuur weergegeven in graden Celsius, in Amerika in graden Fahrenheit. Maak een programma dat een ingegeven temperatuur in graden Celsius (C) omzet in het equivalent in graden Fahrenheit (F).

formule: F = C · 9 / 5 + 32

Bewaar het programma onder de naam Fahrenheit1.py

4 Je vindt je oude spaarpot terug. Nu wil je graag weten hoeveel euro er precies in zit. Maak een programma dat een geheel aantal eurocenten omzet naar twee hoeveelheden: het aantal euro’s en de resterende eurocenten.

Bewaar het programma onder de naam Geld.py

5 De toegangsprijs voor Technopolis is:

> jongeren tussen 0 en 18 jaar: € 22

> volwassenen: € 27

> 65+: € 25,50

Maak een programma dat de aantallen per categorie opvraagt en berekent hoeveel de toegangsprijs is voor de groep.

Bewaar het programma onder de naam Technopolis.py.

Gemakkelijk

Gemiddeld

6 Maak een programma dat de inhoud en oppervlakte van een balk berekent. Bepaal zelf wat moet worden ingegeven. Verzorg de uitvoer.

Bewaar het programma onder de naam Balk.py

INKIJKEXEMPLAARDIEKEURE

7 In Amerika is de munteenheid de Amerikaanse dollar. Maak een programma waarmee je een ingevoerd bedrag in euro kan omrekenen naar Amerikaanse dollar. Zoek de wisselkoers op het internet. Je hoeft niet af te ronden. Het resultaat wordt als volgt weergegeven: “X EUR is gelijk aan Y USD” met X het bedrag in euro en Y het bedrag in dollar.

Bewaar het programma onder de naam Wissel1.py

8 Je gaat elke dag joggen. Je weet welke afstand je aflegt en hoelang je erover doet, maar hoe snel loop je nu eigenlijk? Als je een verplaatsing maakt, is de afgelegde weg afhankelijk van je snelheid en de tijd van je verplaatsing.

De formule is s = v · t met s = afstand, v = snelheid en t = tijd.

Maak een programma om te berekenen hoe snel je loopt. Geef het aantal km in dat je hebt gejogd en de tijd in minuten. Bereken je snelheid in km/u.

Bewaar het programma onder de naam Snelheid1.py

9 Maak een programma om de inhoud van twee getalvariabelen te wisselen. Maak gebruik van gehele getallen.

Bijvoorbeeld:

bij de start van het programma bij het einde van het programma getal1 7 getal1

Bewaar het programma onder de naam WisselVar.py.

10 Maak een programma om de oppervlakte van een driehoek te berekenen als de lengte van de drie zijden gekend zijn.

formule:

Bewaar het programma onder de naam Driehoek1.py

11 In een bedrijf dat stofzuigers verkoopt, wordt het loon van een vertegenwoordiger als volgt berekend: het bestaat uit een vast gedeelte van 958,36 EUR en een variabel gedeelte. Het variabel gedeelte bedraagt 8,25% van het omzetcijfer van deze vertegenwoordiger. Maak een programma om het loon te berekenen. Lees de naam van de vertegenwoordiger en het omzetcijfer in. Verwerk de naam en het loon in de uitvoer.

Bewaar het programma onder de naam Loon.py.

Gevorderd

12

De digitale tijdsaanduiding (bijvoorbeeld 10:51) is ingeburgerd. Ze wordt genoteerd als u:m met u = uren en m = minuten.

Maak een programma dat berekent hoeveel uren en minuten er tussen twee tijdstippen zitten. Voor de invoer geldt het volgende:

> De tijdstippen worden met een digitale tijdsaanduiding ingegeven;

> Je geeft voor beide tijdstippen apart de uren en minuten in;

> Het tweede tijdstip valt later dan het eerste tijdstip;

> Het tweede tijdstip valt in dezelfde dag als het eerste tijdstip.

Geef het uur van het eerste tijdstip in. 10

INKIJKEXEMPLAARDIEKEURE

vb.

Geef de minuten van het eerste tijdstip in. 50

Geef het uur van het tweede tijdstip in. 15

Geef de minuten van het tweede tijdstip in. 30

Tussen de twee tijdstippen zit 4 uren en 40 minuten.

Bewaar het programma onder de naam Tijd.py.

13 Een eeuw begint bij het jaar waarvan het jaartal eindigt op 00, bijvoorbeeld 2000. Het jaar 2000 is het eerste jaar van de 21ste eeuw. De 21ste eeuw duurt van 2000 tot en met 2099.

Maak een programma dat bepaalt tot welke eeuw een jaartal behoort.

Geef het jaartal in. 1900 jaartal: 1900 – eeuw: 20 vb.

Bewaar het programma onder de naam Eeuw.py

14

Maak een programma dat een ingegeven aantal seconden omrekent naar dagen, uren, minuten en overblijvende seconden.

Geef het aantal seconden in. 125200 125200 seconden = 1 dag(en), 10 uren, 46 minuten en 40 seconden vb.

Bewaar het programma onder de naam Seconden.py.

15 Maak een programma dat berekent op welke dag (maandag, dinsdag …) de n-de dag (1 <= n <= 365) van het jaar valt, als 1 januari (n = 1) op een donderdag valt. Je leest het dagnummer in en geeft als resultaat het nummer van de weekdag. Je gebruikt volgende afspraken:

INKIJKEXEMPLAARDIEKEURE

Maak een tabel voor de eerste 15 dagen en probeer het patroon (verband tussen invoer en uitvoer) te vinden. invoer (n) dag

Bewaar de oefening onder de naam Weekdag.py

5

INKIJKEXEMPLAARDIEKEURE

Werken met externe bestanden

Inhoudstafel

5.1         Soorten tekstbestanden

5.2         Openen en sluiten van bestanden .................................................................................................

5.3         Gebruiken van bestanden

5.4         Toekenningsoperatoren ........................................................................................................................................

5.5         Meer mogelijkheden in de functie print (uitbreiding)

5.6

5 INKIJKEXEMPLAARDIEKEURE

Interpreteer en experimenteer

Taak

1 Lees onderstaande programma’s.

2 Wat denk je dat er gebeurt? Wat denk je dat de uitvoer is?

3 Open in kladblok boodschappenlijst.txt en bekijk de inhoud van dit bestand.

4 Open de programma’s in Thonny, voer ze uit en controleer of je veronderstelling juist is.

Open Boodschappen2.py

with open("boodschappenlijst.txt","r") as fp: boodschappen = [] regel = fp.readline() while regel != "" : boodschappen = boodschappen + [regel] regel = fp.readline() for lijn in boodschappen: print(lijn)

Open Boodschappen3.py

with open("boodschappenlijst.txt","r") as fp: boodschappen = [] for regel in fp: boodschappen.append(regel) for lijn in boodschappen: print(lijn)

5 Is er een verschil in de uitvoer van Boodschappen2.py en Boodschappen3.py?

6 Typ in de shell print(boodschappen) en druk op Enter. Zie je het speciale teken dat is toegevoegd (een speciaal teken in Python begint met \)? Staat dit speciale teken overal?

Open Boodschappen4.py

with open(“boodschappenlijst.txt","r") as fp: boodschappen = [] for regel in fp: if "\n" in regel: boodschappen.append(regel[:-1]) else: boodschappen.append(regel) for lijn in boodschappen: print(lijn)

7 Wat is het verschil in de uitvoer van Boodschappen3.py en Boodschappen4.py?

Open Boodschappen5.py

with open("boodschappenlijst.txt","w") as fp: product = input("Welk product wil je op je boodschappenlijst plaatsen?

INKIJKEXEMPLAARDIEKEURE

Eindig met Enter. ") while product != "" : fp.write(product + "\n") product = input("Welk product wil je op je boodschappenlijst plaatsen? Eindig met Enter. ")

8 Open boodschappenlijst.txt en controleer de inhoud.

Open Boodschappen6.py

with open("boodschappenlijst.txt","a") as fp: product = input("Welk product wil je toevoegen aan je boodschappenlijst?

Eindig met Enter. ") while product != "" : fp.write(product + "\n") product = input("Welk product wil je toevoegen aan je boodschappenlijst? Eindig met Enter. ")

9 Open boodschappenlijst.txt en controleer de inhoud.

5.1 Soorten tekstbestanden

Om je programma te kunnen testen, moet je regelmatig hele reeksen gegevens invoeren. Dit telkens opnieuw ingeven, is niet efficiënt. Een praktische tip: maak een bestand aan met de waarden die je wilt invoeren. Je kan dan snel en zonder problemen telkens dezelfde waarden gebruiken om je programma te testen.

Aandachtspunt:

Zorg ervoor dat de bestanden die als input en output voor het programma worden gebruikt in dezelfde map staan als het programma zelf.

In dit boek beperken we ons tot tekstbestanden. Je leert twee soorten tekstbestanden gebruiken:

> Een eenvoudig tekstbestand met extensie .txt, gemaakt met kladblok, Notepad of TextEditor; > Een CSV-bestand (Comma Seperated Values). Dit type bestand heeft als extensie .csv. Het is een veelgebruikt bestandsformaat voor het opslaan van tabelgegevens. Je kan het maken van een willekeurig rekenblad, bijvoorbeeld een Excel-bestand. Open hiervoor het Excel-bestand en bewaar het opnieuw als CSVbestand. Kies voor CSV UTF-8 (door komma's gescheiden) (*.csv).

Als je een CSV-bestand opent in kladblok zie je dat elke rij uit je werkblad overeenkomt met een lijn in het tekstbestand. Tussen de verschillende waarden in een rij, m.a.w. de waarden in de kolommen, staat een puntkomma.

Een letter (of teken) dat je ingeeft, wordt in de computer bewaard als een reeks binaire cijfers. Om te weten welke combinatie van binaire cijfers overeenkomt met welk teken, wordt een codetabel gebruikt. De meest gekende codetabel is de ASCII-tabel. Tegenwoordig gebruikt men vaker de UNICODE-tabel, omdat daarin meer tekens kunnen worden voorgesteld.

Python gebruikt de systeemspecifieke “encoding”, m.a.w. de encoding die het besturingssysteem gebruikt. Meestal is er dus geen probleem bij het lezen of schrijven van bestanden. Als er echter speciale tekens in je tekst voorkomen (bijvoorbeeld diakritische tekens ë, î, é …) kan het zijn dat deze niet goed worden weergegeven. In dat geval geef je best de codetabel mee bij het openen of sluiten van een bestand. In de meeste gevallen werkt de codetabel UTF-8.

5.2 Openen en sluiten van bestanden

with open(<bestandsnaam>, <modus>[,encoding = <coderingstype>]) as <fp>: <opdrachtenblok>

waarbij <modus> de volgende waarden kan aannemen: r: het bestand <bestandsnaam> wordt geopend om erin te lezen, r = read w: het bestand <bestandsnaam> wordt geopend om erin te schrijven, w = write a: het bestand <bestandsnaam> wordt geopend om achteraan regels toe te voegen, a = append.

encoding: bepaalt welke codetabel wordt gebruikt; mogelijke waarden zijn “UTF-8”, “UTF-16” of “Latin-1”.

<fp> is een file handle. Deze gebruik je in het <opdrachtenblok> om het bestand te benaderen. Buiten het <opdrachtenblok> gekoppeld aan de with-opdracht bestaat <fp> niet en kan je het bestand niet benaderen. Het wordt gesloten bij het beëindigen van het <opdrachtenblok>

INKIJKEXEMPLAARDIEKEURE

Een handle of file handle is een variabele die toegang geeft tot het bestand. Deze variabele bevat een pointer die bijhoudt waar in het bestand je gebleven bent. Je kan de pointer een beetje vergelijken met een vinger. Kinderen die leren lezen gebruiken vaak hun vinger om de plaats waar ze gebleven zijn in een tekst aan te wijzen. Dit is wat een pointer doet, hij wijst naar de positie waar je gebleven bent bij het lezen of schrijven van het bestand.

Aandachtspunten:

> Bij het openen van het bestand wordt een handle of file handle gecreëerd.

> Het bestand dat je opent, staat best in dezelfde map als het programma dat het bestand gebruikt. Staat het in een andere map, dan moet je het pad naar dit bestand opgeven bij de bestandsnaam.

> Als je een bestand opent om te schrijven en dit bestand bestaat al, dan wordt de oorspronkelijke inhoud van het bestand gewist en overschreven met de nieuwe inhoud.

> Als je een bestand opent om toe te voegen en dit bestand bestaat nog niet, dan wordt het aangemaakt Bestaat het wel, dan wordt het geopend en niet leeg gemaakt zodat je gegevens kan toevoegen.

> Als je een bestand opent om te lezen (read), staat de pointer aan het begin van het bestand.

> Als je een bestand opent om te schrijven (write), staat de pointer aan het einde van het bestand.

> Als je een bestand opent om toe te voegen (append), staat de pointer aan het einde van het bestand.

> Je kan op deze manier bestanden met meetgegevens, statistische gegevens, economische gegevens … verwerken.

5.3 Gebruiken van bestanden

<fp>.read()Het hele bestand wordt in één string ingelezen.

<fp>.readline()Je leest één regel van het bestand en zet deze in een string Eén regel is alle tekst tot en met het volgende nieuwe regel (\n)-teken. Op deze manier kan je een bestand regel per regel inlezen. Readline gaat telkens verder met de volgende regel. Als je aan het einde van het bestand bent en je probeert een nieuwe regel te lezen, krijg je een lege string terug.

INKIJKEXEMPLAARDIEKEURE

<fp>.write(<tekst>) Je schrijft de <tekst> op de positie van de pointer in het bestand. Meestal is dit op het einde van het bestand.

Aandachtspunten:

> Aan het einde van elke regel in een tekstbestand staat een \n, newline. Je kan dit vergelijken met de Enter waarop je duwt in een tekstverwerker om naar de volgende regel te gaan.

Als in een txt-bestand na het ingeven van de laatste regel niet op Enter is geduwd, staat op het einde van deze laatste regel geen \n.

> Je leest het \n-teken als je gebruik maakt van readline().

Gemiddelde en deviatie

Probleemstelling

In het bestand Punten.csv staan de punten van het examen wiskunde van een groep leerlingen. De leraar wil het gemiddelde te weten komen en wil ook graag weten hoeveel elke leerling daarvan afwijkt (de deviatie).

Maak een programma dat

1 de gegevens uit het bestand inleest in een lijst,

2 het gemiddelde berekent,

3 per leerling de afwijking van het gemiddelde berekent, 4 alle gegevens uitprint en de gegevens per leerling wegschrijft in het bestand Punten_gemiddelde.csv

Tip

Open het bestand Punten.csv in Excel en in kladblok. In Excel zie je duidelijk de verschillende kolommen en de gegevens van het bestand. In kladblok zie je de structuur van het tekstbestand.

Analyse

Invoer

waarde type namen en punten uit het bestand Punten.csv list een lijst met lijsten die de namen en punten bevatten

Verwerking

Lees de gegevens in uit het bestand in een lijst met lijsten. Bereken het gemiddelde van de punten. Bereken de deviatie per leerling.

Schrijf de gegevens per leerling in het bestand.

Uitvoer

waarde type gemiddelde integer deviatie integer

INKIJKEXEMPLAARDIEKEURE

de gegevens per leerling in kolommen in het bestand Punten_gemiddelde.csv

Algoritme open punten.csv om te lezen lees de eerste regel gegevens_leerlingen = [] voor regel in fp herhaal voeg de gegevens van een leerling als een lijst van strings toe aan gegevens_leerlingen som = 0 bepaal aantal_lln herhaal voor rij in range(aantal_lln) punten van de lln op index rij = punten van de lln op index rij als integer voeg punten van de lln toe aan de som bereken gemiddelde als integer schrijf gemiddelde herhaal voor rij in range(aantal_lln) bereken de deviatie voeg deviatie toe aan de lijst open punten_gemiddelde.csv om te schrijven schrijf de titels van de kolommen schrijf per leerling de naam, punten en deviatie in het bestand

Programma

# Bereken het gemiddelde van de punten en de deviatie per leerling #

# Lees de gegevens van het bestand in een lijst met lijsten # De eerste lijn bevat de titels, die staan niet in de lijst with open("Punten.csv", "r") as fp: fp.readline() fp.readline() gegevens_leerlingen = [] for regel in fp: gegevens_lln = regel.split(";") gegevens_leerlingen.append(gegevens_lln)

# Bereken het gemiddelde van de punten som = 0 aantal_lln = len(gegevens_leerlingen) for rij in range(aantal_lln):

# Maak een integer van de punten in de laatste kolom en tel ze bij de som gegevens_leerlingen[rij][1] = int(gegevens_leerlingen[rij][1]) som += gegevens_leerlingen[rij][1] gemiddelde = round(som/aantal_lln) print(“Het gemiddelde is:”, gemiddelde)

# Bereken de deviatie en voeg die toe aan de lijst for rij in range(aantal_lln): deviatie = gegevens_leerlingen[rij][1] - gemiddelde gegevens_leerlingen[rij].append(deviatie)

INKIJKEXEMPLAARDIEKEURE

# Plaats de gegevens in het bestand with open("punten_gemiddelde.csv", "w") as fp: fp.write("Naam;Punten;Deviatie\n") for rij in range(aantal_lln): regel = "" for kolom in range(3): regel += str(gegevens_leerlingen[rij][kolom]) + ";" # Op het einde staat een “;” teveel, verwijder die en voeg een “\n” toe regel = regel[:-1] + "\n" fp.write(regel)

Bewaar het programma onder de naam Punten_gemiddelde.py.

Testen

Voer het programma uit.

Tip

Bij het schrijven van een programma dat gegevens uit een bestand verwerkt, kan er altijd een logische fout optreden. Je hebt dan ergens een fout in je redenering gemaakt. Bevat je bestand veel gegevens, dan kan het runnen (uitvoeren) ervan een tijdje duren, terwijl je misschien al weet dat er een fout in staat. Je kan uiteraard de uitvoer van je programma afbreken, maar een efficiëntere manier van werken is om de begrensde herhaling te beperken tot de eerste 10 lijstelementen. Test hiermee tot het programma volledig juist is. Zet de begrensde herhaling nadien op het correcte aantal.

Aandachtspunten:

> Als je een regel uit het bestand inleest, krijg je een string. Zet deze om naar een lijst zodat je gemakkelijk met de verschillende gegevens kan werken. Gebruik hiervoor split, dit splitst een string en zet deze om naar een lijst van strings op basis van een teken.

> Je hebt meerdere keren de lengte van de lijst nodig, m.a.w. het totaal aantal leerlingen, vandaar dat je het in een variabele plaatst.

> Je moet de som berekenen van de punten, die staan als string in de lijst met op het einde een “\n”-teken. Maak er een integer van zodat je kan rekenen met het getal. Het “\n”-teken vormt geen probleem bij het omzetten naar een integer.

> Bij het schrijven naar het bestand moet je ervoor zorgen dat op het einde van een regel geen “;” staat maar wel een newline. Vandaar de instructie regel = regel[:-1] + “\n”

5.4 Toekenningsoperatoren

Voor de expressie getal = getal + 5 bestaat een verkorte notatie.

verkorte notatiekomt overeen met getal += 5 getal = getal + 5 getal -= 5 getal = getal - 5 getal *= 5 getal = getal * 5 getal /= 5 getal = getal / 5 getal //= 5getal = getal // 5 getal %= 5getal = getal % 5 getal **= 5 getal = getal ** 5 woord1 += woord2woord1 = woord1 + woord2 woord *= 3woord = woord * 3

5.5 Meer mogelijkheden in de functie print (uitbreiding)

De functie print heeft nog een aantal bijkomende parameters.

print({<tekst>} [,sep = <sep>][,end = <end>])

<sep>: bepaalt het scheidingsteken (het teken dat tussen de verschillende teksten in je printopdracht staat); standaard is dit “ ” (een spatie).

<end>: bepaalt het teken dat op het einde van een printopdracht wordt geplaatst; standaard is dit “\n” (newline).

Voorbeelden:

instructie

print(“kostprijs:”, 5, “EUR”)

resultaat

kostprijs: 5 EUR print(“kostprijs:”, 5, “EUR”, sep=“”)

kostprijs:5EUR print(“kostprijs:”, 5, “EUR”, sep = “,”)

kostprijs:,5,EUR print(“januari”) print(“februari”)

januari februari print(“januari”, end = “”) print(“februari”, end = “”)

januarifebruari

Als we dit toepassen op onze boodschappenlijst, kan je Boodschappen4.py aanpassen. Bewaar het resultaat als Boodschappen7.py.

Open Boodschappen7.py

with open("boodschappenlijst.txt", "r") as fp: boodschappen = [] for regel in fp: boodschappen.append(regel) for lijn in boodschappen: print(lijn, end = "")

5.6 De datastructuur dictionary

Niet alle gegevens vormen een geordende lijst. Soms wil je een waarde zoeken op basis van een sleutelwaarde, zoals in een database. In zo’n geval kan je een associatieve array gebruiken.

Een associatieve array is een datastructuur waarmee door middel van een sleutel een waarde wordt gezocht.

INKIJKEXEMPLAARDIEKEURE

In Python komt een associatieve array overeen met een dictionary (een datatypestructuur waarmee je gegevens kan opslaan als sleutel-waardeparen.) Dictionaries zijn handig wanneer je snel waarden wilt opzoeken op basis van een unieke sleutel. Ze zijn vergelijkbaar met een woordenboek, waarbij een woord (sleutel) je naar een definitie (waarde) leidt.

Voorbeelden:

fruitmand = {"appel": 2, "peer": 4, "appelsien": 2} landen_hoofdsteden = { "België":"Brussel", "Nederland":"Amsterdam", "Duitsland":"Berlijn", "Frankrijk":"Parijs" } gsmnr = {"Guy":"0498 25 36 12", "An":"0476 78 56 32"} artikel = { "melk":["zuivel", 1.44, 100], "sla":["groente", 1.49, 50], "peer":["fruit", 1.99, 150], "rijst":["droogwaren", 3.49, 200] } film = { "Wicked":["Ariana Grande", "Cynthia Erivo", "Jonathan Bailey"], "Barbie":["Margot Robbie", "Ryan Gosling"], "Nosferatu":["Emma Corrin", "Aaron Taylor-Johnson"] }

leeg = {}

Aandachtspunten:

> Sleutels in een dictionary zijn doorgaans strings, maar het kunnen ook integers of floats zijn. In de voorbeelden en oefeningen gebruik je enkel strings.

> De waarden kunnen allerlei types hebben: strings, getallen, lijsten …

> Elke sleutel is uniek. Je kan geen dubbele sleutels hebben.

> De sleutels zijn allemaal verschillend – bij elke sleutel hoort precies één waarde, maar …

> Een waarde kan meerdere keren voorkomen in een dictionary. Twee verschillende sleutels kunnen dezelfde waarde hebben. In het voorbeeld van de films kunnen twee films dezelfde hoofdrolspelers hebben, denk bijvoorbeeld aan een sequel.

> Dictionaries zijn zeer efficiënt en snel voor het opzoeken van waarden op basis van sleutels.

> Dictionaries zijn zeer flexibel. Je kan gegevens eenvoudig toevoegen, verwijderen of wijzigen.

> Dictionaries kunnen niet gesorteerd of geïnverteerd worden.

Interpreteer en experimenteer

Taak

1 Lees onderstaande programma’s.

2 Wat denk je dat er gebeurt? Wat denk je dat de uitvoer is?

3 Open de programma’s in Thonny, voer ze uit en controleer of je veronderstelling juist is.

INKIJKEXEMPLAARDIEKEURE

Open Punten.py

# Dictionary van studenten en hun punten punten = {"Emma": 85, "Feebe": 92, "Ward": 78, "Noah": 90} print("Punten van Noah:", punten["Noah"]) punten["Arthur"] = 88 punten["Feebe"] = 95 print(punten)

Open Landen_Hoofdsteden1.py.

landen_hoofdsteden = { "België":"Brussel", "Nederland":"Amsterdam", "Duitsland":"Berlijn", "Frankrijk":"Parijs" } if "Duitsland" in landen_hoofdsteden: print("De hoofdstad van Duitsland is", landen_hoofdsteden["Duitsland"] + ".")

Open WoordenTekst.py.

tekst = "Voetbal is een leuke sport turnen is een leuke sport iedereen heeft een favoriete sport"

woordenteller = {} woorden = tekst.split() for woord in woorden: if woord in woordenteller: woordenteller[woord] = woordenteller[woord] + 1 else: woordenteller[woord] = 1

print("Woordfrequenties:") for woord in woordenteller.keys(): print(woord + ":", woordenteller[woord])

Taak

1 Open Landen_Hoofdsteden1.py.

2 Maak een programma dat een land en een hoofdstad inleest en controleert of de juiste hoofdstad is ingegeven. Je moet nog geen rekening houden met het feit dat het land eventueel niet in de dictionary staat.

3 Bewaar het bestand onder de naam Landen_Hoofdsteden2.py

Dictionary gebruiken

Een dictionary printen

>>> print(fruitmand)

{"appel": 2, "peer": 4, "appelsien": 2}

>>> print(artikel)

{"melk": ["zuivel”, 1.44, 100], "sla": ["groente", 1.49, 50], "peer": ["fruit", 1.99, 150], "rijst": ["droogwaren”, 3.49, 200]}

Gegevens uit een dictionary halen

<dictionary>[<sleutel>] geeft als resultaat de waarde die gekoppeld is aan de <sleutel>. geeft een foutmelding als de <sleutel> niet bestaat.

<dictionary>.get[<sleutel>[,<foutwaarde>]] geeft als resultaat de waarde die gekoppeld is aan de <sleutel>. Als je een waarde opgeeft voor <foutwaarde>, verschijnt er geen foutmelding als de sleutel niet bestaat, maar wel deze <foutwaarde>. Standaard heeft <foutwaarde> de waarde None

Je kan hierop controleren met is None.

<dictionary>.keys() geeft als resultaat een view-object met daarin een lijst met de sleutels uit de <dictionary>. Een view-object is een blik op de huidige dictionary. In dit geval levert dit de huidige sleutels op.

<dictionary>.values() geeft als resultaat een view-object met daarin een lijst met de waarden uit de <dictionary>.

Aandachtspunten:

> Wil je de lijst in het view-object verwerken, gebruik dan eerst de type-conversiefunctie list erop.

Bijvoorbeeld: list(fruitmand.keys()) = [“appel”, “peer”, “appelsien”]

> Je kan de operator in gebruiken om de elementen van een lijst in een view-object te overlopen.

Bijvoorbeeld: for fruit in fruitmand.keys()

Voorbeelden:

expressie

gsmnr[“Guy”]

film[“Barbie”]

film(“Gladiator”]

film(“Gladiator”, 0]

film(“Gladiator”, “Niet opgenomen”]

Een dictionary aanpassen

INKIJKEXEMPLAARDIEKEURE

resultaat

“0498 25 36 12”

[“Margot Robbie”, “Ryan Gosling”]

None

0

“Niet opgenomen”

<dictionary>[<sleutel>] = <waarde>De <waarde> die hoort bij de <sleutel> wordt gewijzigd. Indien de sleutel nog niet bestaat, wordt er een element toegevoegd aan de <dictionary> met deze <sleutel>-<waarde> combinatie.

<dictionary>. update({<sleutel>:<waarde>}) voegt één of meerdere <sleutel>-<waarde>paren toe aan een <dictionary> of werkt ze bij.

<dictionary>.pop(<sleutel>) Het <sleutel>-waarde paar wordt verwijderd uit de <dictionary>.

Voorbeelden:

instructie

landen_hoofdsteden[“Italië”] = “Rome”

5 INKIJKEXEMPLAARDIEKEURE

resultaat

landen_hoofdsteden = { “België”:“Brussel”, “Nederland”:“Amsterdam”, “Duitsland”:“Berlijn”, “Frankrijk”:“Parijs”, “Italië”:“Rome” }

gsmnr[“An”] = “0498 56 23 24”

gsmnr = {“Guy”:“0498 25 36 12”, “An”:“0498 56 23 24”} landen_hoofdsteden.update({“Spanje”:“Madrid”, “Portugal”:“Lissabon”})

landen_hoofdsteden = { “België”:“Brussel”, “Nederland”:“Amsterdam”, “Duitsland”:“Berlijn”, “Frankrijk”:“Parijs”, “Italië”:“Rome” “Spanje”:“Madrid”, “Portugal”:“Lissabon” } landen_hoofdsteden.pop[“Duitsland”]

landen_hoofdsteden = { “België”:“Brussel”, “Nederland”:“Amsterdam”, “Frankrijk”:“Parijs”, “Italië”:“Rome” “Spanje”:“Madrid”, “Portugal”:“Lissabon” }

Functie op een dictionary

len(<dictionary>) geeft als terugkeerwaarde het aantal sleutel-waardeparen in de <dictionary>.

Engels leren

Probleemstelling

Je beschikt over een bestand Ndl_Eng.csv met een verzameling veelgebruikte Engelse woorden. Maak een programma dat dit bestand inleest in een dictionary en vervolgens at random een Nederlands woord presenteert, waarna de juiste Engelse vertaling moet worden ingetypt. Is de vertaling fout, dan verschijnt de juiste vertaling. Bij de start van het programma geef je in hoeveel woorden je wilt oefenen. Het programma houdt bij hoeveel woorden je juist hebt en hoeveel fout.

Analyse

Invoer

waarde type

Nederlandse woorden en hun Engelse vertaling uit het bestand Ndl_Eng.csv dictionary een dictionary met als sleutel het Nederlandse woord en als waarde de Engelse vertaling aantal integer

Verwerking

initialiseer het aantal juist en het aantal fout herhaal voor teller van 1 tot aantal kies random woord toon random woord lees vertaling zeg of vertaling juist of fout is, als fout geef juiste vertaling verhoog aantal juist of aantal fout

Uitvoer

waarde type juist integer fout integer

Probleemstelling

open Ndl_Eng.csv om te lezen inhoud = {} herhaal voor elke regel in het bestand splits de woorden op basis van “;” voeg het Nederlandse en Engelse woord als sleutel-woordenpaar toe aan de dictionary, verwijder “\n” uit het Engelse woord lees aantal initialiseer juist en fout op 0 herhaal voor teller in range(aantal) kies at random een Nederlands woord ndl (key) lees een vertaling eng in als eng == waarde die hoort bij sleutel ndl dan schrijf correct verhoog juist met 1 zoniet

schrijf juiste Engelse woord verhoog fout met 1

INKIJKEXEMPLAARDIEKEURE

schrijf juist schrijf fout

Programma

# Maak een programma om je Engelse woordenschat te oefenen

#

# Importeer de softwarebibliotheek random import random

# Functie lees bestand def lees_bestand(bestandsnaam): with open(bestandsnaam, "r") as fp: inhoud = {} for regel in fp:

# Splits de ingelezen lijn in woorden bij elke puntkomma woorden = regel.split(";")

# Voeg een Nederlands woord met vertaling toe aan de dictionary

# Verwijder \n uit de Engelse vertaling inhoud[woorden[0]] = woorden[1][:-1] return(inhoud)

# Hoofdprogramma

woordenboek = lees_bestand("Ndl_Eng.csv")

# Lees het aantal woorden in dat je wilt oefenen

aantal = int(input("Hoeveel woorden wil je oefenen? "))

# Zet het aantal juiste vertalingen en foute vertalingen op 0 juist = 0 fout = 0

for teller in range(aantal):

# Willekeurig woord selecteren ndl = random.choice(list(woordenboek.keys()))

# Vraag de gebruiker om de vertaling print("Wat is de vertaling van", ndl + "?") eng = input("Je vertaling: ")

# Antwoord controleren if eng == woordenboek[ndl]: print("Correct!")

juist = juist + 1

else:

print("Fout! De juiste vertaling is:", woordenboek[ndl]) fout = fout + 1

# Print het aantal juiste en foute vertalingen print("Aantal juiste vertalingen:", juist) print("Aantal foute vertalingen:", fout)

Bewaar het programma onder de naam EngelsLeren1.py

Tip

Maak eerst een kleiner bestand Ndl_Eng.csv om te testen.

Interpreteer en experimenteer

Pas het programma EngelsLeren1.py aan zodat eenzelfde Nederlands woord niet meerdere keren kan voorkomen in een oefening. Gebruik een list om de gebruikte woorden in op te slaan.

Bewaar het programma onder de naam EngelsLeren2.py

INKIJKEXEMPLAARDIEKEURE

Oefeningen

Tip

> Open en bestudeer het bestand voordat je met de oefening begint.

> Test je oplossing eerst uit op een kleiner bestand.

INKIJKEXEMPLAARDIEKEURE

Gemakkelijk

1 Maak een programma met daarin de zelfgedefinieerde functie gemiddelde_lengte() die de gemiddelde lengte bepaalt van de woorden in een lijst.

De woorden worden ingelezen vanuit het bestand Woorden.txt. Elke lijn eindigt op \n.

De gemiddelde lengte wordt afgerond op twee cijfers na de komma. Zowel de lijst van woorden als de gemiddelde lengte worden uitgeprint.

Bewaar het programma onder de naam WoordGemiddelde.py

2 Een wetenschapper heeft de regenval van een aantal dagen verzameld in het bestand Regen.txt. Elke lijn eindigt op \n. Hij wil graag weten wat de kleinste hoeveelheid regen is die in de periode van de metingen is gevallen.

Maak een programma dat het kleinste getal zoekt in deze reeks getallen. Gebruik hiervoor een begrensde herhaling. Print zowel de reeks getallen als het kleinste getal uit.

Bewaar het programma onder de naam Kleinste.py

3 Per jaar zijn er meerdere aardbevingen in verschillende landen ter wereld. In sommige landen komen veel aardbevingen voor, in andere weinig of geen. Het bestand Aardbevingen.csv bevat alle grote of bijzondere aardbevingen sinds 1900.

Maak een programma dat telt hoe vaak elk land voorkomt in dit bestand, m.a.w. hoeveel aardbevingen er sinds 1900 geweest zijn in elk land.

Print het resultaat uit op het scherm en plaats het ook in het bestand Aardbeving.txt. Gebruik hierbij als encoding “UTF-8”, zodat de landen met ë en ï ook juist geschreven worden.

vb.

USA – 8

Chili – 7

Italië – 8

Indonesië – 5

China – 9

Mexico – 4

Iran – 2

Japan – 6

Canada – 1

Nieuw-Zeeland – 4

Nederland – 2

Turkije – 7

Griekenland – 2 …

Open eerst het bestand om een idee te krijgen van de inhoud. Gebruik een dictionary om de gegevens op te slaan. Bewaar het programma onder de naam Aardbeving1.py

Gemiddeld

4 De klasleraar wil de leerlingen in zijn klas een andere plaats geven. Hij laat de computer de verdeling bepalen. Je beschikt over een bestand Klas.txt met de namen van de leerlingen in de klas. Maak een programma dat de leerlingen een willekeurige plaats geeft in de klas. De banken in de klas zijn genummerd van 1 tot het aantal leerlingen. Zorg ervoor dat elke leerling een ander banknummer krijgt. Lees de namen van de leerlingen in een list van lijsten. Elke naam is het eerste element van de deellijst. Achter elke naam staat een \n in het bestand. Voeg als tweede element het banknummer toe.

Schrijf de nieuwe gegevens in het bestand Klasnr.txt. Tussen de naam en het banknummer staat een puntkomma. Elke lijn eindigt op \n.

Bewaar dit programma onder de naam PlaatsInKlas.py.

INKIJKEXEMPLAARDIEKEURE

5

Het bestand Chocola.txt bevat een tekst. Je wilt deze tekst als artikel indienen voor een tijdschrift. Er staat echter een beperking op het aantal woorden. Maak een programma met daarin een functie aantal() die het aantal woorden in het bestand telt. Alles wat geen letter is, wordt beschouwd als een woordscheider. Je maakt geen onderscheid tussen hoofd- en kleine letters.

Tip

> Gebruik een logische variabele die je op True zet bij de start van een woord en op False bij het einde van een woord.

> Zoek in het vorige hoofdstuk een methode of functie die je kan gebruiken om te controleren of een teken een letter is.

De tekst bevat 198 woorden. vb.

Bewaar het programma onder de naam AantalWoorden.py

6 Je werkt verder op het bestand Chocola.txt. Maak een programma dat controleert welke letters in de tekst zitten en hoeveel keer elke letter voorkomt. Tel enkel de letters die in de tekst voorkomen. Maak geen onderscheid tussen hoofd- en kleine letters. Maak gebruik van een dictionary.

d: 68 e: 201 p: 17 r: 82 o: 93 u: 15 c: 50 t: 66 i: 47 v: 26 a: 94 … vb.

Bewaar het programma onder de naam Letterteller.py

7 Een leraar wil een programma om snel te weten wat de resultaten zijn van een toets. De leraar geeft na elke toets in het bestand Toets.txt een aantal gegevens in:

> het maximum te behalen of m.a.w. op hoeveel punten de toets stond,

> hoeveel leerlingen de test aflegden,

> alle afzonderlijke resultaten die de leerlingen op de toets haalden.

Als uitvoer krijgt hij het totaal aantal leerlingen dat slaagde voor de toets en het aantal dat niet slaagde. Op het einde verschijnt een besluit voor de leraar (als 80% van de leerlingen slaagde, dan hebben de leerlingen de les begrepen).

Maak dit programma. Werk verder op het programma Geslaagd1.py met daarin de functie IsGeslaagd().

vb.

INKIJKEXEMPLAARDIEKEURE

aantal geslaagd: 12 aantal niet geslaagd: 3

61% van de leerlingen is geslaagd.

De leerlingen hebben de les niet begrepen.

Bewaar het programma onder de naam Geslaagd2.py

8

Er is iets aan de hand met één van je zonnepanelen. De opbrengst ligt lager dan bij de andere panelen.

Waarschijnlijk werkt één van de cellen niet goed. De opbrengst in Wp (Wattpiek) van elke cel van het zonnepaneel werd ingelezen in een CSV-bestand, Zonnepaneel.csv. Het zonnepaneel in kwestie heeft 60 cellen (10 rijen van 6 kolommen). Welke cel werkt er niet goed? (Een cel werkt niet goed als er een afwijking is van minimum 1 Wp van het gemiddelde.)

Tip

Bereken het volledige gemiddelde en overloop elke cel om na te gaan of dit (ver) onder het te verwachten gemiddelde ligt.

vb.

kapotte cel: rij 9 kolom 2 gemiddelde opbrengst cel: 3.5 Wp opbrengst kapotte cel: 1.2 Wp

Bewaar het programma onder de naam Zonnepaneel.py

gevorderd

9

In het bestand Landen.csv staan alle landen opgelijst die op 2025-01-01 erkend zijn door de Verenigde Naties. Ook het werelddeel waarin ze liggen, hun hoofdstad en de talen die er in dit land gesproken worden staan erbij. Gebruik voor dit bestand als encoding “UTF-8”. Programmeer een quiz waarin de speler eerst het onderwerp kan kiezen:

1 Werelddeel

2 Hoofdstad Vraag de speler hoeveel landen een ronde moet bevatten. De computer kiest willekeurige landen uit de lijst waarbij er niet twee keer hetzelfde land wordt aangeboden. Maak een zelfgedefinieerde functie controle_antwoord() die onafhankelijk van het onderwerp kan worden gebruikt om te testen of het gegeven antwoord juist is of niet. Let op: een land kan tot meer dan één werelddeel behoren; Turkije bijvoorbeeld ligt in Europa en Azië. Het is voldoende als één werelddeel wordt gegeven.

Geeft de speler een fout antwoord, dan verschijnt het juiste antwoord.

Op het einde van het programma verschijnt het aantal juiste en het aantal foute antwoorden.

Bewaar het programma onder de naam Quiz.py.

10 Programmeer een woordraadspel. In het bestand Woordspel.txt staan meerdere woorden waarvan er één geraden moet worden. Elk woord staat in hoofdletters. Het programma kiest willekeurig één van die woorden. De speler krijgt een aantal levens om het woord te raden.

Werkwijze:

1 Kies een willekeurig woord uit het bestand.

2 Initialiseer het aantal levens van de speler. De speler krijgt 5 levens.

3 Toon de speler hoeveel levens hij/zij nog heeft.

4 Laat de speler een letter ingeven en controleer of die letter voorkomt in het te raden woord. Als dat zo is, toon het geheime woord met de geraden letters op de juiste plaatsen, duid de andere (nog niet geraden) letters aan met puntjes.

5 Vraag of de speler het geheime woord al wil raden. Wil de speler dit, dan kan hij/zij een woord ingeven. Is het woord juist, dan eindigt het spel.

6 Herhaal vanaf 4 tot de speler een foute letter ingeeft.

7 Komt de ingegeven letter niet voor in het woord, dan vermindert het aantal levens van de speler en begint alles opnieuw vanaf 3 tot er geen levens meer zijn of het woord geraden is.

8 Is het woord niet geraden, dan wordt het getoond.

9 Toon een overwinningsbericht als de speler het woord heeft geraden en een verliesbericht als de levens van de speler op zijn.

Bewaar het programma onder de naam Woordspel.py

INKIJKEXEMPLAARDIEKEURE

6INKIJKEXEMPLAARDIEKEURE

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.