Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
De module het Internet bestaat uit een 8-aantal filmpjes van ongeveer 5/6 minuten. De inhoud van de filmpjes is tevens het leerwerk voor de toets in de toetsweek. Per filmpje krijg je 2 (open) vragen.
In de eerste periode gaan we ons bezig houden met het bouwen van een website, netwerken en een klein beetje security.
Zie het kopje modules voor de stof
Week #
Date
Subject
Work
34
17-8
HTML-CSS-0
Het Internet
Lesbrief 1, 2, 3
1: What is the Internet
35
24-8
HTML-CSS-0
Het Internet
Lesbrief 4, 5, 6
2: Wires, Cables & WiFi
36
31-8
HTML-CSS-1
Het Internet
Lesbrief 1, 2, 3
3: IP Adresses & DNS
37
7-9
HTML-CSS-1
Het Internet
Lesbrief 4, 5, 6
4: Packets, Routing & Reliability
38
14-9
HTML-CSS-1
Het Internet
Lesbrief 7, 8, 9
5: HTTP & HTML
39
21-9
HTML-CSS
Het Internet
Eindopdracht [PET1]
6: Encryption & Public Keys
40
28-9
HTML-CSS
Het Internet
Eindopdracht [PET1]
7: Cypersecurity & Crime
43
19-10
HTML-CSS
Het Internet
Eindopdracht[PET1]
Deadline PET1
8: How search works
44
26-10
Informatie
Les 1, 2, 3
45
2-11
Informatie
Les 4, 5, 6
46
9-11
uitloop
Week #
Date
Subject
Work
34
17-8
HTML-CSS-0
Het Internet
Lesbrief 1, 2, 3, 4
1: What is the Internet?
35
24-8
HTML-CSS-0 / 1
Het Internet
Lesbrief 5, 6, 1, 2
2: Wires, Cabbles & WiFi
36
31-8
HTML-CSS-1
Het Internet
Lesbrief 3, 4, 5, 6
3: IP Addresses & DNS
37
7-9
HTML-CSS-1 / 2
Het Internet
Lesbrief 7, 8, 9, 1
4: Packets, Routing & Reliability
38
14-9
HTML-CSS-2
Het Internet
Lesbrief 2, 3
5: HTTP & HTML
39
21-9
HTML-CSS
Het Internet
Eindopdracht [PET1]
6: Encryption & Public Keys
40
28-9
HTML-CSS
Het Internet
Eindopdracht [PET1]
7: Cybersecurity & Crime
43
19-10
HTML-CSS
Het Internet
Eindopdracht[PET1]
Deadline PET1
8: How Search Works
44
26-10
informatie
les 1, 2, 3
45
2-11
Informatie
Les 4, 5, 6
46
9-11
uitloop
Naast classes bestaan er ook pseudo-classes in CSS. Met een pseudo-class kun je elementen selecteren in een bepaalde toestand. Bijvoorbeeld:
hover
: De muis gaat over het element
active
: Er wordt op het element geklikt
Voor (hyper)links <a>
zijn er ook nog:
link
: Er is nog niet op de link geklikt
visited
: Er is wel op de link geklik
Je gebruikt de : (dubbele punt) voor pseudo-classes: element:pseudo-class
Je kunt ook een class en een pseudo-class gebruiken.
In HTML worden links standaard onderstreept. Je kunt dat ook uitzetten met de text-decoration
eigenschap.
Soms wil je een stukje van een paragraaf een andere layout geven. Een manier om dit te doen is door een <
span
>
element om je tekst te zetten. Met <span id="tekst">
kun je CSS bestand alleen dat stukje tekst selecteren.
[1] Oefen met pseudo-classes en span in je pagina.
[2] Maak de opdrachten op repl.it
Informatica als keuzevak havo/vwo is in 1998 onstaan. Destijds was er een programma weerspiegelt de tijd waarin het world wide web nog maar mondjesmaat gebruikt werd en bedrijfsautomatisering de meest in het oog springende toepassing van computers was. In de huidige samenleving werken velen in the cloud met behulp van wearable devices die veel aspecten van hun leven real time monitoren via het internet of things. Die informatierevolutie vraagt het onderwijs om leerlingen en studenten digitaal geletterd te maken. Digitale geletterdheid betekent meer dan apps en programma’s bedienen: om kundig en verantwoordelijk mee te doen in de informatiemaatschappij is het onontbeerlijk de digitale wereld te begrijpen. Verder hoort bij toekomstgericht onderwijs dat leerlingen leren de kansen van de digitale wereld te benutten om innovatieve oplossingen te bedenken én te maken. Het vakgebied informatica levert daarvoor respectievelijk de concepten en methoden. Sinds 2018 is het gehele is er vanuit een vernieuwingscommissie Informatica een nieuw programma samengesteld. Het nieuwe pogramma bestaan uit een gmeenschappelijk kernprogramma en over aanvullende thema’s waaruit leerlingen kunnen kiezen. Het programma bestaat uit een schoolexamen.
Het kernprogramma wordt gegeven in het 4de jaar en is voor de Havo en het VWO precies het zelfde. Echter bij het VWO gaat wordt er meer gevraagd rondom denkvaardigheid en diepgang. In het 4de jaar krijg je 3 uur lesuren informatica. Voor het kernprogramma staan voor 200 slu [studielast uren]. Wat inhoud dat je naast je lesuren nog ongeveer 2 uur in de week bestaat aan thuiswerk.
Na het succesvol afronden van het kernprogramma worden de keuzethema’s gekozen. De keuzethemas zijn verdeelt in 2 groepen: resp. 1 en 2. De eis is dat je minimaal 1 keuzethema uit groep 2 hebt gekozen. Een keuzethema staat voor 60 slu [studielast uren] en je hebt een half lesjaar op een keuze thema af te ronden. Na het kernprogramma heb je 2 lesuur in de week.
Algoritmiek, berekenbaarheid en logica
Databases
Cognitive computing
Programmeerparadigma’s
Computerarchitectuur
Netwerken
Physical computing
Security
Usability
User experience
Maatschappelijke en individuele invloed van informatica
Computational science
In de tweede periode gaan we ons bezig houden met programeren en algoritmes.
Zie het kopje modules voor de stof
Week #
Date
Subject
Work
1
23-11
Python-0
Les 1
2
30-11
Python-0
Automaten
Les 2
Les 1
3
7-12
Python-0
Automaten
Les 2B
Les 2
4
14-12
Python-0
Automaten
Les 3
Les 3
5
4-1
Python-0
Automaten
Les 4
Les 4
6
11-1
Python-0
Automaten
Les 5
Les 5
7
18-1
Python-Kunst
Algoritme
Les 1, 2
Les 1
8
25-1
Python-Kunst
Algoritme
PET2
Les 2
9
1-2
Python-Kunst
Algoritme
PET2
Les 3
10
8-2
Python-Kunst
Algoritme
PET2
Les 4
11
15-2
pyton-kunst
DL: PET2
Algoritme
PET2
Les 5
12
1-3
uitloop
Week #
Date
Subject
Work
1
23-11
Python-0
Les 1, 2
2
30-11
Python-0
Automaten
Les 2b, 3
Les 1
3
7-12
Python-0
Automaten
les 4, 5
Les 2
4
14-12
Python-1
Automaten
Les 1, 2
Les 3
5
4-1
Python-1
Automaten
Les 2, 3
Les 4
6
11-1
Python-1
Automaten
Les 3 ,4
Les 5
7
18-1
Python-1
Algoritme
Les 4, 5
Les 1
8
25-1
Python-1
Algoritme
Les 5, 6, 7
Les 2
9
1-2
Python
Algoritme
PET2
Les 3
10
8-2
Python
Algoritme
PET2
Les 4
11
15-2
Python
DL: PET2
Algoritme
PET2
Les 5
12
1-3
uitloop
Welkom in de Module informatica.
Welkom in de HTML-CSS modules! Werk hieronder de lesbrieven af volgens je planner.
In de derde periode gaan we ons bezig houden met Databases
Zie het kopje modules voor de stof
Week #
Date
Subject
Work
1
1: Inleiding
eigen omgeving omzetten
2
2: Selectie
Hele hoofdstuk
3
3: Functie
Alle opdrachten
4
4: Groeperen
Alle opdrachten
5
7: Tabellen muteren
8: Gegeven toevoegen
Alle opdrachten
Alle opdrachten
6
9: Sleutel en Verwijzing
Alle opdrachten
7
Eindopdracht
Starten aan PET
8
Eindopdracht
Werken aan PET
9
Eindopdracht
Werken aan PET
DL: PET3
10
Oefenen voor de toets
11
Week #
Date
Subject
Work
1
Database
1: Inleiding
2: Selectie..
Eigen Omgeving opzetten T/m Selectie & Sorteren
2
2: Selectie
3: Functie
Geheel afmaken
Alle opdrachten
3
4: Groeperen
Alle opdrachten
4
5: Joins
Alle opdrachten
5
6: SubQueries
Alle opdrachten
6
7: Tabellen muteren
8: Gegeven toevoegen
Alle opdrachten
Alle opdrachten
7
9: Sleutel en Verwijzing
Eindopdracht
Alle opdrachten
Starten aan PET
8
Eindopdracht
Werken aan PET
9
Eindopdracht
Werken aan PET
DL: PET3
10
Oefenen voor de toets
11
Sommige woorden zijn belangrijker dan anderen in een tekst. Om dit aan te geven kun je ervoor kiezen om je tekst dikgedrukt te laten zien. Dit doe je met de <Strong>-tag rondom het woord of de woorden die je dikgedrukt wilt. Hiernaast zie je hier een voorbeeld van. Als je wilt dat je tekst op een nieuwe regel verder gaat, gebruik je de <br>-tag. Deze is een beetje raar omdat hij alleen maar een close-tag is.
Tot nu toe zijn we eigenlijk alleen maar bezig geweest met de tekst op onze website. Maar er zijn nog genoeg andere leuke dingen om op je website te zetten, bijvoorbeeld plaatjes! Voor plaatjes gebruik je de <img> -tag, maar je moet deze tag nog wat extra informatie meegeven over het plaatje wat je wilt gebruiken.
Het is ook leuk om op je website naar andere pagina’s of websites te kunnen verwijzen. Hiervoor heb je link’s nodig, dit doe je met de <a>-tag. Net als bij plaatjes heeft de <a>-tag meer informatie nodig. Net zoals je bij een plaatje een link moet zetten moet je dat hier ook doen. In plaats van src gebruik je href en daarachter zet je de link van de pagina waarnaar je wilt verwijzen. Zoals hiernaast te zien is. Bij de -tag hadden we niets tussen de open- en sluit-tag in gezet. Bij de <img>-link doen we dat wel. De tekst waarop je kunt klikken om naar de link te gaan zet je tussen deze tags.
[1] Kijk eens terug naar de teksten die je hebt geschreven bij de vorige leskaart. Zijn daar woorden tussen die je belangrijker vindt dan de rest van de woorden? Maak deze dan dik gedrukt zodat ze goed opvallen. Probeer tenminste 3 dikgedrukte woorden op je pagina te hebben.
[2] Het is leuk om onder het kopje “over mij” een foto van jezelf toe te voegen. Als je die niet hebt kun je ook een leuk plaatje van iets anders zoeken op internet. Extra: Misschien vind je je plaatje wel wat te groot of te klein. Het formaat van het plaatje kun je aanpassen binnen de tag. Om te weten hoe je dit kunt doen kun je eens een kijkje nemen op de volgende website: https://www.w3schools.com/tags/tag_img.asp als je er niet uitkomt, vraag het dan gerust aan de begeleiders!
[3] Maak een kopje aan met “leuke linkjes” en daaronder een korte paragraaf met linkjes die je leuk vindt. Kijk terug op wat je bij leskaart 1 hebt geleerd als je niet meer zo goed weet hoe kopjes en paragrafen werken. Extra: Met de <a>-tag kun je nog meer dan alleen maar een link openen in het bestaande scherm. Je kunt bijvoorbeeld ook een nieuw tabblad openen waarin de pagina uit het linkje komt te staan. Om te weten hoe je dit moet doen kun je kijken naar de volgende website: https://www.w3schools.com/tags/att_a_target.asp
Ben je klaar? Tof! Je site ziet er nu al een stuk leuker uit dan eerst. Laat aan een van de begeleiders zien hoe je site eruit ziet.
Je hebt nu een HTML-pagina gemaakt. Deze ziet er alleen nog best wel kaal en saai uit. Daar gaan we verandering in brengen met CSS! Dat staat voor Cascading Style Sheets. Met CSS kun je het uiterlijk van je webpagina bepalen. Je kunt dus zeggen dat je 's een rode achtergrond moet hebben met groene tekst. Je kunt bijvoorbeeld je plaatjes een randje geven. Je kunt je tabellen inkleuren en nog veel en veel mee
We gaan nu de CSS style direct in een pagina verwerken om mee te oefenen.
Als je meerdere pagina's gaat maken in je website is het beter om de CSS in een apart bestand te zetten. Dit staat aan het einde van de lesbrief uitgelegd.
In je pagina zet je de CSS style tussen de <style> en <style> tags in de header van je html bestand:
Zullen we eerst een achtergrondkleurtje instellen voor de pagina? Dan moeten we body selecteren. Tussen de { en de } komen alle stijlkenmerken van de body. Alles wat je voor de body wilt instellen zet je tussen die accolades. We gaan de achtergrondkleur instellen met background-color.
En voor de kleur van de tekst gebruiken we color. Zet hem er maar bij! (Wel weer in de body en tussen de accolades zetten!)
Kun je ook iets anders dan de body opmaken? Ja natuurlijk! Je kunt elke tag opmaken die je in je HTML hebt gezet! Dus <p>, <table>, <td>, <tr>, <img> . Denk er wel om dat ze dan OOK in je HTML moeten staan!
In totaal ziet het er dus zo uit:
Maak je meerdere pagina's? Gebruik dan een extern stylesheet.
Maak een bestand in dezelfde map als index.html
Noem het: style.css
Zet daar alles wat tussen de <style>-tags staat in
Zet er een link naartoe in je HTML-pagina:
<html>
<head>
<link rel="stylesheet" href="style.css">
</head>
<body>
Sla beide bestand op en test het.
[1] Bepaal een mooie kleur, achtergrondkleur en lettertype voor alle <h1>-tags op je pagina.
[2] Doe hetzelfde voor de body
[3] Kleur je tabel nu in door de <td> en de <tr>-tags een andere achtergrondkleur te geven.
[4] Je kunt je tabel ook een veel mooiere rand geven. Dat doe je natuurlijk ook in CSS. Lees op de volgende internetpagina hoe dat moet: https://www.w3schools.com/css/css_table.asp. Verras ons dan met een mooie rand voor je tabel.
[5] De CSS-code die we je in deze leskaart hebben geleerd is maar een kleine fractie van alle mogelijkheden die er zijn. Ga naar de w3schools-pagina waar je nog veel meer mogelijkheden kunt ontdekken om je pagina mee op te leuken. Klik op de volgende link: http://www.w3schools.com/css/default.asp
Je hebt gezien dat een computer in het binair stelsel rekent. Je kunt je afvragen hoe dit gaat. In een computer wordt gebruik gemaakt van digitale schakelaars, waarin maar twee waarden kunnen voorkomen: de 0 en 1. Een digitale schakelaar kan zo de waarde van een bit vastleggen. Deze schakelaars heten transistoren en daarvan zitten er miljoenen op een chip.
Om de werking duidelijk te maken kun je kijken hoe je een lamp met behulp van gewone schakelaars aan en uit kunt zetten. Zowel de lamp als de schakelaars stellen een bit voor.
In onderstaande plaatje zie je een schakeling met twee schakelaars en een lampje. Als de schakelaars in positie 0 staan, brandt de lamp niet. Alleen als de schakelaars A én B in positie 1 staan, gaat de lamp branden.
Kijk ook naar alle mogelijke varianten in wat ook wel een waarheidstabel wordt genoemd. Deze schakeling wordt een AND-poort genoemd. Een AND-poort wordt weergegeven met het symbool:
In onderstaand plaatje zie je schakeling met twee schakelaars en een lampje. Als de schakelaars in positie 0 staan, brandt de lamp niet. Als alleen schakelaar A aan wordt gezet, gaat het lampje branden. Ook als alleen schakelaar B aan wordt gezet gaat het lampje branden. Ook als beide schakelaars aan staan, brandt het lampje.
Kijk ook naar alle mogelijke varianten in de tabel. Deze schakeling wordt een OR-poort genoemd. Een OR-poort wordt weergegeven met het symbool:
In onderstaand plaatje zie je schakeling met twee schakelaars en een lampje. Als beide schakelaars in positie 0 staat, brandt de lamp niet. Staan beide schakelaars in positie 1 dan brandt de lamp ook niet. De lamp brandt alleen als schakelaars in verschillende posities staan. Probeer maar. Kijk ook naar de getallen in de waarheidstabel.
Deze schakeling wordt een XOR-poort genoemd. Een XOR-poort wordt weergegeven met het symbool:
In onderstaand plaatje zie je schakeling met twee schakelaars en een lampje. Als de schakelaar in positie 0 staat, brandt de lamp. Staat de schakelaar in positie 1 dan brandt de lamp niet. De stand van de schakelaar is dus omgekeerd aan de toetstand van de lamp.
Kijk ook naar de getallen in de waarheidstabel. Deze schakeling wordt een NOT-poort of Inverter (keert de invoer om) genoemd. Een NOT-poort wordt weergegeven met het symbool:
Inverters In de tot nu toe behandelde poorten is alleen de NOT-poort een voorbeeld van een zogenaamde inverter. Een inverter keert de ingevoerde waarde telkens om. Bij de NOT- poort wordt de ingevoerde waarde 0 omgekeerd in de waarde 1. Een invoer van de waarde 1 levert als uitvoer de waarde 0 op. Je herkent een inverter aan het ronde open cirkeltje in het gebruikte symbool voor de poort. Voorbeelden van andere inverters zijn de NAND-poort, de NOR-poort en de NXOR-poort.
Leuke Video!
Opdrachten
[1] Kijk naar de waarheidstabel van de AND-poort. Wat moet er op de plekken: A, B, C en D worden ingevuld?
[2] Kijk naar de waarheidstabel van de NOR-poort. Wat moet er op de plaatsen A tot en met D komen?
[3] Beredeneer in welke situaties de LED niet gaat branden.
[4] Beredeneer in welke situaties de LED gaat branden. Vul daarvoor de lege plaatsen in de bijbehorende waarheidstabel in.
[5] Beredeneer in welke situaties de LED gaat branden.
overnemen van wiki
Digitaal beeld
Een beeldscherm, digitale foto of beeldbestand bestaat uit een aantal beeldpunten. Elk beeldpunt (pixel = picture element) van je beeldscherm kan een aantal, bijvoorbeeld 256 verschillende kleuren aannemen. Deze instellingen bepalen de hoeveelheid informatie die nodig is om een beeld weer te geven. We kijken eerst naar het beeldscherm van de computer.
OPDRACHT Een voorbeeld. Stel dat je een oud beeldscherm hebt dat uit 800 x 600 pixels bestaat. Dat betekent dat je beeldscherm 800 pixels breed is en 600 hoog. We noemen dit ook wel de (scherm)resolutie. Voor elk pixel zijn 2 kleuren mogelijk: zwart en wit
Hoeveel bits zijn er nodig voor om aan elke pixel van het beeldscherm van 800 x 600 pixels een kleur te koppelen? En reken dit nu om naar mega bytes
Ook digitale foto’s of plaatjes bestaan uit een aantal pixels. We bekijken eerst een eenvoudige tekening.
OPDRACHT Download en installeer het programma Gimp. Zie: https://www.gimp.org/ Gimp is een open source alternatief voor Adobe Photoshop. Je kunt er dus mee tekenen. - Open Gimp en kies§ voor File -> New. - Maak het venster 400 x 300 pixels groot.
Teken een kruiwagen als in de figuur hieronder.
Sla de tekening achtereenvolgens op als: - kruiwagen1, bitmap (heb je ook verschillende opties voor) - kruiwagen2, een JPEG bestand - kruiwagen3, een GIF-bestand - kruiwagen4, een PNG-bestand
Onderzoek van elk bestand hoe groot het is geworden.
ls we de kruiwagen van de vorige opdracht opslaan krijgen we allereerst allerlei mogelijkheden om het plaatje als bitmap op te slaan. Een bitmap is een bestandsformaat voor plaatjes waarin elke pixel apart wordt opgeslagen. Bitmap bestanden krijgen de extensie “.bmp”.
Het plaatje van 400 x 300 pixels heeft in totaal 120 000 pixels.
monochrome bitmap Als de 120 000 pixels worden opgeslagen als monochrome (zwart-wit) bitmap is voor elk pixel slechts één bit nodig om de kleur te onthouden ( vb 0 = wit, 1 = zwart ). Er ontstaat een bitmap bestand van 120 000 bits = 15 000 bytes = 15 kB
16-kleuren bitmap Als de 120 000 pixels worden opgeslagen als 16 kleuren bitmap zijn voor elk pixel vier bits nodig om de kleur te onthouden ( vb 0 = wit, 1= …… , 15 = zwart ). Er ontstaat een bitmap bestand van 120 000 x 4 bits = 480 000 bits = 60 000 bytes = 60 kB
256-kleuren bitmap Als de 120 000 pixels worden opgeslagen als 256 kleuren bitmap zijn voor elk pixel acht bits nodig om de kleur te onthouden ( vb 0 = wit, 1= …… , 255 = zwart ). Er ontstaat een bitmap bestand van 120 000 x 8 bits = 960 000 bits = 120 000 bytes = 120 kB
24-bits bitmap Als de 120 000 pixels worden opgeslagen als 24 bits bitmap zijn voor elk pixel vierentwintig bits nodig om de kleur te onthouden. Er ontstaat een bitmap bestand van 120 000 x 24 bits = 2 880 000 bits = 360 000 bytes = 360 kB
In een bitmap bestand wordt kleurinformatie op een duidelijke manier opgeslagen maar niet op de slimst mogelijke manier. Je ziet dat een eenvoudig plaatje van een kruiwagen, opgeslagen als 24-bits bitmap, al 360 kB groot wordt.
OPDRACHT Zoek eens uit met wat voor resolutie jou smartphone foto's maakt. Hoe groot zou een foto zijn als je je foto's zou opslaan als 24 bits bitmap (bmp) bestand?
Vooral bij grotere bestanden, bijvoorbeeld bij een digitale foto van 5 miljoen pixels die in ware kleuren (16 miljoen kleuren) moet worden opgeslagen, is het belangrijk dat de kleurinformatie op een slimme manier wordt opgeslagen.
Door de kleurinformatie op een slimme manier en niet pixel voor pixel op te slaan kan de bestandsgrootte worden verkleind. Het verkleinen van bestanden door het gebruik van een slimme techniek noemen we compressie.
Run Length Encoding Een eenvoudige manier om data te comprimeren is de run length encoding. Run-length encoding, kortweg RLE, is het vervangen van herhalende patronen in data door het aantal herhalingen plus wat herhaald moest worden. Zie figuur hieronder:
Je ziet dat de figuren zich herhalen. Je zou deze informatie dus ook zo kunnen beschrijven en opslaan:
Nog een voorbeeld:
LET OP: Je begint eerst per rij met het aantal witte pixels. VAndaar dat je in rij 4 eerst 0 ziet.
OPDRACHT Teken de bijbehorende plaatjes
Drie bestandsformaten waarmee beeldbestanden (plaatjes, foto’s) verkleind kunnen worden zijn het JPEG-bestandsformaat,het GIF-bestandsformaat en PNG.
JPEG (Joint Graphics Experts Group) is een bestandsformaat voor afbeeldingen met veel kleuren en weinig scherpe kleurovergangen. JPEG is een bestandsformaat dat dus erg geschikt is voor digitale foto’s. JPEG bestanden krijgen als extensie “.jpg”.
Een digitale foto met echte kleuren (16,7 miljoen kleuren) heeft in principe voor iedere pixel 24 bits nodig om de kleur te onthouden.
JPEG verdeelt de foto in blokken van 8 bij 8 pixels en neemt het gemiddelde van de kleuren van deze 64 pixels. Het bewaart dit gemiddelde als de waarde voor de pixel linksboven in het blok. Daarvoor zijn 24 bits nodig.
Van de kleuren van de andere 63 pixels uit het blok wordt vervolgens het kleurverschil met de eerste pixel opgeslagen. Daarbij krijgen zoveel mogelijk pixels dezelfde kleur. Er hoeven voor de resterende 63 pixels niet meer zoveel bits gebruikt te worden, omdat het kleurverschil tussen een pixel in het blok en het gemiddelde niet zo groot is.
Is het kleurverschil tussen bij elkaar liggende pixels toch groot, dan zorgt de bovenstaande procedure ervoor dat de kleuren uitgesmeerd worden.
Detail van de toren rechtsboven waarop het uitsmeereffect te zien is. Bij JPEG-compressie gaat dus kleurinformatie verloren maar er wordt geheugen gewonnen.
GIF (Graphics Interchange Format) is een bestandsformaat voor afbeeldingen met weinig kleuren en scherpe kleurovergangen. GIF is een bestandsformaat dat dus erg geschikt is voor animatieafbeeldingen met vlakken van gelijke kleur, zoals bijvoorbeeld afbeeldingen van stripfiguren. GIF-bestanden krijgen als extensie “.gif”.
Hoe werkt GIF-compressie?
GIF-compressie wordt ook wel LZW-compressie genoemd naar de wiskundigen Lempel, Ziv en Welch, die de techniek verzonnen hebben. Bij GIF-compressie wordt een afbeelding gezien als een aantal horizontale lijnen van pixels. Vanaf linksboven wordt van de afbeelding steeds alleen de kleur en het aantal pixels dat die kleur moet krijgen opgeslagen.
De eerste twee lijnen van het eerste plaatje van de strip hierboven bestaan uit 100 groene pixels. Er hoeft voor die eerste lijnen dus slechts te worden opgeslagen “groen, 100”.
Bovendien is bij afbeeldingen, die geschikt zijn voor GIF-compressie, het aantal kleuren beperkt (vaak 256 kleuren) en hoeven er dus slechts 8 bits te worden gebruikt per kleur.
Colors: 256
File size: 6.00 KB
Colors: 128
File size: 5.24 KB
Colors: 64
File size: 4.48 KB
Colors: 16
File size: 2.11
PNG
Als alternatief voor GIF bestanden zijn sinds 1995 PNG (Portable Network Graphics) bestanden in het leven geroepen. In een PNG-bestand kan voor elke pixel niet alleen een rood-, groen- en blauwwaarde worden opgegeven, maar ook een transparantie (alpha-waarde). Het gevolg hiervan is dat elke pixel een bepaalde hoeveelheid transparantie kan hebben, bijvoorbeeld helemaal doorzichtig of gedeeltelijk doorzichtig met bijvoorbeeld wat donker rood eroverheen.
Vector-geörienteerd
Tekeningen worden meestal opgeslagen als bitmap: de kleur van elk pixel wordt opgeslagen.
Een tekening kan ook op een andere manier worden opgeslagen: vector-geörienteerd.
Als je bijvoorbeeld een cirkel tekent dan bewaart het programma in dit geval niet het bitpatroon, maar een reeks getallen die de tekening vastleggen : een getal voor het type tekening (een cirkel in dit geval), de straal, de lijndikte, de kleur van de lijn, de kleur van de vulling, en de coördinaten van het middelpunt.
Powerpoint werkt bijv. vector-geörienteerd.
Geluid bestaat uit golven. Dit geldt niet alleen voor tonen en muziek, maar ook voor gesproken taal. Hieronder zie je het golfpatroon van een paar woorden spraak, uitgesproken door een persoon en digitaal opgenomen.
Het geluidsfragment ziet er niet bepaald uit als een golf, maar eerder als een serie sprieten. Wanneer je een stukje van een duizendste seconde uitvergroot, wordt het golfpatroon duidelijker, als de rode lijn in het plaatje hieronder.
Geluid kan gedigitaliseerd worden door een groot aantal keren per seconde de hoogte van de golf (de amplitude) te meten. In het plaatje hieronder is dat weergegeven door de paarse balken. Om een goede digitale opname te krijgen, moet je dit duizenden keren per seconde doen. Dit heet sampling. Alle digitale geluidsformaten passen dit toe in een of andere vorm. Deze techniek voor het digitaliseren van geluid is niet uniek voor computers. Het wordt ook toegepast in muziek-CD's.
Zonder compressie is een minuut geluid een kleine 10MB. Daarom past er op een muziek-cd maar hooguit 80 minuten muziek.
Sample rate
Hoe vaak er snapshots worden genomen van de audio, drukken we uit in “Sample Rate”. Hoe hoger het aantal snapshots dat wordt genomen, hoe gedetailleerder het resultaat. In de wereld van digitale audio recording zijn/waren 44.1kHz en 48kHz de meest voorkomende Sample Rates. “Maar waar staat 44.1kHz nou precies voor?”, hoor ik je denken!
44.1kHz staat voor 44.100 “snapshots” die worden genomen per seconde. Bij 48kHz zijn dat dus 48.000 “snapshots” per seconde. Vandaag de dag kom je geluidskaarten tegen die recordings ondersteunen van maar liefst 96kHz of zelfs 192kHz. Dat zijn dus respectievelijk 96.000 en 192.000 “snapshots” per seconde.
Bit Depth
Waar Sample Rate verticale “snapshots” maakt, is Bit Depth gebaseerd op de resolutie(scherpte van de vertaling). Simpel gezegd; hoe hoger de Bit Depth van de “digitale vertaling”, hoe scherper het “vertaalde” resultaat is. Het resultaat is bij een hogere Bit Depth een mooie vloeiende golfvorm. Je kunt dus wel 44.100 “snapshots” maken met de Sample Rate, maar als de resolutie (Bit Depth) niet scherp genoeg is, is het resultaat nog steeds geen vloeiende golfvorm. Voor CD’s gebruik je 16Bit en voor DVD’s gebruik je 24Bit.
Sample rate en Bit depth
Je kunt het volgende onthouden om Sample Rate en Bit Depth uit elkaar te houden:
Sample Rate (kHz) geeft het aantal snapshots aan per seconde, en Bit Depth (bit) geeft aan hoe scherp (resolutie) deze snapshots uiteindelijk worden.
Opdracht
Stel dat je een muziekbestand hebt met 10 minuten muziek. De sample rate is 44.1 kHz en de bit depth is 24 bits. Hoe groot is het bestand dan (in megabytes)?
Compressie
Met compressie worden geluidsbestanden veel kleiner. Het bekendste gecomprimeerde geluidsformaat is MP3, wat staat voor MPEG-1 Layer 3, eigenlijk het geluidsspoor van een video-opname. In MP3 zie je dezelfde trucs als bij het comprimeren van beeld, zoals het slim opslaan van herhalingen. Ook de toonhoogte is beperkt, heel hoge tonen worden in MP3 niet opgenomen. De compressie is daardoor lossy, niet verliesloos.
Andere bekende geluidsformaten zijn wave (.wav) audio (.au) en midi. Verschillen tussen de formaten betreffen het aantal keren per seconde dat de hoogte van de golf gemeten wordt en de eventuele compressie die wordt toegepast.
Opdracht; Audacity
Zoek naar een mp3-bestand van je favoriete nummer.
Download en installeer Audacity op je laptop
Open Audacity en beluister enkele van de geluidsbestanden.
Je kunt een aantal geluidseffecten op geluiden toepassen. Deze staan in het menu 'Effect'. Je kunt ze gebruiken door eerst een deel van het geluid te selecteren en daarna het effect te kiezen. Een selectie maak je door de cursor linksboven te selecteren en daarna op de bekende manier een stuk geluid te selecteren.
Pas bijvoorbeeld een fade out toe op het laatste stuk van het geluidsbestand 'bubble'.
Converteer enkele van de geluidsbestanden van mp3 naar wav en naar aiff. Wat kun je zeggen over de omvang van deze bestanden?
Converteer een van de bestanden naar MP3, bitrate: 320 kbps Converteer vervolgens naar MP3, bitrate: 196 kbps Converteer daarna naar MP3, bitrate: 96 kbps
Welke bitrate vind je nog acceptabel klinken?
In dit hoofdstuk wordt behandeld hoe leestekens kunnen worden voorgesteld door informatie die bestaat uit reeksen 0-en en 1-en, digitale informatie.
Telecommunicatie: al honderden jaren zijn mensen in staat om op afstand met elkaar te communiceren. Indianen gebruikten rooksignalen om boodschappen te verzenden en telegrafen gebruikten Morse-code om boodschappen te verzenden. Hoewel deze vormen van communicatie van elkaar verschillen zijn er ook duidelijke overeenkomsten. Bij elke vorm van communicatie worden karakters (letters, cijfers, leestekens) vertaald in een code. We noemen dit karaktercodering. De code wordt verzonden en door de ontvanger gedecodeerd.
De coderingstechniek heeft sinds de uitvinding van de telegrafie in de 19e eeuw niet stilgestaan. De Morse-code werd vervangen door meer geavanceerde codes. Niet alleen de coderingsmogelijkheden zijn verder ontwikkeld, ook de technische mogelijkheden zijn verder ontwikkeld.
Tegenwoordig communiceren we met het grootste gemak via digitale communicatiemiddelen. Denk alleen al aan de chatmogelijkheden van Whatsapp of aan SMS.
In deze les wordt beschreven hoe de codering van karakters zich vanaf de telegrafie heeft ontwikkeld tot de codering die nu wordt toegepast in computers, de ASCII-codering.
Telegrafie en de Morse-code
Samuel Morse (1791-1872), een Amerikaans kunstenaar, werd in 1832 professor beeldende kunsten aan de universiteit van New York. Zijn interesse voor elektriciteit leidde tot de ontwikkeling van een telegrafische verbinding tussen Washington en Baltimore (1844).
De werking van deze telegrafische verbinding is als volgt. Een apparaat produceert elektrische pulsen (stroompjes). Deze pulsen worden via een koperdraad naar de ontvanger verzonden. Bij de ontvanger worden de pulsen omgezet in korte en lange tikken op een strook papier.
Morse maakte gebruik van korte en lange pulsen en had letters, cijfers en leestekens als volgt gecodeerd (Morse code):
In deze tabel is een “.” een korte puls en een “-“ een lange puls. Bij het verzenden van de letter “A” moest de Morse verzendsleutel achtereenvolgens één keer kort en één keer lang worden ingedrukt.
De ontvanger krijgt de boodschap in de vorm van korte en lange tikken op een strook papier.
Opdracht Een bekende Morse boodschap is SOS (“Save Our Souls”): ... --- ... De eerste boodschap die Samuel Morse in 1844 verstuurde was:
What hath God wrought?
Vertaal deze Morse boodschap.
Morse had zijn codering zo slim mogelijk in elkaar gezet. Letters die vaak gebruikt worden, zoals de letter “E”, worden met weinig pulsen gecodeerd: “.”. Dat maakt de boodschappen zo kort mogelijk.
Merk op dat er geen codering is voor een spatie. Dat was ook niet nodig. Een spatie was bij telegrafie gewoon een korte pauze. De strook van de ontvanger wordt in deze pauzetijd doorgetrokken zodat vanzelf een tussenruimte tussen de karakters ontstaat.
Pas na de uitvinding van de radiogolf in 1888 door de Duitser Heinrich Hertz (1857-1894) en de toepassing daarvan bij radioverbindingen in 1894 door de Italiaan Guglielmo Marconi (1874-1937) kon de Morse code ook via radiogolven verzonden worden. Ook zonder koperdraadverbinding konden de pulsen worden verzonden en ontvangen en dan wel in de vorm van korte en lange pieptonen. Dat had grote gevolgen voor de bruikbaarheid van de Morse code. Je kent waarschijnlijk wel de beelden uit films over de Tweede Wereldoorlog waarin communicatie tussen schepen via telegrafische verbindingen verliep.
Zoals het zo vaak gaat in de techniek lopen mensen op een gegeven moment aan tegen beperkingen van een bepaalde techniek en gaan dan nadenken over mogelijke verbeteringen. Een beperking van de Morse code is dat verschillende leestekens gecodeerd worden met symbolen of pulsreeksen van verschillende lengtes. Dat maakt dat bij het telegraferen met Morse code de ontvanger altijd zijn berichten moet decoderen door of de strip met tikken te “lezen” of nauwlettend de binnenkomende pieptonen te beluisteren. Bij het decoderen is dus altijd menselijke deskundigheid vereist.
Rond 1940 startte de ontwikkeling van de computer. Twintig jaar later voorzag Bob Bemer, werkzaam bij IBM, dat de computer een rol zou gaan spelen in communicatie. Bemer inventariseerde 60 verschillende karaktercoderingen bij de verschillende computers die in de loop der tijd waren ontstaan, zette een groep mensen aan het werk om een universele code te ontwikkelen en publiceerde de onderzoeksresultaten.
Het resultaat is de ASCII code (American Standard Code for Information Interchange), voor het eerst erkend in 1963: https://www.asciitable.com
Deze basistabel bestaat uit 128 karakters. Aan de hand van de tabel kan elk karakter worden voorgesteld door een binaire code van 7 bits. Hoe werkt deze code?
Voorbeeld: De letter “a” is het 98e karakter in de tabel en heeft dus als bijbehorend nummer “97” (het eerste karakter is de “NUL” en heeft het bijbehorende nummer “0”). De ASCII code van de letter “a” is dus het binaire getal: 1100001.
In totaal kunnen er met 7 bits 27 = 128 codes worden gemaakt. Dat maakt de codering natuurlijk niet tot een wereldwijde standaard codering die in alle taalgebieden bruikbaar is.
Opdracht Geef de hexadecimale representatie van onderstaande ASCII-tekst: "Hallo Luuk!" Opdracht Bepaal welke ASCII-tekst hier hexadecimaal is weergegeven:
Opdracht Maak een bestand in notepad of een soortgelijke editor. Zet er een stukje tekst in. Open het bestand vervolgens met een hexdump programma. Op een mac of op linux zou je via de terminal het programma hexdump kunnen gebruiken. Je zou dit ook online kunnen doen. Zie: https://hexed.it/
Computers en randapparatuur werken over het algemeen met bytes, series van 8 bits. Als achtste bit van de ASCII code wordt traditioneel een pariteitsbit toegevoegd. Het doel van deze extra bit is om foutcontrole mogelijk te maken.
Als voorbeeld bekijken we de letter “E” = 69 = 1000101. Bij geen pariteit wordt standaard een “0” toegevoegd aan de ASCII code, zodat de “E” wordt gecodeerd als 10001010.
Bij oneven pariteit wordt gekeken naar het aantal enen in de code. Is dit aantal oneven, dan wordt een “0” toegevoegd om het aantal enen oneven te houden en is het aantal even, dan wordt een “1” toegevoegd om het aantal enen oneven te maken. De letter “E” wordt bij oneven pariteit dus gecodeerd als 10001010.
Bij even pariteit wordt gekeken naar het aantal enen in de code. Is dit aantal even, dan wordt een “0” toegevoegd om het aantal enen even te houden en is het aantal oneven, dan wordt een “1” toegevoegd om het aantal enen even te maken. De letter “E” wordt bij even pariteit dus gecodeerd als 10001011.
Opdracht: Codeer het woord "montessori" met even pariteit. Laat je buurman jou woord decoderen en kijk of het klopt.
Wanneer bij even pariteit toch een byte wordt ontvangen met een oneven aantal bits, dan weet de ontvangende partij dat er een fout is opgetreden.
Om aan te geven dat een boodschap goed is ontvangen kan door de ontvangende partij gebruik gemaakt worden van de code:
en om aan te geven dat een boodschap niet goed is ontvangen kan gebruik gemaakt worden van de code:
Unicode
Vanaf 1991 werd er gewerkt aan een universele karaktercodering waarbij alle karakters, die er op de wereld worden gebruikt, in één tabel zijn opgenomen. Deze code wordt ook wel Unicode genoemd. Vanaf 1991 (Unicode 1.0) is Unicode uitgebreid met allerlei alfabetten, tekens en symbolen.
De meest recente versie van Unicode is een 32-bits codering, hetgeen betekent dat er ruimte is voor 232 = 4294967296 verschillende karakters. Dat is ook wel nodig, want alleen al de Chinese taal kent duizenden karakters.
Een computer is een elektronisch apparaat en bestaat uit miljarden schakelaars die aan en uit kunnen staan. De schakelaars zijn dus 0 of 1. Allerlei soorten informatie moeten door 0-en en 1-en voorgesteld kunnen worden. Niet alleen getallen, maar ook tekst, geluid, plaatjes, enz. Dat betekent dat er afspraken zijn gemaakt op welke manier al die informatie wordt gecodeerd met 0-en en 1-en
De informatie eenheid van de computer is de bit (binary digit), het kleinst mogelijke stukje informatie. Een bit heeft de waarde 0 of 1. Met één enkele bit is het al mogelijk om informatie te coderen, bijvoorbeeld:
0
1
0
1
uit(0)
aan(1)
nee(0)
Ja(1)
False(0)
True(1)
Wit(0)
Zwart(1)
Een bit wordt in de computer meestal weergegeven in het geheugen door een transistor die aan of uit staat of een condensator die geladen of ontladen is.
Wanneer data door een telefoondraad worden gezonden, worden hoge en lage tonen gebruikt voor nullen en enen. Op magnetische schijven, zoals een harde schijf, worden de bits weergegeven door de richting van het magnetische veld op de oppervlakte van de schijf, Noord-Zuid of Zuid-Noord.
Audio CD’s, CD-ROM’s en DVD’s bewaren bits optisch—het deel van het oppervlakte dat voor 1 bit staat reflecteert het licht of juist niet
Een bit alleen zegt niet zo veel, dus zijn bits meestal gegroepeerd in groepjes van 8 die de getallen 0 tot 255 kunnen weergeven. Een groep van 8 bits heet een byte. De snelheid van een computer wordt bepaald door het aantal bits dat het in een keer kan verwerken. Een 32-bit computer bijvoorbeeld, kan 32-bits in een handeling verwerken, terwijl een 16-bit computer de 32-bit getallen eerst in kleinere stukken moet delen wat het dus langzamer maakt. Uiteindelijk zijn het alleen bits en bytes die een computer gebruikt om tekst, getallen en alle andere informatie op te slaan en te verzenden.
Wij gebruiken het tientallig of decimale talstelsel omdat wij het handig vonden om met 10 vingers te rekenen. Een computer heeft niet zoveel 'vingers'. Zoals gezegd werkt hij slechts binair (met 0'en en 1'en). Een binair getal is een reeks van cijfers, waarbij elk cijfer gekozen kan worden uit de cijfers 0 en 1.
Zo is het getal 00110100 dus een binair getal dat bestaat uit 8 bits. Welke decimale waarde hoort bij dit getal?
Net zoals in decimale getallen elk cijfer een veelvoud is van een macht van 10 is in binaire getallen elk cijfer een veelvoud van een macht van 2. De waarde van het binaire getal 00110100 is dus te berekenen en wel als volgt:
Macht
dus
0
2 ^ 7
0
0
2 ^ 6
0
1
2 ^ 5
32
1
2 ^ 4
16
0
2 ^ 3
0
1
2 ^ 2
4
0
2 ^ 1
0
0
2 ^ 0
0
Het binaire getal 00110100 heeft dus de waarde 4 + 16 + 32 = 52.
Een eenvoudige manier om de waarde van een binair getal te berekenen is om de bijbehorende machten van 2 onder de bits te zetten:
0
0
1
1
0
1
0
0
128
64
32
16
8
4
2
1
Het grootste getal dat je met acht bits dus kunt maken is dus het getal: 11111111 = 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255
Rekenen met binaire getallen Nu je kennis hebt gemaakt met binaire getallen wordt het tijd om ook binair te leren rekenen. We tellen de getallen 00110100 (52) en 01110111 (119) op. Het resultaat is 10101011 (171):
1 + 1 = 0 omdat 1 (keer 8) + 1 (keer 8) samen 0 (keer 8) en 1 (keer 16) is
De regel “één onthouden” (als een optelling van twee cijfers de 2 overschrijdt) kan je dus ook hier toepassen !
Maak van de volgende decimale getallen een binair getal:23 57 69 199
Maak van de volgende binaire getallen een decimaal getal: 01010101 00100100 11110111 00001000
Tel de volgende binaire getallen binair bij elkaar op 11001100 en 00110011 00101001 en 01110101
Wat is het grootste getal dat je kan maken met 16 bits ?
Vermenigvuldig 00110100 (52) met 2. Welk binair getal is de uitkomst ? Wat valt je op?
Kijken we nou naar de letter A, dan zou je dat als volgt kunnen comprimeren:
Welkom in de HTML-CSS-0 module! Werk hieronder de lesbrieven af volgens je planner.
Soms maken we gebruik van korte opsommingen of lijstjes. Bijvoorbeeld de volgende lijstjes: Dingen die ik leuk vind:
Gamen
Programmeren
Lego
Maar ook het volgende lijstje:
Top 3 favoriete films:
The Lion King
Toy Story
Bambi
Dit kunnen we ook in HTML doen! Hiernaast zie je de hele code, geen paniek als je hem nog niet helemaal begrijpt. We leggen hem hierna helemaal uit.
Het is belangrijk om het verschil te zien tussen de beide lijstjes. Het ene lijstje heeft puntjes, dit noemen we een ongesorteerde lijst. Om een ongesorteerde lijst te maken gebruiken we de <ul>-tag. Vervolgens moet je voor elk item op de lijst aangeven dat het een lijst item is. Dit doe je met de <li>-tag.
Daarnaast zijn er lijsten die nummertjes vooraan hebben staan. Dit zijn gesorteerde lijsten, bijvoorbeeld om een top 3 aan te geven. Om een gesorteerde lijst te maken gebruiken we de <ol>-tag. Vervolgens moet je ook hierbij voor elk item op de lijst aangeven dat het een lijst item is. Dit doe je met de <li>-tag.
[1] In de website die je net hebt gemaakt vertel je al een paar dingen over jezelf. Je gaat hier nu ook een lijstje aan toevoegen. Kies een van kopjes die je eerder hebt gemaakt en voeg hier een ongesorteerd lijstje aan toe met minimaal 3 items. Je mag zelf kiezen bij welk kopje je dit lijstje zet.
[2] Nu ga je op je site ook een top 5 van je favoriete films, games of artiesten maken. Hiervoor maakt je eerst een nieuwe kopje aan zoals je hebt geleerd bij leskaart 1. Schrijf ook een korte introductieparagraaf over je top 5. Gebruik nu een gesorteerde lijst om je top 5 op je site te zetten. Een voorbeeldje zie je hiernaast: Je mag iets anders doen, als je maar gebruik maakt van een gesorteerde lijst.
[3] Vond je dit eigenlijk wel makkelijk en wil je wat ingewikkelds proberen? Dan hebben wij een uitdaging voor je! Kun je een lijst in een lijst maken? Tip: je hebt nu tags in tags nodig. Probeer maar eens wat en als je er niet uitkomt vraag het dan aan de begeleiders.
Een talstelsel dat wij bij het computergebruik ook tegenkomen is het hexadecimale talstelsel. Hierbij worden niet de bouwstenen “0 en 1” (binair) of “0 t/m 9” (decimaal) gebruikt maar de bouwstenen “0 t/m 9 en letters A t/m F”.
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Een hexadecimaal getal is een reeks van cijfers, waarbij elk cijfer gekozen kan worden uit de cijfers 0 t/m 9 en letters A t/m F. Zo is het getal 2AF3 dus een hexadecimaal getal dat bestaat uit 4 cijfers. Welke decimale waarde hoort bij dit getal?
Net zoals in decimale getallen elk cijfer een veelvoud is van een macht van 10 is en in binaire getallen elk cijfer een veelvoud is van een macht van 2 is in hexadecimale getallen elk cijfer een veelvoud van een macht van 16. De waarde van het hexadecimale getal 2AF3 is dus te berekenen en wel als volgt:
Macht
dus
2
16 ^ 3 ( * 2 )
4096 * 2
A
16 ^ 2 ( * 10)
256 * 10
F
16 ^ 2 ( * 15)
16 * 15
3
16 ^ 0 ( * 3)
1 * 3
Het hexadecimale getal 2AF3 heeft dus de waarde 3 + 240 + 2560 + 8192 = 10995 Een eenvoudige manier om de waarde van een hexadecimaal getal te berekenen is om de bijbehorende machten van 16 onder de bits te zetten:
2
A
F
3
4096
256
16
1
3 x 1 + F x 16 + A x 256 + 2 x 4096 = 3 x 1 + 15 x 16 + 10 x 256 + 2 x 4096 = 10995
Hexadecimale getallen zijn pas echt handig omdat je ze heel gemakkelijk kunt omzetten naar binaire getallen en andersom. DIt komt omdat 1 hexadecimaal cijfer precies uit te drukken is met een getal van 4 binaire cijfers. Hieronder een tabel:
binair
hexadecimaal
0000
0
0001
1
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
1000
8
1001
9
1010
A
1011
B
1100
C
1101
D
1110
E
1111
F
Deze tabel kun je nu gebruiken om binaire getallen naar hexadecimale getallen om te zetten en andersom. Je maakt groepjes van 4 en kijkt naar de bijbehorende waarde in de tabel:
Voorbeeld: Zet het volgende binaire getal om naar naar hexadecimaal: 0101010101010101001010111
Eerst onderverdelen in groepjes (rechts beginnen
0
1010
1010
1010
0101
0111
Zoek dan de juiste waarde erbij uit de tabel boven.
0
1010
1010
1010
0101
0111
0
A
A
A
A
7
Dus: AAAAF
Voorbeeld: zet het volgende hexadecimale getal om naar binair: BC57
B
C
5
7
1011
1100
0101
0111
Dus: 1011 1100 0101 0111
Maak van het volgende hexadecimale getal een decimaal getal: C2B3
Maak van het volgende decimale getal een hexadecimaal getal: 7824
Wat is het grootste hexadecimale getal van 8 cijfers ?
Zet de volgende hexadecimale getallen om naar binair: A1B9F & AD0BE
Zet de volgende binaire getallen om naar hexadecimaal: 101010101111 & 111000110101011111
Er zijn drie soorten lettertypes die je gebruikt
Met schreef: sierlijke letters, mooi als kopje of als header. Dit lettertype lees op papier het lekkerst, niet op het scherm.
Zonder schreef: strakke letters, lezen het lekkerste op het scherm. Prima voor tekst.
Monospace: voor letters die allemaal even groot zijn, Een i neemt evenveel ruimte in als een m, dit is wel eens handig als je wat wilt uitlijnen of benadrukken.
Voorbeelden:
Dit is schreef
Dit is schreefloos
Dit is monospace
Je kunt ook meerdere lettertypes in één keer instellen.
De browser probeert eerst Verdana te vinden. Als dat niet bestaat dan probeert hij Geneva te vinden enzovoort.
Niet op ieder besturingssysteem bestaan dezelfde lettertypes.
Cascading Style Sheet betekent dat een stijl ook toegepast wordt op 'kinderelementen'.
Hiernaast zie je een <h1>
-element in de <body>
staan.
<h1>
is dan een kind van <body>
en krijgt (erft) dezelfde stijl.
Het <p>
-element erft ook de stijl van de <body>
.
Je kunt <h1> een ander font geven door dat in je CSS aan te geven.
Het <h1>
-element heeft een ander lettertype dan de <body>
. Je ziet namelijk dat er een ander font is aangegeven. Het <p>
-element heeft nog steeds hetzelfde lettertype als de <body>
; Er is in de CSS geen ander lettertype gekozen.
In CSS kun je groottes op verschillende manieren aangeven. Hiernaast zie je lettergrootte in pixels.
Italic om tekst schuin te laten zien. Wil je niet meer schuin, gebruik je normal.
Gebruik hoofdletters, maar dan klein weergegeven.
Font-weight (bold, normal)
Dikgedrukte tekst, of juist niet dikgedrukt.
[1] Ga verder met het bestand uit de vorige leskaart. Pas bovenstaande font-opties toe op elementen in je pagina. Probeer ze allemaal uit op verschillende HTML-elementen.
[2] Maak de opdracht op repl.it.
Je kunt ook tabellen maken met HTML. Zoals je weet bestaat een tabel uit rijen en kolommen. Een tabel maak je met de <table>-tag. Voor elke rij die je in de tabel wil, zet je een <tr>-tag tussen de <table>-tag. En per kolom zet je een <td>-tag in de . Vergeet de <tr> en <td>-tags niet af te sluiten.
We gaan de tabel uitbreiden met nog een rij. Denk erom dat de nieuwe rij ook weer twee kolommen moet hebben.
Cool hé? Je mag natuurlijk meer rijen en kolommen maken, maar er is één belangrijke voorwaarde: Het aantal kolommen per rij moet voor iedere rij gelijk zijn!
Als we een tabel willen hebben met lijntjes, dan kunnen we in de table-tag een border opgeven van bijvoorbeeld 1 pixel.
Probeer het uit in je 'eigen' site...
Meestal zet je in de eerste rij van je tabel de titel van een kolom. Die wil je dan ook dikgedrukt maken. Dat gaat automatisch als je in de eerste rij de <th>-tag gebruikt, i.p.v. de <td> -tag.
Je mag naast tekst ook plaatjes of linkjes in een tabel zetten. Dat doe je door ze in de <td>-tag te plaatsen.
[1] Maak een nieuwe alinea onderaan je webpagina. Zet er een kopje boven met de tekst Top 5 beste sporters.
[2] Maak nu een tabel met zes rijen en drie kolommen. Zet daarin jouw top 5 van de beste sporters.
[3] Pas de tabel nu zo aan, dat je kan klikken op de naam van de sporter. Als je er op klikt, dan kom je op een Wikipedia-pagina waar je wat meer informatie kan vinden over de desbetreffende speler.
[4] Maak nu een vierde kolom per rij. In deze vierde kolom zet je een kleine foto van de speler in de tabel. Je kunt met Google zoeken naar kleine foto's door de Zoekhulpmiddelen te gebruiken. Kies bij de grootte voor Gemiddeld (zie pijltje hieronder).
Je zou ook het formaat van een grote foto kunnen verkleinen. Daarvoor stel je of de breedte of de hoogte van een <img>-tag in. Dat ziet er dan bijvoorbeeld zo uit:
Elke HTML-pagina begint met <!DOCTYPE html> Daarmee zeg je tegen je browser: Let op! Je krijgt nu HTML-code voor je kiezen. Daarna zie je een <html>-tag dat helemaal onderaan wordt afgesloten met</html>. Binnen de <html>-tag heb je een <head> en een <body> tag. In de <head>-tag kun je de titel van de pagina zetten in het de <body>-tag zet je eigenlijk alles wat je op de pagina wilt zien.
Wil je tekst op je webpagina zetten, dan zet je dat dus in de body van je code. Dat betekent dus tussen <body> en de </body>
Je kunt ook de titel van je webpagina aanpassen. De titel is het stukje tekst dat je bovenaan je webbrowser te zien krijgt.
Je kunt de inhoud van je body verder uitbreiden met allerlei leuke dingen. Laten we beginnen met het maken van een kopje. Hiervoor kunnen we de <h1>-tag gebruiken.
Naast de <h1> -tag heb je ook de <h2>, <h3>, <h4>, <h5> en <h6> tag. Hoe groter het getal, hoe kleiner de letter zullen zijn. Denk er wel om dat je de tags weer netjes aflsluit.
Je kunt ook alinea's aanmaken. Dat doe je met de <p>-tag.
[1] Installeer Atom, maak een map en daarin je eerste webpagina. Noem het bestand index.html. Zie hier de installatie video
[2] Verander de titel van je website naar "Een pagina over mijzelf". Denk erom dat je deze tekst tussen <title> en </title> dus gaat aanpassen.
[3] Maak nu drie <H1>-tags aan op je pagina. Noem de eerste "Over mijzelf", de tweede "Hobbies" en de derde "Contact". Dit moet er zo uit komen te zien:
Over mijzelf Hobbies Contact
[4] Zet onder elke <h1>-tags een paragraaf waarin je iets zinnigs verteld over jezelf. Je hobbies en over je contactgegevens. Je hoeft niet zoveel te schrijven hoor. Een regel per kopje is meer dan genoeg. Zie hieronder een voorbeeld:
Over mijzelfIk ben jan en ben 12 jaar oud. Ik woon in Amsterdam
HobbiesIk zit op voetbal en houd van minecraf
CONTACTJe kunt mij bereiken op jan@jan.nl
Belangrijk! Gebruik altijd je school e-mail adres of iets dergelijk. Zet niet je telefoonnummer of adres op internet.
Heb je het af? Cool! Je bent dan klaar met deze leskaart. Je kunt met de volgende leskaart aan de slag kan gaan. We gaan de pagina met de komende leskaarten opleuken met foto's, linkjes en nog veel meer!
Kleuren kun je op meerdere manieren aangeven
Er zijn ingebouwde kleuren zoals red, green, blue en veel meer Kijk voor meer kleurnamen hier: w3schools kleuren
Je kunt de RGB waarde van een kleur opgeven. (We leggen RGB zo uit).
rgb(0, 51, 153)
rgb(0%, 25%, 71%)
#00AF32 of #A02 (dit is #AA0022)
RGB staat voor Red Green Blue
Je geeft steeds aan hoeveel rood, groen en blauw je wilt. De kleur is dan de mix die jij aangeeft.
In #00AF32 zie je ook letters. Je gebruikt dan hexadecimale getallen. De volgorde daarvan is: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
Als je goed telt zijn er dus 16 waardes mogelijk.
0 betekent niets van de kleur en F juist zo veel mogelijk.
rgb(0, 51, 200)
Getallen van 0 t/m 255; 0 is niets, 255 maximaal
Mix hier geen rood, beetje groen en veel blauw
#00AF32
Gebruik twee karakters per kleur
geen rood (00), veel groen (AF) en beetje blauw (32)
Kijk voor meer kleurcodes op:
Je kunt als achtergrond ook een plaatje gebruiken op je website.Je gebruikt dan de eigenschap background-image
.
Standaard zal je plaatje niet één keer getoond worden; het plaatje wordt herhaald. Dus naast elkaar en daarna ook onder elkaar. Als je dat anders wilt kan dat!
Je kan het plaatje ook op een andere plek zetten met background-position
Je kunt uitlijnen met bijvoorbeeld right / left en top
Je kunt ook een positie in pixels of in procenten weergeven.
Je plaatje niet laten meebewegen als je scrollt:
[1] Geef de elementen in je pagina verschillende kleuren. Oefen met de drie verschillende manieren om kleuren aan te geven.
[2] Voeg een achtergrondplaatje toe aan je website. Kun je ervoor zorgen dat:
Het plaatje maar één keer getoond wordt,
Niet mee scrolt met de pagina,
Op een andere plek komt?
[3] Maak de opdracht in repl.it
Vaak wil je een deel van een andere pagina in jouw eigen pagina opnemen. Denk bijvoorbeeld aan een Youtube filmpje, of een interactieve Google maps kaart. Dit heet 'insluiten' of 'embedding'. Veel pagina's hebben hiervoor functies ingebouwd.
Zie de voorbeelden van youtube.
Je klikt eerst op 'Share' of 'Delen'. Daarna kies je 'Embed' of 'Insluiten'.
Je krijgt nu een schermpje waarin een stuk html-code staat die begint met:
<iframe … Zorg dat je de hele regel kopieert. Dus helemaal tot en met de afsluitende </iframe>-tag.
Dus bijvoorbeeld:
<iframe width="560" height="315" src="https://www.youtube.com/embed/rYFjIx0OBAI" frameborder="0" allowfullscreen></iframe>
Zet de regel code in je pagina en je bent klaar!
Bij Google maps gaat het op soortgelijke manier.
Je zoekt een plek op waarvan je de interactieve kaart wilt hebben.
Dan klik je op 'Delen'. Kies vervolgens 'Kaart insluiten' en neem de regel code over die begint met <iframe …
De grootte kun je weer aanpassen door width en height te veranderen in de regel code.
Je kunt met het <iframe> element ook andere webpagina's invoegen. Let wel op want sommige pagina's laten dit niet toe.
[1] Voeg een favoriete video in in je pagina met behulp van een iframe
[2] Voeg een interactieve kaart in in je pagina van de plek waar je school staat
[3] Probeer een andere pagina in te voegen. Kijk voor meer hulp: https://www.w3schools.com/tags/tag_iframe.asp
Met Cascading Style Sheets (CSS) kun je de opmaak van je webpagina veranderen. Wij leren je een extern stylesheet te gebruiken.
Je gebruikt een apart bestand voor je CSS.
Let duidelijk op de naam van je bestand en het valt je wellicht op dat deze in een andere folder zit dat je basis html bestand!
In je CSS-bestand maak je stijlregels.
Je selecteert welk HTML-element wilt wijzigen. Daarna tussen geef je tussen { en } aan wat je wilt veranderen. Dit doe je met eigenschap: waarde; tweetallen.
In je CSS bestand ziet het er uit
Je kunt ieder HTML-element selecteren met de selector.
En je kunt meerdere eigenschappen tegelijk veranderen.
Maak een extern css bestand aan
Ga naar je HTML-CSS map
Maak een nieuwe map Style
Maak in de map sylte een nieuw bestand
Noem het bestaat: opmaak.css
Zet de regel met <link ...> in de <head> van je index.html bestand
<head>
<title>Mijn pagina</title>
<link rel = "stylesheet" href="style/opmaak.css">
</head>
Zet de code hieronder in je opmaak.css.
body {
background-color: red;
}
Sla je bestanden op en kijk of het ewrkt in je browser! Als het goed is, is de achtergrondkleur van je webpagina nu rood.
Breid je css:
1. Voeg <h1>, <h2> en <p> elementen toe aan je index.html bestand
2. Zet de stijlregels zoals hieronder in je opmaak.css bestand.
3. Sla alles op en test of het werk
body {
background-color: green;
}
h1 {
text-align: right;
}
h2 {
text-align: center;
}
p {
text-align: justify;
}
Je website ziet er in je browser vaak niet meteen uit zoals je wilt.
Met behulp van de browser development tools kun je het boxmodel zien en welke CSS wordt gebruikt door de browser.
Je vindt de tools met:
Rechts klik op je pagina -> inpsecteren
Een sneltoets (F12 of CTRL-SHIFT-i)
In de vorige les heb je in het boxmodel gezien dat buiten de border de marge (margin) zit. Je kunt hiermee dus ruimte tussen bijvoorbeeld twee <p>
-elementen maken.
Veel elementen krijgen standaard een marge van de browser (en dit verschilt per browser).
Als je in je hele pagina zonder marge wilt beginnen, dan zet je de code hiernaast bovenin je CSS bestand.
Margin hoeft niet aan elke kant hetzelfde te zijn. Je kunt margin-top, margin-bottom, margin-left of margin-right gebruiken om andere marges te krijgen. Of je geeft na margin vier waardes mee.
Je kunt margin ook in een percentage geven.
Dit is dan ten opzichte van het ouderelement (het element waar dit element in zit).
padding is de ruimte tussen de inhoud en de border (denk aan het boxmodel van vorige les)
Verder werkt padding hetzelfde als margin.
Je kunt dus padding per kant instellen met padding-top, padding-right enzovoort.
Ook kun je weer met px of % werken en in één regel padding instellen.
[1] Zet bovenaan je .css bestand de volgende stijlregel:
[2] Stel nu de marges voor alle elementen in je pagina in zoals je het zou willen hebben!
[3] Stel nu ook padding in voor alle elementen in je pagina. Zorg dat het er mooi uit komt te zien!
[4] maak de opdracht in repl.it
De elementen <p>
, <h1>
, <body>
, <ul>
zijn voorbeelden van block elementen. Er zijn ook inline elementen zoals <a>
, <span>
etc. Later leer je het verschil tussen inline en block elementen.
Je kunt deze blockelementen in je pagina zien als een doos (een box) met een inhoud erin.
Van buiten naar binnen zie het volgende:
margin (ruimte tussen de rand en het parent element)
border (de rand om het element)
padding (de ruimte tussen de inhoud en de rand)
de inhoud zelf
Bij blockelementen kun je de inhoud een hoogte en breedte geven. Voor één element is het boxmodel simpel genoeg. In een website heb je natuurlijk veel elementen die ook nog in elkaar zitten. Dus het kan behoorlijk complex worden! Ouder- en kindelementen (parent en child) horen bij elkaar. In de code hiernaast zie je:
<html> <- parent van <body>
<head> <- child van <html>
<body> <- parent van <ul>, child van <html>
<ul> <- parent van <li>, child van <body>
<li>
We beginnen met de randen (borders).
Een border heeft altijd 3 eigenschappen:
de dikte van de rand
de kleur van de rand
het type (dotted, dashed, solid, double, groove, ridge, inset, outset, none) - (none betekent geen rand)
Je kunt ook ronde borders maken Je geeft dan de radius (straal) van de ronding op. Je doet dit voor iedere hoek apart en de volgorde is: linksboven, rechtsboven, rechtsonder, linksonder Je kunt ook in een keer alle hoeken gelijk maken.
[1] Maak borders om een aantal elementen in je pagina.
[2] Experimenteer met verschillende borders! Met ronde hoeken, verschillende stijlen enzovoort.
In HTML kun je een lijst maken met <ul>
(unordered / bolletjes) of <ol>
(ordered / genummerd). Je gebruikt voor ieder item op de lijst <li></li>
. Met CSS kun je het soort lijst veranderen dus je hoeft eigenlijk alleen <ul>
te gebruiken.
We kunnen de hele lijst en de elementen apart stijlen:
Met de list-style
kunnen we de soort lijst veranderen. Je geeft drie dingen mee.
position: opsomming binnen of buiten het kader (inside / outside)
type: rondje, vierkantje etc (disc, circle, square, decimal, upper-roman, lower-roman, upper-alpha, lower-alpha, none)
image: eventueel een plaatje als opsommingsteken
We gaan nu een menu maken met een lijst.
We gebruiken de eigenschap display: inline;
om de <li></li>
naast elkaar weer te geven. We gebruiken ook float: left
; om te zorgen dat de elementen netjes links tegen elkaar aan komen te staan.
LET OP! We leggen hier niet verder uit wat float en inline precies doen. Dat komt in latere modules. Gebruik de eigenschappen verder nog niet in je pagina.
We voegen de code hieronder toe. Margin zorgt ervoor dat er geen ruimte naast het menu komt en overflow: hidden;
zorgt ervoor dat de achtergrondkleur te zien is over de hele breedte. Wat we hierna gaan toevoegen zorgt voor mooier opgemaakte links in je menu. We willen namelijk:
een andere kleur
geen onderstreepte links
We zetten de kleur van links op wit en text-decoration: none;
om de onderstreping weg te halen.
Merk op: Als je op een link geklikt hebt blijft de kleur nog steeds wit!
We halen nu eerst de rand weg. Verder willen we dat je
op het hele blokje van een link kunt klikken
meer ruimte om de link hebt
We gebruiken display: block;
zodat je overal kunt klikken (niet alleen op tekst). Met padding zorgen we voor meer ruimte om de tekst. Als laatste willen we nog dat de kleuren veranderen als je er met je muis overheen gaat. Hiervoor gebruiken we: :hover.
1] Maak zelf een mooi menu in je pagina
Een tabel maak je met de volgende elementen:
<table>
- Alles binnen <table>
en </table>
<th>
- (Optioneel) kolomkop (tableheader)
<tr>
- Rij in de tabel (tablerow)
<td>
- Inhoud van de cel (tabledata)
Voorbeeld code met bijbehorende tabel:
Belangrijk: iedere rij heeft hier precies 2 cellen. Want er zijn 2 kolommen gemaakt.
Je kunt ook een cel maken die twee, drie of meer kolommen breed is. Je gebruikt dan:
<td colspan="2"> <!-- 2 kolommen breed -->
of <th colspan="2">
Je kunt ook een cel maken die twee, drie of meer rijen hoog is. Je gebruikt dan:
<td rowspan="3"> <!-- 3 rijen hoog -->
Je kunt de inhoud van tabellen opmaken zoals je zou verwachten. De randen van een tabel werken ook zoals met andere elementen. Als je overal randen wilt, zul je zowel <table>
, <th>
als <td>
een border moeten geven.
Je ziet dat de randen eigenlijk dubbel getekend worden. Om de randen te laten samenvallen (collapse) gebruiken we de tabel-eigenschap: border-collapse: collapse;
[1] Voeg een tabel toe aan je eigen pagina. De inhoud moet natuurlijk passen bij je eigen pagina.
[2] Zorg ervoor dat meerdere kolommen en / of rijen samengevoegd worden.
[3] Voeg borders toe en geef ze een mooie kleur.
Met classes kun je meerdere elementen selecteren uit je pagina. Zo kun je bijvoorbeeld sommige <p>
elementen een andere kleur geven dan andere <p>
elementen.
Je doet dit door in de HTML-tag te zetten: class="naam"
Dit heet een attribute (eigenschap).
Vervolgens gebruik je in CSS de . (punt) om aan te geven dat je een class selecteert.
Je kunt dus p.rood
gebruiken om alle paragrafen met class="rood"
te selecteren.
Je kunt ook .rood
gebruiken om alle elementen met class="rood"
te selecteren.
Met een id kun je één element uit je pagina selecteren. Als meerdere elementen hetzelfde id hebben, dan wordt alleen de eerste geselecteerd.
Je doet dit door in de HTML-tag te zetten: id="uitleg"
Vervolgens gebruik je in CSS de # om aan te geven dat je een class selecteert.
Je kunt nu ook beginnen met een #:
[1] Maak een nieuwe html pagina en noem deze vragen.html
.
Neem de volgende code erin over:
[2] Voeg aan alle vragen (uit vragen.html
) de class “vraag” toe en aan alle antwoorden de class “antwoord”. Voorbeeld:
[3] Selecteer de twee classes in je css.
Geef de vragen een achtergrondkleur en een letterkleur.
Geef de antwoorden dezelfde achtergrondkleur en een letterkleur!
Je kunt nu de antwoorden niet lezen tenzij je ze met de muis selecteert.
[4] De eerste paragraaf geeft uitleg over de vragen. Voeg daar een ID aan toe en geef het een mooie stijl met behulp van CSS.
[3] Maak de opdracht in
2] Maak de opdracht op
Dit kan al snel ingewikkeld worden! Meer uitleg vind je hier:
[4] maak de opdrachten in
[5] maak de opdrachten in
Naam
Achternaam
Lievelingskleur
Kees
Hendriks
Rood
Aron
ee Jong
Geel
Je hebt basisinformatie gekregen over hoe je een website ontwikkelt.
De inhoud van de website gaat over de politieke partij die je nu aan opgerichten bent bij Maatschappijleer. Je maakt de site alleen.
Je levert de site in door het te hosten op github - zie uitleg onder kopje horsten. De url van je site kun je inleveren bij opdrachten in magister.
De eisen van de website en beoordelingschema staan onder de beoordeling. Lees die eerst goed door voordat je begint.
Succes!
Je website wordt op de volgende punten beoordeeld:
Onderdeel
Havo
Vwo
minimaal 4 pagina's
0.7
0.5
uniforme lay-out voor alle paginas
0.7
0.5
achtergrondafbeelding
0.7
0.5
tekst is netjes opgemaakt met gebruik van h1, h2, p tags
0.7
0.5
style wordt bijgehouden in extern css bestand
0.7
0.5
minimaal 2 afbeeldingen
0.7
0.5
menu om naar andere paginas te gaan (in css)
1
1
link naar een bestaande website
0.7
0.5
link / webformulier voor het sturen van email
0.7
0.5
een geneste lijst
0.7
0.5
een tabel
0.7
0.5
goed gebruik van box model
0.7
0.5
Bonus
maak je website responsive
1
1
gebruik JavaScript/JQuery
1
1
geavanceerd CSS gebruik van verschillende selectors
1
1
Als je een onderdeel voldoende in je website hebt, krijg je de correspondeerde punten.
Welkom in de Python modules! Werk hieronder de lesbrieven af volgens je planner.
Zoals je weet worden alle HTML-elementen als een box gerenderd in je browser. Deze boxen kun je opmaken volgens het box-model. Er zijn twee van dit soort boxen:
inline elementen
block elementen
Voorbeelden van inline elementen zijn: <b>
, <em>
, <span>
, <img>
, <strong>
. Ze zitten in de regel tekst en hun box is zo hoog en breed als de inhoud van de tekst. Block elementen daarentegen beginnen altijd op een nieuwe regel. Voorbeelden van block-elementen zijn: <div>
, <h1>
, <p>
, <table>
, <ul>
enz. Standaard nemen ze de gehele breedte van hun parent (bijvoorbeeld de <body>
) in beslag. Je kunt in tegenstelling tot de inline elementen de breedte en hoogte van een block-element wel instellen met height en width.
Hier een voorbeeld:
HTML
CSS
RESULTAAT
Zoals je ziet is element <em>
en <span>
met id #nadruk
inline elementen. Ze zijn zo breed en hoog als de hoeveelheid tekst en zitten middenin de regel. De elementen <p>
en <h1>
zijn block-elementen. Ze nemen de gehele breedte in beslag van hun parent (in dit geval <body>
) en beginnen op een nieuwe regel.
Ga na dat je de hoogte en breedte van een inline element niet kan veranderen, terwijl je dat met een block element wel kan doen. Doe dat in het volgende stuk code wat voor jou al is geschreven: https://codepen.io/h-akkas/pen/mMrZRV?editors=1100
Nu is het zo dat je block elementen soms toch als inline elementen wilt behandelen en inline elementen als block element. Hoe doe je dat? Daar is het CSS-attribuut display
voor bedacht! Als je voor een <p>
element display: inline
instelt, dan wordt de <p>
als een inline element behandeld. Als je voor een <em>
element display: block
instelt, dan wordt het <em>
element als een block element behandeld.
Bekijk de volgende pagina en de code:
Zoals je ziet hebben we alleen block elementen op deze pagina. Maak van de h1 en de vier div-elementen een inline element met display: inline. Wat gebeurt er? Gebruik deze link: https://codepen.io/h-akkas/pen/YxGoZX?editors=1100
Zoals je hierboven hebt gezien veranderen er twee dingen:
Alle height en width instellingen worden genegeerd. De elementen worden zo hoog en breed als de inhoud van de tekst.
Alles komt op een regel te staan, omdat het inline elementen zijn geworden.
Zo kun je ook inline elementen als block elementen beschouwen met display: block
. Bekijk eens het volgende voorbeeld.
Ik heb hier drie linkjes naast elkaar. Zoals je weet is een <a>
-tag een inline element. Wil ik van de linkjes een verticaal menu maken met vakjes die even breed zijn, dan moet ik er block elementen van maken.
Maak van de linkjes hierboven een verticaal menu met even brede vakjes. Je kunt de code via de volgende link raadplegen: https://codepen.io/h-akkas/pen/mMObdz?editors=1100
Als je je goed herinnert hebben we in lesbrief 1 ook display: inline-block gebruikt voor het menu. Waar is dat dan goed voor? Nou, met display: inline-block willen we een element op een lijn zetten (inline), maar dan ook als een block behandelen. Dus ook voorzien van een hoogte en een breedte. Hartstikke handig als je een horizontaal menu wilt maken. Zie ook het plaatje hieronder voor de verschillen:
In dit plaatje gaan we ervan uit dat alle elementen divjes zijn. Merk op dat inline-block dus zowel de elementen naast elkaar zet, maar waar ook een hoogte en een breedte voor kan worden opgegeven!
Als het goed is heb je al eerder kennisgemaakt met pseudo classes in HTML. Linkjes hebben namelijk vier verschillende toestanden:
Toestand link
Betekenis
link
als de link nog niet is bezocht
visited
als de link al bezocht is
hover
als je met je muis over de link scrolt
active
als je op de link klikt
Je kunt voor elk van deze toestanden een opmaak opgeven. Dit doe je met pseudo classes.
De code voor een pseudo class is als volgt:
<selector>:<pseudoclass> {
}
Voorbeeld:
Zoals hierboven te zien is zou je ervoor kunnen kiezen om voor elke toestand van het linkje opmaak aan te geven met pseudo classes. Maar dat hoeft natuurlijk niet. De bovenstaande code kun je via de volgende link in actie zien: https://codepen.io/h-akkas/pen/GvNRBr?editors=1100
Je kunt deze pseudo classes ook op andere HTML-elementen toepassen. Stel dat je een <div>
een kleur wilt geven als je er met je muis overheen gaat, dan kan dat gewoon.
Maak een <div>
die een andere kleur krijgt als er met je muis overheen gaat.
Nu is het aantal pseudo classes niet beperkt tot vier. Er zijn tientallen pseudo classes die je kunt gebruiken om dingen te doen die je anders met JavaScript had moeten programmeren.
Stel dat je een tabel hebt en je wilt alle even rijen een kleur geven en alle oneven rijen een andere kleur. Dan zou je de pseudo class nth-child()
kunnen gebruiken. Zie de onderstaande code:
Zie de code in actie: https://codepen.io/h-akkas/pen/dzOyrM?editors=1100
In plaats van even
of odd
kun je ook gewoon een getal tussen haakjes zetten. Wel met een n erachter. Dus bijvoorbeeld nth-child(4n)
. Zo kun je iets bijzonders doen met exact de zoveelste rij.
Op de volgende pagina kun je een lijst met alle pseudo classes vinden: https://www.w3schools.com/css/css_pseudo_classes.asp Maak een webpagina waarin je minstens twee pseudo classes gebruikt voor een nuttige toepassing. Welke je wilt gebruiken, mag je zelf weten.
Hiervoor heb je geleerd om lettertypen op te geven met de font-family
property. Je hebt ook geleerd dat je niet zomaar alle lettertypen kunt gebruiken aangezien de lettertype ook aanwezig moet zijn op het systeem van de bezoeker van je website. Zo niet, dan zal je website er niet zo mooi uitzien. Om dit te voorkomen heb je geleerd om meerdere lettertypen op te geven: beginnen met een web-safe font en vervolgens een paar generieke fallback fonts voor als de eerst opgegeven lettertype toch niet beschikbaar is.
font-family: Verdana, Geneva, sans-serif
of
font-family: "Times New Roman", Times, serif
Nu is er ook de mogelijkheid om met web-fonts te werken. Dat houdt in dat je website altijd de ingestelde lettertype downloadt voor als het niet beschikbaar is bij de bezoeker. Waar kun je die fonts dan downloaden en hoe kom je eraan?
Nou, er zijn websites die allerlei mooie fonts aanbieden die je zo als web-font kan instellen voor je website. Sommige van deze websites vragen hier geld om, maar sommige ook niet. Een van de webfoundry websites die honderden fonts gratis beschikbaar stelt is Google Fonts. Hier een pagina dat gebruik maakt van Google Fonts:
Zie hem hier in actie: https://codepen.io/h-akkas/pen/zdoGpP?editors=1100
Hoe gaat dat dan in zijn werk?
Ga naar de Google Fonts website (https://fonts.google.com/)
Kies een lettertype uit en druk op het rode plusje (er verschijnt een zwart-wit kadertje aan de onderkant van de pagina
Klik op dat kadertje met de tekst (1 family selected).
Dan kun je twee dingen doen. Of je kopieert de <link>-tag naar je HTML-bestand of je drukt op @IMPORT en kopieert de @import regel in je CSS. Ik zou kiezen voor het laatste aangezien je dat maar 1 keer hoeft te doen.
Ten slotte kun je de lettertype gewoon gebruiken op je website.
Opdracht
Kies een leuke web-font en gebruik hem op een pagina.
Met GitHub pages kan elke gebruiker een website hosten. Dit gaan we gebruiken om jouw portfolio online te zetten. Het stappenplan is als volgt:
Maak eerst een account aan op GitHub, hier een uitleg video:
Maak een nieuwe GitHub repository met als naam username.github.io waarbij username vervangen moet worden door jouw gebruikersnaam op GitHub. Denk erom: als je dit niet goed doet, zal je website niet werken!
Ga vervolgens naar de map waar je je bestanden wilt bewaren en voer het volgende commando in:
~ $ git clone https://github.com/username/username.github.io
Ga naar de map username.github.io en voeg een index.html bestand toe
cd username.github.io
~$ echo "Hello World" > index.html
Add, commit en push naar GitHub
~$ git add .
~$ git commit -m "Initial commit"
~$ git push -u origin master
Je bent klaar. Surf nu naar https://username.github.io en kijk of het werkt!
In deze lesbrief behandelen we een aantal belangrijke technieken dat je nodig hebt voor het maken van een website.
Je kunt op vier verschillende manieren de positie van een HTML-element op een pagina bepalen:
position: static
position: absolute
position: relative
position: fixed
position: sticky -> een combinatie van relative en fixed
Static
Positioneren met static, daar hoef je niets speciaal voor te doen. Alle elementen zijn namelijk standaard static gepositioneerd. Static betekent dat het element op de plek terecht komt in de volgorde zoals jij dat hebt aangegeven in de HTML. Men zegt wel: according to the normal flow of the page. Hieronder is dat ook te zien. De <p>
komt na de <img>
En de <img>
komt na de <h1>
.
Relative
Met relative kun je je element ten opzichte van zijn normale positie, naar links, rechts, boven en/of beneden plaatsen. Je geeft op de verticale as met top of bottom een afstand op. En op de horizontale as met left of right.
Absolute
Met absolute kun je eigenlijk hetzelfde doen, maar dan ten opzichte van de bovenkant van de pagina. Je haalt het element zelfs helemaal uit de flow, waardoor de <p> ook naar boven opschuift. Zie hieronder.
Fixed
Fixed lijkt weer heel erg op absolute. Maar er is een groot verschil: Als je iets met fixed positioneert, dan blijft het daar. Zelfs als je naar beneden gaat scrollen!
Opdracht
Maak een pagina waarmee je wat speelt met alle positioneringsopties. Misschien dat je het menu van de pagina die je in de vorige lesbrief had gemaakt fixed kunt maken?
Als je een element met absolute, relative of fixed gaat positioneren, dan kan het zo zijn dat meerdere elementen bovenop elkaar worden geplaatst. Maar hoe zorg je ervoor dat de ene laag op of onder de andere laag terechtkomt? Dit regelen we met een ander CSS-property genaamd z-index. Voor de z-index kun je een getal opgeven. Hoe lager het getal, hoe meer hij naar achteren wordt geplaatst. Je kunt zelfs negatieve getallen opgeven! Zie het onderstaande voorbeeld met kaarten en hun bijbehorende z-index.
Je hoeft de lagen overigens niet per se van 1 tot 5 te nummeren (in stapjes van 1). Je mag ook sprongen maken. Als je maar weet dat de lagen van klein naar groot worden opgestapeld. Zie bijvoorbeeld het volgende plaatje:
Maak het volgende plaatje na. Hij bestaat uit 5 div'jes.
Vaak als je een stuk tekst voor op je website schrijft, dan wil je daar plaatjes bij. En dat ziet er dan standaard zo uit:
Terwijl je eigenlijk het plaatje met de tekst zou willen omringen, zie je hierboven dat er veel witruimte is. Je browser beschouwt het plaatje als een letter en zet hem in de zin. Ook als je het plaatje uit de <p>
haalt, dan behoud je de witruimte. Dit gaat we nu oplossen met floating.
Door het plaatje float: left of float: right mee te geven krijg je het volgende effect:
Floating kan ook erg handig zijn als je een layout structuur voor je webpagina wilt maken waarbij je blokelementen naast elkaar wilt zetten. Neem als voorbeeld de volgende twee layouts:
LAYOUT 1
<header>
<nav>
<section>
<footer>
LAYOUT 2
<header>
<nav>
<section>
<aside>
<footer>
De vraag is: Hoe maak je dit soort layouts? Je ziet in de eerste layout <nav>
en <section>
naast elkaar en in de tweede layout komt daar zelfs een <aside>
-element bij. Ook dit doe je met floating. Hoe dat werkt wordt in de volgende video uitgelegd:
Maak een van de bovenstre twee layouts met behulpd van floating.
Web-design is een vak apart en de theorie over kleurgebruik is daarin een belangrijk onderdeel. Het internet staat vol met websites die niet aantrekkelijk zijn vanwege hun lay-out. Neem nou eens de volgende oerlelijke websites: http://www.waterequipment.com.au/ of http://www.pennyjuice.com/htmlversion/whoispj.htm
Inderdaad! Ouch!!! … het doet zeer aan je ogen ;)
De theorie over kleuren is een van de belangrijkste onderwerpen voor web designers. Een website waarbij kleurgebruik goed wordt toegepast ziet er natuurlijk beter uit. Maar kleuren kunnen ook een psychologisch effect hebben. Met de verkeerde kleuren kun je het verkeerde gevoel bij je bezoekers achterlaten. Dan vinden ze je ineens onbetrouwbaar of nemen ze je niet serieus.
Design is een onderwerp waar we nu maar heel kort bij stil zullen staan. We kunnen je al wel verklappen dat hier ook modules en badges voor zullen komen. Voor nu moet je het doen met dit kleine hoofdstukje ....
Een handige tool om je te helpen bij de keuze van een harmonieus kleurenpalet voor je website is het kleurenwiel. Het kleurenwiel helpt je de relaties die kleuren met elkaar hebben te visualiseren. De meest gebruikte versie van het kleurenwiel is gebaseerd op het wiel dat Sir Isaac Newton heeft ontdekt. Zijn kleurenwiel gebruikt drie primaire kleuren: rood, geel en blauw. Wanneer je die kleuren met elkaar mixt krijg je een volledig kleurenwiel.
Kleurenwiel van Newton: Hoe meer naar binnen, hoe meer wit aan de kleur is toegevoegd. Hoe meer naar buiten, hoe meer zwart is toegevoegd. De echte kleuren bevinden zich in de middelste concentrische cirkel van het wiel.
In het creëren van een aangenaam kleurenpalet zit een beetje wetenschap. Daar gaat we het hieronder over hebben.
Monochromatisch: Wanneer je variaties van dezelfde kleur gebruikt kan dat een prachtig effect geven, maar je bent bijna verplicht diverse accenten van wit en zwart toe te voegen. Kies daarom een kleur die je de mogelijkheid geeft genoeg contrast toe te voegen.
Analoog: Wanneer je kleuren selecteert die elkaar raken in het kleurenwiel krijg je een harmonieus kleurenschema. Net zoals monochromatische kleuren kunnen zij een warm of een koel gevoel geven, afhankelijk van hun plaats in het kleurenwiel.
Complementair: Kleuren van tegenovergestelde eindes van het kleurenwiel geven het meeste contrast. Als je de verleiding kan weerstaan van meer kleuren toe te voegen, beperk je dan tot twee kleuren om een krachtige look te creëren. Maar gebruik ze wijs, zodat ze niet vloeken.
Split Complementair: Deze variatie van het complementaire schema gebruikt twee kleuren aan beide zijden van een direct complementaire kleur. Deze kleuren hebben een hoog visueel contrast maar met minder spanning dan puur complementaire kleuren.
Triadisch: Drie kleuren gelijkwaardig gespreid over het kleurenwiel creëren een levendige visuele interesse. Sommige paletten zijn stevig, terwijl andere meer verfijnd zijn. Je kan wijzigingen aanbrengen door een lichtere tint of wat schaduw aan één van de drie kleuren toe te voegen in plaats van bij de echte kleur te blijven.
Tetradisch: Dit is een populair schema omdat het sterk visueel contrast biedt terwijl het toch harmonieus blijft. Het gebruikt twee paren van complementaire kleuren. Het is moeilijk dit schema harmonisch te maken wanneer je telkens evenveel licht of schaduw gebruikt, dus een beetje creativiteit is vereist. Gebruik een dominante kleur voor je design en gebruik de anderen om de hoofdkleur te ondersteunen.
Op http://www.paletton.com kun je op een vrij eenvoudige manier kleurenpaletten genereren met behulp van het kleurenwiel. Zie het plaatje hieronder voor een beschrijving van de belangrijkste onderdelen van deze website.
Genereer met de website http://paletton.com/ per techniek een aangenaam kleurenpalet. Het is aan te raden om met het knopje EXAMPLES (rechts onderin) te kijken naar een voorbeeld website met het kleurenpalet dat je hebt gegenereerd.
Je gaat in deze lesbrief een aantal dingen leren door een voorbeeldpagina maken. We gaan werken met HTML5 en CSS3 en we gaan eerst de structuur van je pagina neerzetten. Hou je vast :)
Als je een website ontwerpt (middels wireframes), dan is het eerste wat je doet je pagina in blokken verdelen. En dan heb je vaak de volgende blokken:
Er is vaak een header-blok. Dit is een kopregel die vaak bovenaan een webpagina staat. Hier staat vaak de titel van de site en een logo in.
Er is vaak een footer-blok. Vaak staat deze onderaan de pagina. Hier staat vaak in wie de site heeft gemaakt, met wat copyright informatie.
Er is vaak een navigatiebalk. Denk aan een knoppenbalk of een balk met linkjes. Je ziet ze vaak bovenaan de pagina of links op de pagina. Door op de knoppen of linkjes te klikken ga je naar andere pagina’s
De inhoud van je pagina. Deze inhoud gaan we straks nog eens onderverdelen.
Nog vóór HTML5 konden we deze blokken maken met <div>
-tags. <div>
is de afkorting voor division (=afscheiding, onderdeel, sectie). Een <div>
kan zelf van alles bevatten. Zoals plaatjes, kopjes, tabellen, opsommingen, paragrafen etc. Een mogelijke indeling kan er dan als volgt uitzien:
Als je goed kijkt, dan zie je dat elke div van de andere div wordt onderscheiden middels classes en id's. Zo heb je <div id="header">
voor het kopje van de pagina. En <div id="footer">
voor de footer van de pagina. In de CSS kun je vervolgens de div's afzonderlijk opmaken. Met HTML5 echter, heb je speciale tags tot je beschikking voor dit soort standaard onderdelen:
De <div>
-tag bestaat nog steeds en mag je gewoon gebruiken. Maar deze HTML5-tags maken het je wel makkelijker. Ook kunnen zoekmachines zoals Google makkelijker de inhoud van je pagina indexeren en doorzoeken!
Maak een nieuwe map aan op je harde schijf.
Maak vervolgens de volgende HTML-pagina. Noem hem index.html.
Check uiteraard via de validator of deze aan de HTML5 standaard voldoet.
Tip: zet die tags netjes onder elkaar zoals hierboven, je hebt dan overzicht over wat bij wat hoort en je vergeet niet zo gauw een tag af te sluiten.
Tip2: Er is een wereld van een verschil tussen de <head>
en de <heading>
. De <head>
-tag mag je nooit in de body gebruiken. De <heading>
-tag mag alleen een titel en meta data bevatten. De <heading>
is onderdeel van je pagina en staat in de body !
We gaan even het resultaat van deze mega vette site bekijken ☺ Test de pagina in een webbrowser en je ziet het volgende:
De elementen <header>
, <footer>, <section>
en <nav>
zijn allemaal blokelementen. Deze blokken worden dan ook netjes onder elkaar gezet.
We kijken nu even puur naar de inhoud van een pagina. In ons geval dus de <section>
tag. Een section is bedoeld voor het opsplitsen van de inhoud. In ons geval hebben we maar één section. In het geval van een krant kun je best verschillende katernen hebben. Denk bij een krantensite aan economie, politiek, sport, buitenland, binnenland enz. Meerde sections per pagina zijn dus best mogelijk. Wij houden het nog even simpel bij één sectie.
Een sectie bestaat uit verschillende artikelen. Denk bij een artikel net als in de krant als een zelfstandige eenheid.
Pas de section tag aan, verwijder het woord inhoud en maak hierin ongeveer drie artikelen:
Test het in je browser. Het ziet er nog steeds niet uit. Klopt ook, we hebben nog niets aan de opmaak gedaan. Ook een article is een blokelement. Dus die worden netjes onder elkaar gezet.
Iedereen die de krant leest weet waar een artikel uit bestaat: een kopje en één of meerdere alinea’s dus uit <h1>
of <h2>
… enz en uit <p>
Deze heb je al in les 1 gehad.
Vul iedere alinea met een kopje (kies bijvoorbeeld <h2>
dan kan je straks <h1>
gebruiken voor je titel) en alinea’s. Gebruik minstens 1 alinea, maar je mag ook meer alinea’s gebruiken. Uiteraard mag je deze kopiëren uit eerdere pagina’s en ga je dit niet opnieuw schrijven.
Koppel een stylesheet
In de bovenstaande code staan twee artikelen afgebeeld. In het eerste artikel heb ik één kop met twee paragrafen in het tweede artikel heb ik een kop met maar één paragraaf.
Tip: doe jezelf (en anderen) een plezier en zet de en netjes onder elkaar. Je ziet dan of je vergeten bent iets af te sluiten. De headers zet ik wel op één regel.
Het resultaat ziet er nog steeds niet uit, maar het begint in ieder geval wel op een webpagina te lijken:
Vergeet niet te checken of je pagina nog steeds aan de HTML5 standaard voldoet !
We gaan nu de webpagina opmaken.
Koppel je pagina aan een stylesheet. Maak eerst een nieuwe stylesheet aan: ik noem de mijne opmaak.css zet deze weer in het mapje style en koppel deze aan je html pagina.
Margin en padding op 0px
Dit hebben we al verschillende keren gedaan. De eerste rule die ik er altijd inzet is: alle standaard margin en padding eruit. Die gaan we straks zelf opgeven. Sommige browsers hebben standaard wel een margin en/of padding andere weer niet. Hier hebben we geen zin in. * betekent alles. Dus zet als eerste rule in opmaak.css
Voor de body (dat is de hele pagina) zet ik alvast een standaard lettertype erin. In mijn voorbeeld heb ik ook voor een achtergrond gekozen. Een klein plaatje laat ik van links naar rechts en van boven naar beneden herhalen:
Ik heb dit plaatje gebruikt als achtergrond maar je bent natuurlijk vrij om je eigen pagina achtergrond te kiezen. Een kleur als achtergrond is ook prima.
We gaan eens kijken naar de header. Ik heb een header plaatje gevonden van 150pixels hoog en 960 pixels breed. Je zou zelf ook een plaatje kunnen maken in een programma zoals Photoshop.
Deze ga ik als achtergrond gebruiken voor mijn header. Ik ga mijn site ook nog een titel geven.
Vervang de tekst tussen de <header>
en </header>
door een titel. Ik gebruik hiervoor de h1
In de stylesheet gaan we de header stylen. We gebruiken hiervoor de header en de header h1. Een voorbeeld staat hieronder. Je ziet dat ik expliciet de lengte en de hoogte opgeef met width en height.
De laatste optie text-shadow hebben we nog niet gehad. Deze is toch wel leuk, je kunt hiermee een schaduw bij je tekst krijgen. Eerste twee opties (beide 5px ) zijn het aantal pixels naar rechts en naar beneden van de schaduw. De derde optie (7px) is een maat voor hoe vaag of hoe scherp de schaduw moet worden. Hoe groter dit getal hoe vager de schaduw. De laatste optie is de kleur van de schaduw. (#000000 = zwart). Ik speel gewoon wat met deze getallen. Resultaat:
Het begint een beetje op een website te lijken.
We gaan nu een navigatiebalk maken. Hoe je dit moet doen heb je met de module HTMLCSS-1 geleerd. Ook heb je geleerd hoe je de knoppen naast elkaar kunt krijgen. Uiteraard doen we dit door een lijst te maken met linkjes.
Vervang de tekst tussen <nav>
en </nav>
door een lijstje met linkjes. In mijn voorbeeld laat ik de linkjes even naar een niet bestaande pagina verwijzen href=”#”. We hebben immers nog niet zoveel pagina’s. Alleen de homepage index.html (zie onderstaande code)
We gaan maar weer stylen. Hieronder zie je een voorbeeld. Het is wat standaard kleurtjes en achtergrondjes werk. Er is één belangrijke optie: display : inline-block; hierdoor staan de knoppen naast elkaar. Uiteraard hoef je de kleurtjes en de randen niet over te nemen. Leef je uit en maak je eigen knoppen!
Resultaat:
We gaan nu iets moois maken van de artikelen. Je hebt dit met de HTML-CSS-1 module al een beetje gehad. We kunnen de volgende rules gebruiken in de stylesheet: section, article, article h2 en article p
In onderstaand voorbeeld heb ik alleen nog maar section en article gebruikt
Het resultaat is toch wel aardig:
De tekst en de koppen gaan we ook nog opmaken. Dit mag je zelf uitzoeken. Hier zijn we in de vorige module uitvoerig mee bezig geweest. Je hebt in ieder geval nodig:
Tip: je had ook mogen gebruiken: section
article
h2
en section
article
p
Maar omdat ik maar 1 sectie had vond ik dat wat overdreven.
De footer staat onderaan de pagina. We houden het even simpel: vervang alles tussen <footer>
en </footer>
door een copyright tekst. © is het © teken want het copyright teken hoorde niet bij de utf-8 tekenset. Ik heb hier een h3 gebuikt, maar iets anders is ook goed.
Uiteraard heb je weer een footer en een footer h3 nodig om de boel te stijlen. Een voorbeeld zie je hieronder. Van de footer heb ik niet overdreven veel werk gemaakt.
We zijn bijna klaar met onze pagina we hebben echter nog 1 ding wat niet zo netjes is. Het zou mooi zijn als de site netjes in het midden stond en was uitgelijnd. Nu is het rommelig. Hier zie je de site op een breedbeeld scherm.
Om dit probleem op te lossen zetten we alle blokelementen in een nieuw element. Een div-element. Dit element wordt alleen maar gebruikt om de opmaak mooier te maken. Het heeft dus geen structuur functie zoals article of nav. Zoals aan het begin van de lesbrief al is verteld bestonden de tags article, nav, section en footer voor HTML5 niet. Toen werd alles opgelost met de div tag. Je gaf toen een id mee in de div.
Voorbeeld:
<header> </header> was bijvoorbeeld <div id=”header”> </div><footer> </footer> was bijvoorbeeld <div id=”footer”> </div> <nav> </nav> was bijvoorbeeld <div id=”navigator”> </div>
De div tag is er in HTML5 nog steeds. Alleen we gebruiken het puur voor de opmaak. Niet meer voor de structuur. Een div is dus hetzelfde als <article>
, <footer>
of <section>
behalve dan dat we hem puur voor de opmaak gebruiken !
We gaan de hele pagina in een div tag zetten die we id=”wrapper” meegeven. Dus voeg direct na de body tag in:
En onderaan de pagina net voordat de body tag sluit:
Tip: als ik veel div tags gebruik, moet ik die allemaal afsluiten met </div> ik zet dan wat commentaar bij de </div> bij welke div deze hoorde. Ik vergeet dan niet zo snel een div af te sluiten.
Nu gaan we de wrapper stijlen. Nogmaals ik wil met de wrapper alleen maar de pagina mooi in het midden zetten. Uiteraard wil ik alles net zo breed hebben als de header: deze was 960 pixels. Dus:
Kijk even of je het snapt: de marges boven en onder zijn 0. Links en rechts zijn de marges automatisch. Met andere woorden de browsers maakt de pagina 960 pixels breed en zet hem netjes in het midden omdat de linker en rechtermarge automatisch worden berekend.
Resultaat:
Deze module is een handige eerste stap als je wilt leren programmeren. Je gaat namelijk een turtle programmeren om allerlei leuke figuurtjes te tekenen. Je gaat leren hoe je tekeningen maakt, loops programmeert, functies maakt etc. Deze module bestaat uit een aantal lesbrieven die je moet doorwerken.
Lesmatriaal Het lesmateriaal bestaat uit lesbrieven waarin uitleg staat, maar ook een aantal opdrachten. De opdrachten maak je gewoon voor jezelf. De opdrachten met een ster maak je in een online klas. Je kunt je voor deze klas aanmelden via de volgende
Maak de lesbrieven en lever de opdrachten in volgens de planner.
Natuurlijk hoef je niet alle commando's en functies van een programmeertaal uit je hoofd te leren. Je kunt lekker gebruik maken van een cheatsheet (= spiekbrief). Wij hebben voor jou een handige spiekbrief gemaakt. Hier is hij:
Als je een vierkant wilt gaan tekenen met zijden van 100 pixels, dan zou je het volgende programma kunnen uitvoeren:
Merk op dat de twee commando's turtle.forward(100)
en turtle.right(90)
vier keer worden herhaald! Zou het niet veel beter zijn als je de computer kort en krachtig kan aangeven dat hij die twee commando's vier keer moet uitvoeren? Dat kan! En hiervoor maak je gebruik van de herhaalinstructie (wordt ook een loop genoemd). Het bovenstaande programma kan dus ook als volgt worden geschreven:
De for-opdracht zorgt ervoor dat de twee opdrachten eronder vier keer worden uitgevoerd. Als er for i in range (14)
zou staan bijvoorbeeld, dan zouden die twee opdrachten 14 keer worden herhaald. Let wel op dat je eerst een tab plaatst voor de opdrachten die herhaald moeten worden. Dit noem je inspringen. Hetgeen dat herhaald moet worden, dient dus te worden ingesprongen. Als je dat niet doet, dan krijg je een foutmelding.
Voer het onderstaande programma uit en bekijk het resultaat. Kun jij het programma korter schrijven door gebruik te maken van een loop?
Gebruik een loop om een vierkant te tekenen waarvan de zijden 200 pixels lang zijn.
Voer het onderstaande programma uit en bekijk het resultaat. Kun jij het programma korter schrijven door gebruik te maken van een loop?
We gaan nu verder met nog meer uitleg. We zijn geïnteresseerd om het volgende figuurtje te tekenen door gebruik te maken van een loop:
Het eerste dat je doet is bepalen welk patroon steeds terugkeert. Dat moet je immers herhalen! Je zou bijvoorbeeld het volgende stukje als het te herhalen patroon kunnen aanmerken:
Uitgaande van de situatie dat je naar boven kijkt, zou je dit gedeelte als volgt kunnen maken:
Nadat we de bovenstaande regels hebben uitgevoerd kijkt de turtle naar rechts. Zie maar in het onderstaande plaatje:
Het enige dat we moeten doen is ervoor zorgen dat de turtle weer naar boven kijkt. Voor de rest moet je het patroon steeds herhalen, zodat je uiteindelijk het gewenste plaatje krijgt. De turtle naar boven laten kijken doen we uiteraard met de opdracht turtle.left(90).
We krijgen dan het volgende gewenste resultaat:
Als we dezelfde code dan nog eens herhalen, dan krijgen we het volgende plaatje:
Nu zien we dus dat het idee werkt en kunnen we, zoals in het onderstaande programma ook te zien is, het patroon 5 keer herhalen.
Veel van de onderstaande opgaven kunnen met dezelfde aanpak opgelost worden. Denk eraan om eerst het repetitieve patroon te ontdekken. Schrijf dan een programma dat dat patroon tekent. Denk vervolgens na over de heroriëntatie van de turtle zodat het patroon ook voor de tweede keer getekend kan worden. Schrijf dan een loop zodat je de hele tekening met een kort-en-krachtig programma kan gaan maken.
Schrijf een programma dat de onderstaande trap tekent. Ga volgens de bovenstaande aanpak te werk.
a] Teken:
b] De bovenstaande ster heeft 8 stralen met een lengte van 150 pixels. Kun je ook een ster maken met 16 stralen met een lengte van 100 pixels?
Je leert in deze module hoe je moet programmeren in de programmeertaal Python. We leggen eerst kort uit wat een programma is en gaan daarna lekker aan de slag.
Een commando is een opdracht (instructie) die een computer kan begrijpen en kan uitvoeren. In feite kan een computer alleen maar eenvoudige opdrachten begrijpen. Deze kleine, eenvoudige instructies kunnen dan gecombineerd worden om ingewikkeldere en complexere taken uit te voeren. Zo'n verzameling van commando's wordt ook wel een computerprogramma genoemd. Het schrijven van een computerprogramma is niet eenvoudig. Sommige programma's bestaan wel uit meer dan een miljoen regels opdrachten. Wij gaan echter beginnen met vrij eenvoudige programma's waarin het de bedoeling is om een turtle te laten bewegen zodat hij bepaalde figuren en patronen kan tekenen.
Ons eerste programma ziet er als volgt uit:
Je kunt het hier zien werken: (druk linksboven op de 'play' knop)
Als je wilt tekenen met turtle, dan moet je dat op de allereerste regel van je programma aangeven. Dit doe je door de regel import turtle op te schrijven. De turtle kijkt altijd in het begin naar rechts.
En met de opdracht turtle.backward(100), gaat de turtle 100 stappen achteruit.
Draaien
Maak een nieuwe repl aan en maak het figuur.
Tip voor draaien
Let er wel op dat de draairichting altijd vanuit de huidige positie van de turtle wordt bepaald. In het onderstaande plaatje kijkt de turtle eerst naar beneden. Als je dan turtle.right(90) uitvoert dan draait de turtle dus 90 graden naar rechts toe!
Om het draaien duidelijk te maken hieronder nog een programma dat je in Python kan uitvoeren:
Maak voor de figuren hieronder een programma waarbij de turtle dat figuurtje tekent. De afmetingen mag je zelf bepalen.
Maak ook vier programma's waarmee je de volgende figuren kan tekenen.
Schrijf een programma waarmee je het onderstaande kan tekenen:
Je kunt het bovenstaande figuurtje tekenen door slechts gebruik te maken van de functie turtle.forward en turtle.right. Zorg ervoor dat je hetzelfde figuurtje maakt, maar dan alleen door uitsluitend gebruik te maken van deze twee functies.
Bever wil het onderstaande plaatje gaan tekenen. Kun jij hem helpen?
Teken nu een huis met de turtle. Je huis zou er zo uit kunnen zien (de lengte van de zijden mag je zelf bepalen):
of als je wat enthousiaster bent:
Resultaat:
Ga naar en meld je aan. Maak een nieuwe Repl (turtle) aan. Neem het voorbeeld hierboven over en zorg dat er een rechthoek getekend wordt.
Vooruit met turtle
Met de opdracht turtle.forward(100), gaat de turtle dan 100 stappen vooruit. Zie het plaatje hiernaast.
De turtle heeft altijd een bepaalde richting. En als hij beweegt, dan beweegt hij ook die richting op. Je kunt echter de richting veranderen door het commando turtle.right() of turtle.left() in te geven.
Als je turtle.right(90) ingeeft, dan draait de turtle 90 graden naar rechts. En als je turtle.right(180) ingeeft, dan draait hij zich om.
Maak een nieuwe repl aan en maak het volgende figuur"
Maak het volgende figuur:
In deze module ga je leren hoe je programma's kan schrijven waarbij je de gebruiker ook vragen kunt stellen en afhankelijk van het antwoord je programma iets laat doen. Dit noemen we ook wel interactieve programma's.
Het lesmateriaal bestaat uit lesbrieven waarin uitleg staat, maar ook een aantal opdrachten. De opdrachten maak je gewoon voor jezelf. De opdrachten met een ster maak je in een online klas.
Voor de lessen 1 t/m 3 is hier de classroom.
Voor de lessen 4 t/m 7 is hier de classroom.
Enjoy!
In één van de vorige lessen hadden we kennisgemaakt met de loops (herhalingen). Het gebruik van loops zorgde ervoor dat we met minder code hetzelfde konden bereiken. Een eenvoudige loop waarmee je een vierkant maakt ziet er als volgt uit:
Nu weten we dat door deze loop de opdrachten forward
en right
vier keer worden herhaald. Maar eigenlijk heb ik nooit uitgelegd wat die i betekent. En wat doet range eigenlijk? Daar gaan we in deze les iets dieper op in. Let dus goed op ;)
Allereerst is het belangrijk om te weten dat we i.p.v. i ook een andere naam hadden kunnen kiezen. De meeste programmeurs gebruiken vaak een letter zoals j,k,x, maar ook het woordje count
. De gouden regel blijft "een gepaste naam dat overeenkomt met de bedoeling ervan".
Deze i wordt ook wel de loopcounter of de teller genoemd. Tijdens het herhalen wordt hiermee bijgehouden bij welke herhaling de computer is! De eerste keer dat de loop herhaalt, is i gelijk aan het getal 0. De tweede keer wordt hij 1. De derde keer wordt hij 2 en de vierde keer wordt hij gelijk aan 3. En dan houdt de loop op. Wat kun je hier nu mee? Nou, een hele hoop! Laten we eerst een eenvoudig voorbeeld nemen:
Dit programma tekent 10 stippen achter elkaar. De dikte van elke stip is 1 pixel. Nadat hij een pixel heeft getekend, schuift de turtle 10 pixels op. En dat wordt 10 keer herhaald. Probeer dit eens in jou repl.it...
Bij elke herhaling gebeurt nu hetzelfde. Maar stel dat je na elke herhaling de stip 1 pixel groter wilt maken. Hoe doe je dat dan?
Omdat de i na elke herhaling eentje groter wordt kunnen we dat goed gebruiken. We vervangen de 1 van turtle.dot(1) met i. Dat ziet er dan als volgt uit:
Je kunt ook een andere naam gebruiken voor i:
Wat verandert er als je in het bovenstaande voorbeeld ook forward(10)
vervangt door turtle.forward(i)
?
En wat als je de i
vervangt door i * 2
?
Hoeronder zie je een spiraal die uit 400 strepen bestaat. Het allereerste streepje is 0 pixels lang. Vervolgens wordt een 90º hoek naar rechts gemaakt. Daarna een streepje van 1 pixel lang. Dan weer een 90º hoek naar rechts. Daarna een streepje van 2 pixels lang, et cetera.
De vraag is om een functie tekenspiraal()
te schrijven die dit plaatje maakt.
Verander de functie tekenspiraal()
nu zodanig, dat je bij de aanroep kan aangeven uit hoeveel streepjes hij moet bestaan. Dus tekenspiraal(20)
zou dan een piepklein spiraaltje tekenen.
De spiraal heeft 50 stippen. De eerste stip heeft dikte 0 en er komt steeds 1 bij. Kun je ook kleuren toevoegen?
Range is eigenlijk een functie die een lijst van getallen maakt. Zo maakt range(4)
de lijst [0,1,2,3]
. En range(10)
de lijst [0,1,2,3,4,5,6,7,8,9]
. Zoals je nu wel weet wordt tijdens elke herhaling de loop counter gelijkgesteld aan het volgende getal in de lijst die range
maakt. We hebben nu lijsten waarbij de getallen steeds met 0 beginnen en vervolgens met 1 toenemen. Maar stel dat je het volgende lijstje wilt hebben: [10,15,20,25]. Hoe doe je dat dan? Dat doe je als volgt:
Uitleg: range heeft dus in dit geval drie parameters. De eerste bevat de beginwaarde. We willen dus niet meer dat de lijst begint met 0 maar met 10. De tweede bevat de eindwaarde. De lijst wordt dus gevuld tot het getal 30 (niet tot en met!!). En als derde parameter geef je de stapgrootte mee. Die is standaard 1, maar nu hebben we hem ingesteld met 5. De lijst ziet er dan als volgt uit:
[10,15,20,25]
Schrijf een programma waarmee je het volgende figuurtje natekent:
Maak nu een programma waarmee de turtle het figuurtje kan tekenen. Het kleinste vierkantje heeft zijden van 20 pixels. Het grootste vierkantje zijden van 95 pixels.
Maak nu een programma waarmee je de volgende spiraal kan maken.
Het eerste streepje is 10 pixels lang. De stappen zijn 5 pixels lang. De laatste streep is 195 pixels lang.
Teken nu drie huizen naast elkaar. De eerste heeft zijden van 50 pixels. De laatste heeft zijden van 100 pixels. Doe dit met een loop!
Maak nu het volgende figuur na. Belangrijk om te weten: Je begint met een driehoek, vervolgens teken je een vierhoek, en dan een vijfhoek, en dan een zeshoek. En je gaat door totdat je een negenhoek hebt. De zijden van alle figuren zijn 50 pixels lang.
Met Python is het mogelijk om tekst en getallen op het scherm te tonen. Dat doe je met de functie print()
. Deze functie "print" gewoon de informatie die je wilt op het scherm.
Zoals je ziet kun je ook berekeningen tussen de haakjes van de print()
-functie zetten. Let er wel op dat de voorrangsregels van de wiskunde ook gelden voor programmeertalen: de * en de / gaan dus vóór de + en de -.
Er bestaat iets als een string. Een string is een rij van tekens (karakters). Een teken is een letter (zoals ‘a’, ‘B’), nummer (‘0’, ‘2’), symbool (‘#’, ‘^’, ‘}’), enz. en kan gebruikt worden om allerlei soorten informatie in op te slaan. Vaak is dit dus gewoon een stukje tekst wat iemand op het scherm wil printen.
'string' betekent in het Engels touw of draad. Het is dus eentouw met karakters er aan.
Schrijf een programma dat met de print()
functie “Hello, world” op het scherm zet via trinket.
Schrijf een programma dat met de print()
functie de volgende boodschap op het scherm zet:
Welkom bij mijn geweldige programma!
We gaan allemaal toffe dingen laten zien.
Dit doen we met behulp van de print()-functie.
^_^
Vaak wil je in je programma tijdelijk gegevens bewaren. Dit doe je met variabelen. Een variabele kun je zien als een emmer met een label erop. Je kunt er iets in zetten en je kunt er iets uithalen. Hieronder zie je een stukje code met ernaast een plaatje waarop te zien is wat er gebeurt:
Je ziet dus dat er nu drie emmers zijn. Elke emmer heeft een naam/label en een inhoud. In het begin zijn alle emmers leeg. Maar na de drie regels van hierboven verandert de zaak:
In de emmer met als naam a komt namelijk het getal 20 te staan.
In emmer b komt 15 te staan.
En in c komt de tekst "hallo" te staan.
We kunnen nu ook een vierde emmer genaamd d in het leven roepen. In die variabele kunnen we het verschil (min) tussen a en b berekenen en bewaren. Dat gaat zo:
We halen dus het getal 20 uit emmer A en we halen het getal 15 uit emmer b. Het verschil wordt vervolgens berekend en het antwoord komt in emmer d te staan.
Uiteindelijk zouden we ook de inhoud van de variabelen op het scherm kunnen tonen. Dat doen we natuurlijk met de functie print. Dit gaat zo:
Schrijf een programma waarbij je de volgende berekeningen doet in Python:
8483937 - 523455
23.22342 * 34309483
218739345 + 3498348
Stop de antwoorden in drie verschillende variabelen. Tel de drie antwoorden bij elkaar op en print het uiteindelijke antwoord.
De naamgeving van een variabele kan je altijd zelf bepalen. Dus als je berekeningen wilt doen met je favoriete getal, kan je deze in een variabele stoppen met als naam bijvoorbeeld favoriete_getal
. Dit is handig omdat je dan makkelijk kan bijhouden wat er in de variabelen zit. Noem je variabelen dus altijd op een logische manier! Kijk maar naar het volgende voorbeeld:
Zoals je kan zien zijn de eerste drie antwoorden van het programma (dit worden ook wel outputs genoemd) gewoon een wiskundesom die de inhoud van onze variabelen gebruikt. Daarna wordt er een verandering gemaakt in de variabele favoriete_getal
. Er wordt een andere waarde aan de variabele gegeven, namelijk 4 + 5, dus 9. Je kan na het toewijzen van de waarde van een variabelen deze dus altijd ook nog later veranderen.
Bij de laatste output zien we een beetje een instinkertje. Namelijk doordat er " "
om favoriete_getal
stonden, wordt deze gezien als wat? Ja! Een string! Het is dus heel erg belangrijk om in je achterhoofd te houden of je iets wilt printen als een string of als een variabele. Als je de " " namelijk vergeet, gaat het programma zoeken naar een variabele met die naam. En als er dus geen variabele toegewezen is kan je hierdoor een foutmelding (oftewel een error) krijgen.
Bij de vorige opdrachten heb je steeds een aparte string geprint op het scherm. Nu bestaat er ook iets als string concatenation, waarin je twee strings samen kan voegen. Concatenation is een Engels woord voor “aaneenschakeling”, en in python is dit ontzettend makkelijk: Je plakt twee string aan elkaar vast met een +! Probeer maar:
Deze code kan je natuurlijk ook weer zelf proberen in je eigen omgeving!
Schrijf steeds een programma waarin je de gegeven variabele op de goede plek in de string gebruikt zoals in het voorbeeld.
naam = Lotte
<naam> heeft pannenkoeken gegeten!
naam = Kees
De kat van <naam> heeft een muis gevangen.
naam = Bas
tijd = nacht
De parkiet van <naam> heeft hem de hele <tijd> wakker gehouden.
Print bij deze opdracht de komende drie woorden in alle volgordes die er maar zijn dus bijvoorbeeld: ‘Niezen Kikkers Blij’ of 'Knikkers Niezen Blij'. Hint, er zijn 6 verschillende volgordes.
speelgoed = "knikkers"
gevoel = "blij"
werkwoord = "niezen"
print(speelgoed + gevoel + werkwoord)
# Ga Verder
Schrijf je eigen kleine verhaaltje.
Gebruik een variabele voor de naam van de hoofdpersoon zodat je makkelijk de hoofdpersoon kunt wijzigen.
Voorbeeldverhaal: Henk is een blije jongen. Hij gaat op de fiets naar school. Als Henk op school is gaat hij vrolijk naar de les. Einde!
Code die hier bij hoort:
naam = "Henk"
print(naam + " is een blije jongen.") # denk aan de extra spatie!
print("Hij gaat op de fiets naar school.")
print("Als " + naam + " op school is gaat hij vrolijk naar de les.")
print("Einde!")
Een ‘error’ is een foutmelding. Op errors gaan we later dieper in, maar voor nu is het handig om te weten dat je bij bijvoorbeeld de volgende code:
getel = 4
print (getal + 1)
iets kan krijgen als:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>NameError: name 'getal' is not defined
Als je kijkt naar line 2 (regel 2) dan wordt daar een variabele met de naam getal gebruikt, terwijl deze dus niet bestaat of geen waarde toegewezen heeft gekregen. Je ziet dat er een spelfout is gemaakt in regel 1. Er staat getel in plaats van getal. Als je dat verandert verdwijnt de foutmelding.
Veel voorkomende fouten
Een error kun je bijvoorbeeld krijgen als:
je de " " om een string ergens vergeten bent,
je variabelenaam verkeerd hebt gespeld
je variabele nog niet een waarde hebt gegeven
Het kan ook zijn dat je de toewijzing andersom doet, zoals: 4 = x
Dan krijg je een error die eruit ziet als:
Traceback (most recent call last):
In line 1 of the code you submitted:
4 = x
^
SyntaxError: can't assign to literal
Deze foutmelding houdt dan dus in dat je altijd eerst je variabelenaam moet noemen, en dan pas de inhoud ervan moet geven. In de geval verbeter je het dus door er van te maken:
x = 4
In de toekomst gaan we dieper in op errors en hoe je problemen kunt oplossen. Maar het is handig dat je hier alvast wat over hebt gelezen, in het geval dat je straks wat schrijft en opeens een error krijgt. Ze zien er altijd heel ingewikkeld uit, maar als je hier eenmaal handig in wordt valt het best mee! Neem gewoon rustig je tijd, en bekijk wat er staat en neem je code dan nog even door.
Run de volgende codes, en los de errors op:
Je kunt ook een loop in een ander loop gebruiken! Kijk maar eens naar het volgende figuur:
We doen eigenlijk zes keer hetzelfde:
teken vierkant
draai 90 graden naar rechts
loop langs een zijde
draai 30 graden links
Maar programmeurs houden niet van onnodige code. Het gele stuk bevat vier keer dezelfde twee regels! Dus daar maken we een loop van. En dan krijg je de code zoals hieronder:
Teken:
Taken:
Voer het volgende programma uit en bantwoord dan de vraag die onder de code staat:
Vraag: Kan dit programma korter? Zo ja, hoe?
In principe is de turtle steeds in pen-mode. Dit betekent dat hij steeds een lijn aan het tekenen is terwijl hij beweegt. De turtle kan ook in wandel-mode terecht. Dan kan hij bewegen, terwijl hij geen spoor nalaat. Je kunt tijdens het uitvoeren van een programma meerdere keren naar pen-mode of wandel-mode.
Door het commando turtle.up()
in te geven kom je in wandel-mode terecht.
Door het commando turtle.down()
in te geven kom je in pen-mode terecht.
a] Schrijf een programma dat de onderstaande tekening maakt.
b] Schrijf een programma dat de onderstaande tekening maakt.
Maak de volgende figuren:
Voordat je begint met dit hoofdstuk wil ik graag dat je de volgende puzzel gaat oplossen: https://studio.code.org/s/artist/stage/1/puzzle/8
Bekijk daarna deze film van Jurjen:
We gaan in deze lesbrief aan de slag met het maken van functies. Je gebruikt al functies al je iets tekent met turtle:
turtle.forward() - een functie om de turtle vooruit te laten gaan
turtle.left() - draai de turtle
range(4) - maak een lijstje met de getallen 0, 1, 2 en 3
Eigenlijk alles waar je ()-jes achter zet in Python is een functie. Je weet dan niet hoe het programma de turtle beweegt, je weet wel wat er uiteindelijk gebeurt. We kunnen ook zelf functies maken. En dit is echt superhandig.
In het volgende figuur hebben we 3 vierkanten naast elkaar staan die niet aan elkaar vast zitten.
We kunnen dit doen door met de volgende code:
Mooi, mooie code toch? Maar wat nu als we de vierkanten niet 20 maar 30 groot willen hebben? We moeten dan de gele regels code veranderen:
Als we nog meer vierkanten zouden tekenen zouden we het op nog meer plekken moeten doen! Dubbele code is meestal niet handig. We maken nu een functie die alleen een vierkant tekent:
En op elke plek waar we een vierkant willen schrijven we:
in plaats van
Dus dan krijgen we:
Als je nu andere grootte vierkanten wilt, hoef je het maar op één plek te veranderen.
Maak deze opgave in Repl.it Bekijk de code hieronder en voer hem uit. Maak een functie waarmee je een driehoek tekent en verbeter daarmee de code. Uitdaging: Gebruik een loop en teken de driehoeken in maximaal 13 regels code.
Maak gebruik van functies om de volgende slinger te tekenen:
Hieronder twee functies waarmee je een klein huisje kan maken met zijden van 50 pixels en aan de een functie waarmee je een groter huisje kan maken met zijden van 75 pixels:
Als je kijkt naar het verschil tussen de twee bovenstaande functies, dan merk je dat er haast geen verschil is; het enige dat anders is, is het getal waarmee je aangeeft hoeveel pixels de turtle vooruit moet gaan! Waarom zouden we dan zoveel code moeten schrijven? Kan het niet korter?
Het antwoord is: JA!
Als je functies zoals forward
, backward
, right
, left
, goto
en shape
aanroept, dan moet je tussen de haakjes iets opschrijven. Bij forward
bijvoorbeeld, moet je aangeven hoeveel de turtle vooruit moet gaan. Je zegt daarom turtle.forward(100)
om aan te geven, dat hij 100 pixels vooruit moet gaan. Zou het nou niet makkelijker zijn om ook onze tekenhuis
functie zo slim te maken, dat we slechts tekenhuis(100)
hoeven te zeggen, om een groter huis met zijden van 100 pixels te maken? En als we tekenhuis(50)
zeggen, dat hij dan een kleiner huis maakt, et cetera. Dit doen we als volgt:
In de def zetten we eerst het woordje lengte tussen de haakjes (je mag ook een ander woord kiezen). Zie rechts. Het gedeelte dat nu met geel gemarkeerd is, is dus veranderd.
Wat je tussen de haakjes zet noem je een parameter of argument.
Vervolgens vervangen we het getal dat we tussen forward
hebben gezet door het woordje lengte.
Dus overal waar de turtle 50 vooruit moet, gaat de turtle nu lengte vooruit.
Roep nu de functie aan met de gewenste lengte.
Wat er nu gebeurt: Als je tekenhuis(100)
opgeeft, dan wordt het woordje lengte gelijkgemaakt aan het getal 100. Overal waar lengte staat wordt dan 100 ingevuld.
Maak een functie vierkant waarin je tussen de haakjes kan aangeven hoe groot het vierkant
moet zijn. Je moet de functie dus als het volgt kunnen gebruiken:
vierkant(20)
vierkant(50)
vierkant(100)
et cetera.
Maak de volgende tekening:
Maak een functie driehoek()
die driehoeken van verschillende lengtes kan tekenen. Uiteindelijk moet je drie driehoeken tekenen. Één met zijden van 20 pixels, één met zijden van 40 pixels en één met zijden van 60 pixels. Het moet er als volgt uitzien:
Maak een programma dat het volgende tekent:
Maak een functie envelop()
die de parameter lengte moet meekrijgen. De aanroep envelop(50)
zal dan het volgende plaatje tekenen:
Pas je programma zo aan, dat er drie enveloppen worden getekend. De enveloppen moeten van links naar rechts steeds groter worden. De groottes mag je zelf bepalen.
Nu gaan we een stukje verder met de uitleg …
Als je een functie maakt, waar je een getal (of iets anders) aan kan meegeven, dan noem je dat een functie met een parameter. Dus de functie tekenhuis
uit het hierboven gegeven voorbeeld heeft een parameter genaamd lengte. Nu heb je ook al kennisgemaakt met functies die meer dan één parameter hebben. Denk maar aan de turtle.goto
functie. Daar moest je namelijk de x èn de y aan meegeven. Voorbeeld: turtle.goto(120,30)
Hoe kun je er nou voor zorgen dat jouw functie ook meer dan één parameter kan gebruiken? Het antwoord is vrij eenvoudig: door voor de tweede een andere naam te verzinnen en dat vervolgens te gebruiken.
Kun je ook functies hebben met meer dan twee parameters? Ja! Zoveel als je wilt. Maar voor de functies die we in deze module moeten maken komt dat niet zo vaak voor…
Breid de tekenhuis functie uit met een extra parameter waarmee je, naast de kleur, ook de lengte van de zijden van het huisje kan meegeven.
Maak nu zelf een functie genaamd rechthoek die twee parameters meekrijgt: lengte en breedte. Roep ten slotte de functie als volgt aan:
In de vorige les hebben we het over while loops gehad, maar wat nou als je na een bepaalde tijd wilt stoppen met de loop? Bijvoorbeeld na tien keer dezelfde vraag gesteld te hebben dat het programma stopt. Dit kan door booleaanse vergelijkingen met de while mee te geven. Als de vergelijking dan False is, stopt het programma. Het gaat als volgt:
We maken een eerst een counter aan met een bepaalde beginwaarde. Vervolgens updaten we deze steeds en als deze tien wordt stopt het programma.
Je kan hier zien dat er hier twee verschillende manieren gebruikt worden om uit de while loop te komen. De eerste is als het woordje "quit
" getypt wordt, want dan wordt er vervolgens een break
gebruikt die ervoor zorgt dat we uit de loop springen. De tweede manier is dus de booleaanse vergelijking na de while
. Zolang deze vergelijking True
geeft, blijft de loop in werking. Maar op het moment dat deze booleaanse vergelijking een waarde van False
heeft, wordt de loop gestopt en gaan we verder naar de rest van het programma (in dit geval dus: print ("EINDE")
).
Schrijf een programma waar de gebruiker steeds om een getal wordt gevraagd. Tel dit getal dan op bij het voorgaande getal. Als deze som van alle voorgaande getallen uiteindelijk groter is dan 200, stopt het programma en wordt uit uiteindelijke getal geprint.
>>> Hallo, wil je mij een getal geven?
>>> 27
>>> Hallo, wil je mij een getal geven?
>>> 150
>>> Hallo, wil je mij een getal geven?
>>> 63
>>> Het totaal is: 240
Schrijf een programma waarbij de gebruiker vijf pogingen krijgt om een getal onder de tien moet raden. Als het getal geraden is stopt het programma en krijgt de gebruiker een vrolijk berichtje dat hij/zij heeft gewonnen! Als het niet geraden wordt stopt het programma dus na vijf keer.
>>> Geef mij een getal onder de tien a.u.b.
>>> 5
>>> Helaas!
>>> Geef mij een getal onder de tien a.u.b.
>>> 6
>>> Helaas!
>>> Geef mij een getal onder de tien a.u.b.
>>> 7
>>> Helaas!
>>> Geef mij een getal onder de tien a.u.b.
>>> 8
>>> Helaas!
>>> Geef mij een getal onder de tien a.u.b.
>>> 9
>>> Helaas! Je hebt het niet geraden binnen vijf pogingen :(
Vraag de gebruiker om het langste woord dat ze kunnen bedenken, en print vervolgens elke letter daarvan apart uit. (denk aan slicing)
Schrijf een programma waarin je om de gebruiker zijn email adres vraagt, en vervolgens alles voor het “@ ” teken print.
Schrijf een programma waarin je de gebruiker om een zin vraagt, en print vervolgens elk woord apart uit.
Een van de handigste eigenschappen van een computer is dat deze in staat is om logische stappen te maken. Je kan een programma heel makkelijk sturen door een “als / dan” situatie te creëren. Bijvoorbeeld:
Als ik mijn schoen in mijn handen heb dan: Trek ik hem aan.
Als ik het koud heb dan: Pak ik mijn jas.
Dit soort situaties zijn heel handig, omdat je dan direct invloed hebt op oorzaak / gevolg. Bij de voorgaande voorbeelden was de oorzaak (wat moet er aan de hand zijn) steeds dik gedrukt, en het gevolg cursief (wat ga je dan doen?). Als de dik gedrukte situatie gebeurt, wordt de cursieve opdracht uitgevoerd. Bij programmeren doen we dit met een if-statement. Het if
-statement wordt als volgt gebruikt:
In het voorgaande voorbeeld zien we dat x de waarde 3 toegewezen krijgt Na de vergelijking if x == 3
: wordt de printopdracht uitgevoerd. Het dubbele is-teken (==)
betekent hier ‘is hetzelfde als’. Als x dus niet 3 is, was de printfunctie na de if
nooit uitgevoerd.
Nu zie je dus dat er niks geprint wordt.
Op deze manier hebben we er niet zoveel aan: we weten precies wat er gaat gebeuren. Maar als we dit combineren met de input()
-functie kun je leuke dingen doen!
Vraag de gebruiker om een stadsnaam. Als de gebruiker dan bijvoorbeeld "Amsterdam" invoert print je een boodschap zoals "Wat leuk! Dat is mijn favoriete stad!"
Lees een getal in. Als het getal gelijk is aan 4 print je uit: "Je hebt precies 4 geraden!" Als het getal gelijk is aan 6 print je uit: "Zes is een perfect getal!" In alle andere gevallen doe je niets.
Je kunt nu met IF iets doen als de gebruiker bijvoorbeeld "soep" in voert. Maar wat nou als je iets wilt doen als de gebruiker NIET invoert wat je wilt? Dit kan je opvangen dat een else:
statement te gebruiken. Hierbij zeg je “als keuze gelijk is aan "soep", voer de komende opdracht uit. En anders (keuze is niet gelijk aan "soep"), doe het volgende (iets anders)”. Dit werkt als volgt:
Op deze manier kan je dus alle situaties opvangen die je niet in je if
gedeelte beschreven hebt. Het werkt natuurlijk ook met getallen:
Schrijf een programma dat de gebruiker vraagt hoe warm het is. Als het 20 graden of warmer is, schrijf dan naar het scherm 'Dat is lekker warm!''. Als het kouder is, schrijf dan 'Dat is koud...'.
HINT: met behulp van >= controleer je of het groter dan of gelijk is.
Schrijf een programma dat de gebruiker vraagt hoe oud hij is. Als hij 18 of ouder is, dan zegt het programma: Gefeliciteerd, je bent volwassen! Anders zegt het programma: Helaas, nog niet volwassen.
Het programma wordt altijd afgesloten met de melding: “Bedankt voor je deelname!”.
Je kunt ook een if-statement in een ander if-statement gebruiken. We geven hier een korte uitleg. In de volgende lesbrieven gaan we hier uitgebreider op in.
Je ziet dat we eerste vragen wat iemand wil eten. En alleen als het "soep" is vragen we hoeveel kopjes. Als het iets anders is vragen we niets anders meer.
Laat de gebruiker een getal raden onder de 10.
Als de gebruiker precies 9 raadt, heeft hij gewonnen en mag hij een prijs kiezen. V raag: "Je hebt gewonnen! Wil je een koekje?" Als de gebruiker "ja" zegt, zeg je: "Alsjeblieft!". Anders zeg je: "Ok, dan geen koekje."
Als de gebruiker NIET 9 heeft print je uit: "Jammer, niet gewonnen."
In een spel is er een geheim ingebouwd. Er zijn twee manieren om het te vinden. Als je eerst '+' invoert en daarna 'a' kom je bij het geheim. Je voert steeds een Enter in na ieder karakter.
Print eerst: Probeer de geheime code te raden: Zorg daarna dat je met de geheime code bij het geheim kan komen. Als je het geheim gevonden hebt print je: Je hebt het gevonden! Anders print je: Helaas dat klopt niet!
Print aan het einde van het programma een afscheidsboodschap: Doei!
Naast de > en < heb je nog meer vergelijkingsoperatoren. Hieronder een tabel van alle vergelijkingsoperatoren en de bijbehorende betekenis:
Met 5-letter LINGO is het de bedoeling dat een gebruiker een woord invoert dat precies 5 karakters bevat. Zo niet, dan moet het programma aangeven dat het ingegeven woord incorrect is. Maak een programma (functie) die de gebruiker om een woord vraagt, vervolgens berekent hoeveel letters erin zitten. Als er meer of minder dan 5 letters inzitten, dan geeft hij een foutmelding. Zo niet, dan zegt het programma: “Goed zo, je hebt een 5 letter woord ingevoerd. (TIP: gebruik de functie len()
, als je dan bijvoorbeeld woord_len = len(“broek”)
komt er 5 in woord_len
te staan)
Uitdaging: zorg dat je programma alleen letters accepteert (en niet bijvoorbeeld ‘+’ of ‘:’.
Functies heb je inmiddels al een paar keer gezien, maar niet echt zelf gemaakt! Een functie is een stuk code die je kan aanroepen en zo steeds dezelfde acties kan uitvoeren door de naam ervan aan te roepen. Je hebt al heel vaak inmiddels functies gebruikt als print()
, len(), input()
etc. Maar nu gaan we kijken hoe we dit soort dingen zelf kunnen maken!
Voorbeeld:
Het programma doet niets… Dit komt omdat we wel de functie gemaakt hebben, maar hem niet gebruiken.
Wil je dat de functie wordt gebruikt, dan moet je hem aanroepen.
Test de code in je eigen compiler.
Voorbeeld #2
Stel je wilt van drie verschillende getallen steeds weten welke de grootste is, dan kan je daar een functie voor schrijven
Hier stopt de functie. Hieronder kan je dan vervolgens de functie aanroepen en dan wordt het bovenstaande uitgevoerd, zonder het aanroepen van de functie wordt deze dus ook niet uitgevoerd.
max_van_drie()
Hier zie je dat alles wat onder de def staat ingesprongen is (een tab ervoor heeft) bij de functie hoort. Zo kan je voor vrijwel alles een functie schrijven, die je later simpelweg alleen maar hoeft aan te roepen om hem meerdere keren te kunnen gebruiken! Handuuuuuuuugh!
Verder kan je ook nog een variabele aan een functie mee geven, zo kunnen we bijvoorbeeld de max_van_drie functie ook omschrijven zodat er geen input van de gebruiker gevraagd wordt. Dit werkt als volgt:
Als we de functie nu aanroepen, kunnen we de waarden van a, b en c meer geven tussen de haakjes. Zoals dit:
max_van_drie(4, 9, 23)
Hier wordt de 4 als het eerste argument gezien dat meegegeven wordt aan de functie, en zal dus als “a” in de functie zelf gebruikt kunnen worden . Test dit maar in je eigen compiler.
Schrijf een functie die een zin vraagt aan de gebruiker en deze vervolgens achterstevoren print. Dit kan met de slicing techniek!
Schrijf een functie die steeds om een aantal getallen vraagt, en deze allemaal bij elkaar optelt en de som ervan uiteindelijk uit print.
Schrijf een functie die checkt of de input van een gebruiker binnen een bepaalde range valt. Dus of deze tussen twee verschillende getallen past.
>>> Hallo, wilt u mij een getal geven?
>>> 38
>>> 38 valt niet tussen de 3 en de 9
Schrijf een functie die drie verschillende strings vraagt aan de gebruiker, de lengte ervan berekend, deze lengte vervolgens bij elkaar op telt, dit getal dan deelt door 2.5, en het dat uiteindelijke getal afgerond naar boven en naar beneden print.
Schrijf een functie die de laagste van vijf cijfers terug print.
Schrijf een functie die drie variabelen mee krijgt, en vervolgens deze allemaal met elkaar vermenigvuldigt en het totaal print.
Interactieve programma's met de input functie
Met de print functie kun je gegevens op het scherm printen. Maar wat als je nou wilt dat de gebruiker iets kan invoeren? Heb je daar ook iets voor? Jazeker! De input()
-functie.
Je ziet dat je programma wacht op invoer. Als je iets intypt en eindigt met enter dan gaat het programma verder. Op deze manier kan je dus een programma schrijven dat reageert op de antwoorden van zijn gebruiker!
Belangrijk: Je moet het resultaat van de input()-functie wel eerst in een variabele zetten, zodat dit later gebruikt kan worden.
De regels tekst (strings) worden nu onder elkaar geprint maar je kunt ook string aan elkaar plakken met + (concatenation):
Schrijf een programma dat de voornaam van de gebruiker opvraagt met de functie input. Vervolgens wordt de gebruiker gegroet met 'Hallo, [en hier komt de voornaam van de gebruiker]!'. Hint: denk aan concatenation!
Schrijf een programma dat de gebruiker vraagt om een zelfstandig naamwoord (bv. boom, huis, kast), een bijvoeglijk naamwoord (bv. groot, vies, vervelend) en een infinitief van een werkwoord (bv. lopen, schrijven, eten). Vul de ingevoerde vervolgens in, in de onderstaande zin en zet het resultaat op het beeld. Vond je ooit een zo ontzettend dat je het voortdurend opnieuw wilde ? Bijvoorbeeld: Vond je ooit een boom zo ontzettend mooi dat je het voortdurend opnieuw wilde knuffelen?
Zoek je verhaal op die je bij lesbrief 1 hebt gemaakt. Maar vraag nu de naam van de hoofdpersoon aan de gebruiker!
Voorbeeldverhaal: Hoe heet je? Henk
Henk is een blije jongen. Hij gaat op de fiets naar school. Als Henk op school is gaat hij vrolijk naar de les. Einde!
Code die hier bij hoort:
naam = input("Hoe heet je?")
print(naam + " is een blije jongen.") # denk aan de extra spatie!
print("Hij gaat op de fiets naar school.")
print("Als " + naam + " op school is gaat hij vrolijk naar de les.")
print("Einde!")
Schrijf een programma dat om drie woorden vraagt en vervolgens die drie woorden in alle zes mogelijke volgordes weer naar het scherm schrijft. Je moet zes keer een print commando geven!
Bekijk eens het onderstaande programma:
Je zou denken dat je hiermee een optelprogramma hebt gemaakt, maar dat valt vies tegen! Probeer maar eens een paar getallen op te tellen en kijk goed naar het resultaat. Probeer het pogramma uit.
Wat gaat hier nou mis? Als je voor het eerste getal 22 kiest en voor het tweede getal 56, dan is het resultaat 2256. Wat is hier misgegaan?
Python heeft de twee 'getallen' aan elkaar vastgeplakt. Dit doet hij, omdat hij denkt dat je twee strings aan elkaar wilt vastplakken (concatenation!). Net alsof je "programmeren is " en "fun" aan elkaar wilt vastplakken. Maar wij willen niet dat Python die twee getallen aan elkaar vastplakt, maar dat hij ze bij elkaar optelt! Eigenlijk willen we dat Python de twee getallen ook echt als twee getallen gaat beschouwen. De vraag is: Hoe doen we dat?
De input-functie is hier van belang. Die zegt altijd dat de invoer van de gebruiker als tekst moet worden beschouwd. Wij kunnen expliciet aangeven dat de invoer toch moet worden opgevat als een echt getal. Dit doen we door de functie int() te gebruiken. Dit ziet er als volgt uit:
Let vooral op het gebruik van de functie int()
! int is een afkorting voor integer. Het is de Engelstalige benaming voor een geheel getal. Je zegt hier eigenlijk: Hetgeen dat de gebruiker invoert met de input functie moet worden opgevat als een getal.
Schrijf een programma dat vraagt om vier getallen. Tel de eerste twee getallen bij elkaar op, deel dat dan door het derde getal, en vermenigvuldig het met het vierde getal. Print vervolgens het antwoord op het scherm.
Schrijf een programma dat de gebruiker vraagt om vijf getallen en schrijf daarna het gemiddelde van die vijf getallen naar het scherm (niet afronden).
Schrijf een programma dat de gebruiker vraagt om het huidige jaartal en om het jaar waarin hij geboren is. Reken uit hoe oud de gebruiker is aan het eind van het huidige jaar (in hele jaren) en schrijf het antwoord naar het scherm.
Inmiddels ben je al bekend met twee soorten informatietypes (datatypes), namelijk strings
en int’s.
Strings
zijn een verzameling karakters die als het ware als een zin gebruikt worden door de computer. Een string
is een type (soort) informatie waarvan de computer alles tussen de “” als een geheel behandeld. En net zoals dat een string een type informatie is, zijn er ook nog andere types. Een van de belangrijkste hiervan ken je nu ook al. De int
wat dus staat voor integer, was een heel getal. Maar wat nou als je met decimale getallen wilt werken (getallen met een komma erin)? Hiervoor bestaat er nog een ander type informatie. Namelijk de float
wat een getal is met nog cijfers achter de komma.
In het Engels gebruik je een '.' (punt) in plaats van een '.' (komma). Daarom schrijf je een getal 2,63 bij programma als 2.63
Deze laatste twee datatypes zijn heel erg belangrijk aangezien je er complexe berekeningen mee kan doen. Eerder deze les heb je al meerdere berekeningen gedaan met gehele getallen. Als je daarentegen met decimale getallen wilt werken heb je dus de floats nodig. Een paar voorbeelden van floats
zijn:
Hierboven zie je dat er verscheidene berekeningen gedaan worden met floats
. Als je met de input()
functie werkt, wordt het belangrijk om hetzelfde trucje toe te kunnen passen als we eerder met de integers
hebben gedaan. Als je namelijk niet expliciet het type informatie geeft aan de input()
functie, gaat dit altijd als string behandeld worden. Maar als je het type int
aan een float
mee geeft krijg je hier een error van. Geef bij het volgende voorbeeld maar een float
als input mee en kijk wat er gebeurt!
Hierboven zie je dat er verscheidene berekeningen gedaan worden met floats
. Als je met de input()
functie werkt, wordt het belangrijk om hetzelfde trucje toe te kunnen passen als we eerder met de integers
hebben gedaan. Als je namelijk niet expliciet het type informatie geeft aan de input()
functie, gaat dit altijd als string behandeld worden. Maar als je het type int
aan een float
mee geeft krijg je hier een error van. Geef bij het volgende voorbeeld maar een float
als input mee en kijk wat er gebeurt!
Om dit op te lossen kan je dus simpelweg in plaats van de functie int()
de float()
functie gebruiken. Als je dit doet, wordt de input behandeld als float
en kan je hier dus weer berekeningen mee maken met getallen achter de komma.
Het bovenstaande voorbeeld laat dus heel goed het verschil tussen float
en int
waardes zien. Bij berekeningen moet je hier dus goed op letten hoe je het in gaat voeren en wat voor antwoord je wilt krijgen.
Verder kan het natuurlijk ook zo zijn dat je wilt dat een int
of float
als string
behandeld wordt. Dit is namelijk nodig als je een variabele die een int
of float
bevat wilt printen. Een voorbeeld hiervan is het volgende:
Bedenk wat de types zijn van de volgende tien dingen. Kies uit integer, float of string.
19
“3”
21.234
“Hoela hoepen”
24 * 21.4
29 / 3
“293.3”
25.1 + 5
2 / 3 * 9
8 + 30 / 10
Zoals je hierboven kan zien, maakt het erg veel uit hoe je de berekening invoert. Voor de volgende opdracht ga je hier zelf een programma voor schrijven:
Schrijf een programma dat 2 of meer inputs vraagt, maak er een berekening mee en print het antwoord uit. In het programma moeten alle drie de datatypes voorkomen.
Als je even niet meer weet wat voor type iets heeft, bestaat er een functie die je hiervoor kan gebruiken. Als je namelijk type(variabele) gebruikt, zegt de computer wat het type is.
Nu we al die lastige informatie hebben verwerkt gaan we even weer verder met berekeningen met variabelen en deze straks combineren met strings!
We kunnen de variabelen bijvoorbeeld ook weer gebruiken om de turtle, die je hebt leren kennen in Python 0, vooruit te laten bewegen. In plaats van dat je een getal meegeeft aan de forward()
functie, kun je bijvoorbeeld ook een variabelenaam meegeven. En ook een berekening met een variabele! Dat ziet er dan zo uit: turtle.forward(d*10)
Wat wordt met de onderstaande code op het scherm geprint? Bedenk het eerst voor jezelf en probeer het daarna uit.
Schrijf een programma waarmee je twee variabelen instelt met een beginwaarde. De eerste met waarde 3 en de tweede variabele met waarde 8. De namen van de variabelen mag je zelf weten. Tel de twee getallen bij elkaar op en sla het resultaat op in een nieuwe variabele. Print uiteindelijk het resultaat naar het scherm.
Je hebt al eerder kennis gemaakt met hoe for-loops werken. Als je wilt dat iets tien keer wordt herhaald, dan gebruik je de for-loop. Hier een voorbeeld:
In dit geval wordt de regel "Dit is herhaling" tien keer herhaald. En na de zin Dit is een herhaling volgt de inhoud van de loopcounter i
Je kunt nu ook invoer van de gebruiker gebruiken om je for-loop aan te passen:
Je kunt ook loops en if-statements combineren natuurlijk:
Schrijf een programma dat vraagt of iemand wel of niet naar de dierentuin wil, en als het antwoord ja is, vraag dan met hoeveel mensen zij erheen willen. Print dan voor ieder persoon waarvan ze willen die mee gaat een keer “veel plezier!”.
Breid het voorgaande uit. Als er op de eerste vraag een nee gegeven wordt, vraag dan of ze anders misschien naar de film willen. Zo ja, met hoeveel personen (en weer zo vaak printen), en zo nee print dan een gepast antwoord.
Schrijf een programma dat getallen gaat optellen. Vraag eerst hoeveel getallen een gebruiker wil optellen. Vraag daarna steeds opnieuw om een getal en tel dat op bij het totaal. Aan het einde print je:
De som van de getallen is <som van de getallen>.
HINT: Gebruik een teller buiten je for-loop:
som = 0
for _ in range(5):
som = som + getal
print(som)
In de voorgaande herhalingen weet je precies hoe vaak je het wilt herhalen. Maar wat als je niet van te voren weet hoe vaak je iets wilt herhalen? Dan gebruik je een andere soort loop. De while
-loop.
Als je dit programma uitvoert, dan zal hij nooit stoppen. Hij zal continu vragen om een woord in te typen en zodra je een woord intypt geeft hij de lengte van het ingetypte woord. Dit betekent dat het woordje EINDE nooit geprint zal worden.
We kunnen een while loop ook laten stoppen door gebruik te maken van een boolean (True/False waarde). We kunnen namelijk dit zeggen: Als iemand het woordje quit intypt, dan stoppen we met de loop.
Dit worden ook wel interactieve while loops genoemd. Het aantal keren dat de loop herhaalt is dan niet van te voren bepaald, maar hangt af van de invoer van de gebruiker!
Maak een interactieve while loop waarin een gebruiker net zo lang woorden kan intypen, totdat hij het woordje stop ingeeft. Zodra hij dat doet, gaat het programma uit de loop en eindigt hij. Een verloop van het programma zou er als volgt uit kunnen zien:
>>> Voer een woord in: hoi
>>> Voer een woord in: doei
>>> Voer een woord in: informatica
>>> Voer een woord in: boe
>>> Voer een woord in: stop
>>> Je wilt stoppen? Dat kan! Tot de volgende keer!
Lees herhaaldelijk een woord in van de gebruiker. Print dan steeds uit: Wat een mooi woord: Waarbij het woord is dat de gebruiker invoert. Zodra de gebruiker stop invoert stop je de loop.
Strings zijn rijen met letters
Een stukje tekst (string) in Python is eigenlijk een rij met letters. En zo kun je een variabele met tekst ook benaderen. Zie het volgende voorbeeld:
Door achter de variabele fruit
blokhaken (daarmee bedoel ik de tekens ‘[‘ en ‘]’) te plaatsen en daartussen een getal te zetten, geef je eigenlijk aan dat je de letter op positie drie wilt uitprinten. Dus in dit geval zeg ik: geef mij de letter op positie drie in het woord ‘banaan’. Maar denk erom dat python begint te tellen bij 0! Kortom, je krijgt niet de n te zien, maar de a! probeer maar eens.
Maak een programma dat de gebruiker steeds vraagt(in een while loop) om een woord in te voeren. Als het woord begint met een n, dan zegt hij "Je woord begint met een n" en stopt hij met de loop.
Maak een programma dat de gebruiker steeds vraagt(in een while loop) om een woord in te voeren. Als het woord eindigt met een n, dan zegt hij "Je woord eindigt met een n" en stopt hij met de loop.
TIP: Omdat je niet weet hoe lang het woord is, dat de gebruiker intypt, kun je ook niet zomaar naar de zoveelste letter kijken. Maar wellicht kun je wel dankbaar gebruik maken van de len()
functie!
Het volgende programma telt het aantal keren dat de letter ‘a’ voorkomt in een woord.
Hierboven staat een variant van een loop die je als het goed is nog niet eerder hebt gezien. for letter in woord
is een loop die in dit geval zes keer wordt herhaald. Waarom? Omdat het woordje banaan uit zes letters bestaat! En elke keer bevat de variabele letter de volgende letter in het woord. De eerste keer bevat het de letter b
, de tweede keer de letter a
, de derde keer n
enzovoorts.
Dit programma demonstreert ook het gebruik van een teller. De variabele teller is aan het begin ingesteld op 0 en vervolgens wordt hij iedere keer opgehoogd zodra een ‘a’ is gevonden. Als de loop afloopt, bevat teller het resultaat: namelijk het totaal aantal ‘a’-s.
Pas het bovenstaande programma aan, zodat de gebruiker een woord mag ingeven. Vervolgens moet het programma het aantal klinkers (‘a’, ‘e’, ‘i’, ‘o’ , ‘u’) tellen in dat woord.
Net als dat if-opdrachting in if-opdrachten gezet kunnen worden, kan dit ook met for-loops. Dit is heel handig als je bijvoorbeeld tien keer door een woord wilt loopen.
Zoals je kan zien wordt er hier 5 keer door het woord 'banaan' heen geloopt. En elke keer word er een print actie uitgevoerd per letter in dat woord. Daarom staat elke letter op een nieuwe regel. Als je bijvoorbeeld een ander woord zou nemen in plaats van “for i in range(5)
:” zou er net zo vaak banaan geschreven worden, als er letters in dat woord zou zitten
Hier zie je dus dat het woord banaan
drie keer geprint wordt, omdat het woord 'koe
' bestaat uit drie letters. Bij het volgende voorbeeld wordt dat nog iets duidelijker hoe het werkt
Hier zie je dat er eerst een 'k’
geprint wordt, vervolgens een 'b’
, daarna weer een 'k’
, dan een 'a’
etc. Zo zie je dat er per letter in koe, steeds door het woord banaan gegaan wordt.
Schrijf een programma dat vier keer, elke letter van het woord “lolly” print.
Schrijf een programma dat afwisselend elke letter van twee verschillende woorden print, dus: koe + man wordt:
>>> k
>>> m
>>> o
>>> a
>>> e
>>> n
Je kunt in Python ook met de in operator kijken of een letter in een woord voorkomt:
In alle drie de gevallen is de in-constructie een vergelijking die waar of onwaar is. Daarom mag je hem achter een if zetten.
Eerder hebben we bij de if
-expressies vergelijkingen gebruikt. Als dit waar is, dan doen we dat! Deze vergelijkingen worden ook wel booleaanse expressies genoemd. Een booleaanse expressie is een vergelijking waarvan er alleen gezegd kan worden of deze waar is of niet. Het kan niet misschien waar zijn of half waar. Hier krijg je dan de Engelse woorden true
(waar), en false
(onwaar) van. In Python schrijf je waar als True
en onwaar als False
. Hieronder wat voorbeelden:
Bij de if-expressies zou de booleaanse expressie 4>3, een true geven, en dan wordt de code in deze if-expressie uitgevoerd. Bij 4<3 zou er een false gegeven worden, en zou er niks gebeuren, of gaat de computer naar de volgende if-expressie. Kijk de volgende voorbeelden maar door, hier zie je een hele lijst met booleaanse expressies. Kijk maar of je snapt waarom het programma deze antwoorden terug geeft.
Als je een true terug krijgt bij deze booleaanse expressies, voert het programma alles af wat nog komt binnen de if-expressie, en anders stopt het en gaat deze verder. Later zullen we nog andere gevallen leren waarbij booleaanse expressies van belang zullen zijn.
Bedenk voordat je de komende booleaanse expressies zelf uitvoert, of ze een true of false geven. Voer ze daarna uit.
4 > 5
4 != 4
4 == (7 - 3)
a = 3
b = 6
b - a == a
“hallo” == “hallo”
Zoals je hierboven kan zien, kan je ook booleaanse expressies uitvoeren met strings. Het komt erop neer dat alles dat voor de vergelijkings expressie hetzelfde is als erna, dat er dan true uit komt. Dit is handig voor als je input wilt vergelijken en wilt dat de gebruiker dit precies in typt zoals jij wilt! Dit hebben we natuurlijk al eerder gezien.
Schrijf een programma dat door middel van booleaanse waarden kijkt welke soorten fruit de gebruiker wilt, en vervolgens vraagt hoeveel de gebruiker er van zou willen. Geef twee verschillende soorten fruit als mogelijkheid. voorbeeld
>>> Hallo, wilt u appels of peren?
>>> peren
>>> Hoeveel peren wilt u?
>>> 6
>>> Oke! Wij sturen u 6 peren!
Met de if opdracht kun je een onderscheid maken tussen twee verschillende mogelijkheden: of de if-voorwaarde is waar of hij is onwaar. Soms zijn er meer dan twee mogelijkheden en hebben we meer dan twee takken nodig. Een manier om een dergelijke berekening vorm te geven is een gekoppelde voorwaarde:
Als ik mijn schoen in mijn handen heb.
Trek ik hem aan.
of Als ik het koud heb.
Pak ik mijn jas.
En anders
Ga ik op de bank zitten.
Hier is dus een situatie waar je je schoen aantrekt, als je hem in je handen hebt.. Of ‘als je het koud hebt’, ‘dan pak je je jas’. En in alle andere gevallen ga je op de bank zitten. Je kunt dit soort situaties programmeren met een elif. We gaan dat uitleggen met een voorbeeld met getallen. Bekijk de volgende code:
Hoe de if-elif-else constructie werkt zie je in het volgende plaatje:
elif is een afkorting van "else if". Ook hier wordt precies één tak uitgevoerd. Er is geen limiet op het aantal elif instructies. Staat er een else opdracht, dan is dat het einde, maar deze hoeft er niet te staan.
Schrijf een programma waar de gebruiker een temperatuur moet ingeven. Als het onder nul is moet het programma zeggen "Het vriest!". Als de temperatuur tussen 0 en 15 zit, zeg je: "Trek een jas aan als je naar buiten gaat." Anders zeg je: "Je kan zonder jas naar buiten!"
Schrijf een programma dat de gebruiker vraagt om drie dingen:
het huidige jaar,
zijn/haar geboortejaar
leeftijd.
Als het geboortejaar na het huidige jaar ligt, schrijf dan naar het scherm:
Je bent nog niet geboren.
Als de persoon al jarig is geweest schrijf je:
Je bent dit jaar al jarig geweest.
Als de persoon nog niet jarig is geweest schrijf je:
Je bent dit jaar nog niet jarig geweest.
Als de leeftijd niet kan kloppen schrijf je:
Je leeftijd klopt niet met de jaartallen!
Elke voorwaarde wordt in volgorde gecontroleerd. Is de eerste onwaar, dan wordt de volgende gecontroleerd, enzovoorts. Is er één waar dan wordt de bijbehorende tak uitgevoerd en de instructie eindigt. Zelfs als er meer dan één voorwaarde waar zou zijn. Alleen de tak bij de eerste keer waar wordt uitgevoerd.
Schrijf een programma waarin de gebruiker wordt gevraagd om een getal, en vergelijk die vervolgens met een ander getal die je er zelf in hebt gezet. Is het getal hetzelfde, vertel dit dan aan de gebruiker, en zeg anders dat het niet hetzelfde is.
Schrijf een programma waar de gebruiker wordt gevraagd van welk soort fruit hij/zij houdt. De keuze moet tussen twee soorten fruit zijn, en dit moet een toepasselijke reactie opbrengen. En als de gebruiker iets anders zegt moet dit ook opgevangen worden met een reactie.
Schrijf een programma die een getal naar beneden afrondt als de gebruiker “beneden” in typt, naar boven afrondt als er “boven” wordt gegeven, en anders de wortel van het getal neemt.
Schrijf een programma dat reageert als een rekenmachine door middel van de input()
functie. Zorg ervoor dat de eerste input de soort berekening wordt (optellen, aftrekken, delen of vermenigvuldigen) en de tweede en derde input de getallen zijn waarmee de berekening uitgevoerd wordt. Denk eraan hoe je bij bepaalde berekeningen de input en output wilt hebben in verband met informatietypes!
In de vorige les heb je geleerd dat over if-elif-else expressies, maarrrr wist je ook dat je if-opdrachten in if-opdrachten kan plaatsen?! Dit worden geneste
if-opdrachten genoemd. Zo een geneste if ziet er schematisch uit als volgt:
Voorbeeld:
Als num groter dan of gelijk is aan 0, dan komt het programma in een tweede if. Deze tweede if wordt alleen uitgevoerd als de vergelijking num >= 0
waar is (als deze booleaanse vergelijking dus true terug geeft!). De eerste else die er staat hoort bij de tweede if. Dit kun je zien aan de hand van de tabjes die zijn gebruikt. Het goed gebruiken van de tabs is hier dus ontzettend belangrijk! Mede omdat het een vereiste is van python zelf, maar ook omdat het je code een stuk leesbaarder maakt. Dit is altijd heel erg belangrijk!
Schrijf een programma die de gebruiker vraagt of hij een ‘lahmacun’ wil of een ‘borek’. Als de gebruiker kiest voor ‘lahmacun’, dan moet hij een tweede vraag krijgen: Wil hij er één met sambal of zonder sambal? Als de gebruiker er één met sambal wil dan zegt het programma "Alsjeblieft! Een lahmacun met sambal". Zo niet, dan zegt hij "Alsjeblieft! Een lahmacun zonder sambal". Zo ziet de werking van het programma eruit:
>>> Welkom bij de digitale kantine :)
>>> Maak een keuze (lahmacun of borek) lahmacun
>>> Wil je er ook sambal op? ja
>>> Alsjeblieft! Een lahmacun met sambal.
Breid nu het bovenstaande programma uit. Als de gebruiker borek wil, dan krijgt hij een tweede vraag: Met gehakt of kaas? Afhankelijk van zijn keuze krijgt hij een bericht te zien. Zo kan het eruit zien:
>>> Welkom bij de digitale kantine :)
>>> Maak een keuze (lahmacun of borek) borek
>>> Met gehakt of kaas gehakt
>>> Alsjeblieft! Een borek met gehakt!
Schrijf een programma waarbij je de gebruiker een vraag stelt waar alleen ja of nee op geantwoord mag worden (bij wat anders moet dit opgevangen worden!) en als er ja geantwoord wordt dan moet er een nieuwe vraag gesteld worden. Deze vragen mag je zelf bedenken, wees creatief!
Je kunt ook if-opdrachten in if-opdrachten in if-opdrachten plaatsen. In principe kun je if-opdrachten oneindig gaan nesten. Maar in de praktijk hangt het af van hoe slim je het programmeert en hoe moeilijk de keuzestructuur is.
Zoals je nu inmiddels heel goed weet kan je booleaanse expressies gebruiken bij verscheidene dingen! Maar wat nou als je meerdere voorwaarden tegelijk wilt controleren. Nou dit kan dus heel makkelijk! Dit kan namelijk door middel van het gebruik van and, or en not operatoren. Het gaat als volgt:
Hier schrijven we een programma waarin we checken of de gebruiker een goede keuze heeft gemaakt. De "and" operator kijkt of de twee booleaanse expressies allebei True geven en dan pas is het geheel ook True.
We kunnen ook een "or" operator gebruiken, hier wordt er gechecked of een van de twee booleaanse expressies waar zijn. Als een van de twee true geeft, is het geheel ook true. Zo kan je hier goed het verschil zien tussen "and" en "or".
Dan heb je als laatst de "not" operator. Hier worden de verwachtingen van de uitkomst van de booleaanse expressies omgekeerd. Waar true wordt verwacht, wordt nu false verwacht.
Schrijf een functie die kijkt of een waarde tussen de 3 en de 8 zit. Als de waarde hier tussen zit, meld dit dan door middel van een print.
Schrijf een functie die kijkt of een waarde lager is dan 20 of hoger is dan 100. Meld weer je bevinding van de waarde d.m.v. een print.
Stel je krijgt de keuze om naar Walibi of naar slagharen te gaan. Als je naar Walibi wilt, dan krijg je korting als je met 10 of meer mensen gaat. En als je naar slagharen gaat, dan krijg je al korting als tussen de 5 of de 10 mensen mee neemt. Schrijf een programma die vraag of de gebruiker naar Walibi of slagharen wilt. En vervolgens moet er gevraagd worden met hoeveel mensen de gebruiker erheen wilt. Geef dan aan of de gebruiker korting krijgt of niet bij een bepaalde hoeveelheid mensen.
Schrijf een programma dat een zin vraagt aan de gebruiker, en vervolgens kijkt of het woord “de” niet in de zin voorkomt. Meld dit dan vervolgens.
Vergelijking
Betekenis
not x == y
x is niet gelijk aan y
x > y
x is groter dan y
x < y
x is kleiner dan y
x >= y
x is groter dan of gelijk aan y
x <= y
x is kleiner dan of gelijk aan y
x == y
x is gelijk aan y
Booleaanse expressie
True / False
4 > 3
True
5 <= 2
False
2 != 3
True
2 <= 2
True
2 < 2
False
"Henk" == "Henk"
True
"henk" == "Henk"
False
De havo maakt de opdrachten in Python Kunst. Het vwo kiest een van de drie andere eindopdrachten.
Success
De eerste de 2 lessen volgens de planner en ga dan aan de slag met de eindopdracht.
Succes!
We hebben tot nu toe de hele tijd gewerkt met precies één turtle. Maar je kan met Python meerdere turtle's gebruiken in hetzelfde programma. Die turtle's moet je dan eerst maken en elk een andere naam geven. Iets moeilijker gezegd noemen we dat: meerdere instanties maken van een turtle. Dat doen we zo:
De naam harry hebben we even zelf bedacht. Nu kun je i.p.v. turtle.forward(100) harry.forward(100) zeggen. Maar het leuke is, dat we ook andere turtle's kunnen maken. Die moeten we dan wel een andere naam geven. Zie hieronder:
We hebben nu daisy in het leven geroepen. Nu kunnen ze de liefde aan elkaar verklaren door gezamenlijk een driehoek te tekenen ;)
Gebruik drie turtles om een landschap te tekenen. Ze hebben elk een andere kleur. De ene turtle is verantwoordelijk voor het tekenen van een huis. De andere voor het tekenen van de zon en weer de ander voor het tekenen van een poppetje.
Je kunt de turtle ook laten reageren op een muisklik of een toetsaanslag. Dit soort “gebeurtenissen” worden ook wel events genoemd. Hier een voorbeeld:
Wat gebeurt hier nou? Allereerst hebben we een functie gemaakt genaamd vooruit ()
Als deze functie wordt aangeroepen dan gaat de turtle 10 pixels vooruit. Maar wanneer wordt deze functie dan aangeroepen? Nu komt het nieuwe: met de regel turtle.onkey(vooruit, “Up”)
hebben we gezegd dat de functie vooruit wordt aangeroepen als je op de bijbehorende pijltjestoets drukt. Uiteindelijk moet je ook de functie listen
aanroepen. Deze functie zorgt ervoor dat je programma ‘luistert’ naar de toetsaanslagen die binnenkomen.
Je kunt op dezelfde manier ook meerdere events koppelen aan zelfgemaakte functies. Stel dat je het bovenstaande programma zou willen uitbreiden met een nieuwe functie waarmee de turtle achteruit gaat. Dit zou er dan als volgt uit kunnen zien:
Merk op dat we hier maar één keer de listen functie hoeven aan te roepen!
Breid het bovenstaande programma uit, zodat je met je pijltjestoetsen de turtle vrij kan laten bewegen. Met de linker en rechter pijltjestoets zou je de richting van de turtle kunnen aanpassen. Wat gebeurt er als je twee toetsen tegelijkertijd indrukt (om bijvoorbeeld schuin te bewegen)?
Eindopdracht voor de Havo
Je hebt geoefend met loops en functies. Nu is het tijd om aan een eindopdracht te werken!
De classroom voor de eindopdracht kun je hier vinden. De eindopdracht is ……. Laat je Turtle een mooie tekening maken. Je kunt denken aan:
een landschap;
een stukje van een stad
een beeld uit de ruimte of oceaan
Je opdracht moet minimaal voldoen aan de volgende eisen:
Je hebt minimaal zes verschillende objecten in je tekening. Voorbeelden van een object:
huis
zon
vogel
ruimteschip
vis
komeet
bloem
boom
etc
Voor elk object in je tekening maak je een functie. Dus bijvoorbeeld voor een gebouw, een ruimteschip, een komeet, een vis maak je allemaal functies
Elke functie heeft parameters. Bijvoorbeeld voor de kleur van het object, de grootte van het object en de positie (x en y)
Je plaatje moet er leuk uitzien, dus gebruik van kleuren is een vereiste.
Waar je loops kunt gebruiken, moet je die ook gebruiken. Dus geen onnodige code in je programma.
Extra punten:
Je zou de positie van sommige objecten random kunnen bepalen zodat je turtle elke keer een andere tekening maakt
Zorg ervoor dat minstens 1 object kan bewegen. Doe dit met event-handling. Zie Les 2 van Python Kunst.
Voor een idee zou je kunnen kijken naar de volgende plaatjes:
Eindopdracht voor de VWO
Het is de bedoeling dat je het spel Hangman, oftewel Galgje ontwikkelt. Iedereen heeft wel eens hangman gespeeld, maar toch even de essentie van het spel: De speler van het spel moet een woord raden. Dat doet hij/zij door iedere keer een letter te noemen die hopelijk voorkomt in het geheime woord. Het spel blijft de speler om een letter vragen totdat de speler weet wat het woord is. Een verloop van het programma zou er als volgt uit kunnen zien (we gaan ervan uit dat het geheime woord banaan is:
Zoals je hierboven ziet mag een speler steeds een letter raden van het geheime woord. Als de letter in het woord zit dan wordt dat aangegeven en anders wordt er stap voor stap een galgje opgebouwd. Als de speler weet om welk woord het gaat, dan kan hij/zij i.p.v. een letter het vraagteken invoeren. Dan mag je namelijk het woord raden. Als je na 5 mislukte pogingen nog steeds het woord niet weet, dan hang je. Dat ziet er als volgt uit: (het onderstaande is na 5 mislukte pogingen)
Je mag precies 1 karakter invoeren of een vraagteken. Als iemand 2 karakters invoert, dan moet het programma een foutmelding geven. Zie:
Kiest de speler een letter dat hij al eerder had gekozen, dan telt dat niet mee en dan krijg je een foutmelding. Zie:
Bij elke mislukte poging wordt het galgje steeds verder opgebouwd. Na 5 mislukte pogingen is het “Game over” en hang je helemaal. Ook wordt het geheime woord nog even getoond.
De letters die de speler goed heeft geraden geef je steeds weer. Dat hoeft niet in de juiste volgorde. Zie:
Als de speler alle letters al heeft geraden, dan krijgt hij de mogelijkheid om het hele woord te raden. Zie:
De speler mag aan het begin van het spel het geheime woord opgeven;
Het programma houdt bij na hoeveel keer het woord is geraden (of juist niet);
De speler mag geen getallen of andere tekens invoeren. Zo ja, dan krijg je een foutmelding;
Als de speler QQ intypt, dan eindigt het spel sowieso.
Voeg een puntentellingssysteem aan het spel. Hoe sneller je het woord raadt, hoe hoger je score! (TIP: gebruik hier import time voor). Voeg ook een highscorelist toe aan het spel.
Op het scherm verschijnen evenveel streepjes als dat er letters in het woord zijn. De gebruiker typt een letter. Als de letter voorkomt, verschijnt deze op de stippen waar het voorkomt;
Het programma moet het bestand <woordenlijst> in kunnen lezen om daar willekeurig een woord uit te kiezen. Dit ‘geheime’ woord moet dan worden geraden;
In het programma moet het mogelijk zijn om deze woordenlijst aan te passen; d.w.z.: je moet woorden kunnen toevoegen aan de woordenlijst;
Zet de woorden in een database zoals SQLite. Zie hiervoor: http://zetcode.com/db/sqlitepythontutorial/
Met python kun je ook een spel met een echte gebruikersinterface maken. Een GUI dus. Maak Hangman met een echte GUI. Zie hiervoor: http://www.techrepublic.com/article/a-quickstart-to-building-gui-based-applications-in-python/6310615
Vrije invulling. Bespreek je voorstel even met je docent.
In hoeverre zijn alle eisen in het spel aanwezig
Goed gebruik van loops
Goed gebruik van if-elif-else constructies
Goed gebruik van variabelen en variabelenamen
Goed gebruik van functies? Maak je zelf ook functies waardoor de code wat georganiseerder en overzichtelijker wordt? Hoe noem je die functies?
Zet je genoeg commentaar in je code, zodat de code overzichtelijk is voor anderen?
Begrijp je het ook? Ik kan je vragen uit te leggen hoe het precies werkt, en welk onderdeel van het programma welke gevolgen heeft.
Er wordt niet alleen gekeken of het werkt, maar ook hoe je hebt geprogrammeerd. Bondig programmeren, als iets in twee regels kan en je hebt het in tien regels gedaan dan werkt dat niet in je voordeel.
Hoe ziet het er uit?
Je kunt parameters ook gebruiken in berekeningen. In Python kun je de bewerkingen die je al kent ook doen:
Bewerking
in Python
plus of min
+ of -
keer
*
gedeeld door
/
tot de macht
^
Een voorbeeld is het tekenen van het volgende figuur:
We willen dat doen met twee functies:
We krijgen de lengte mee als parameter dus die kunnen we gebruiken door er bijvoorbeeld eerst 50 en dan 100 bij op te tellen:
Of we kunnen steeds vermenigvuldigen:
Het hangt er natuurlijk vanaf wat je wilt bereiken. Maar je kunt nu makkelijk dit maken:
Maak functie die het volgende figuur tekent:
Gebruik de functie die je net hebt gemaakt om het volgende de tekenen:
Rekenen is bijvoorbeeld handig als je de Turtle wilt laten draaien, maar je weet nog niet over hoeveel graden. Je kunt bijvoorbeeld een cirkel tekenen door het volgende te doen:
Een hele cirkel bevat 360 graden en als we die in tien stapjes tekenen, draaien we steeds 360/10 graden (36 graden). Maar als je dit uitvoert zie je dat de cirkel er niet heel netjes uit komt te zien. Om er achter te komen wat mooier is kunnen we de volgende methode gebruiken:
Je ziet in de code twee opvallende dingen:
We berekenen nu steeds de hoek door aantal_stukken
te gebruiken. De berekening 360.0/aantal_stukken
geeft precies de hoek die we steeds willen. Bij 10 stukken geeft dit 360.0/10=36 graden en bij 20 stukken 360.0/20=18 en zo voort.
We voeren de for-loop niet 10 keer uit maar aantal_stukken keer. Dus als bijvoorbeeld aantal_stukken 20 is, dan doen we de inhoud van de loop 20 keer.
Zorg dat er uiteindelijk dit plaatje uit komt:
Een sneeuwvlokje kun je maken door een paar parallellogrammen aan elkaar te plakken. Zie bijvoorbeeld:
In het eerste plaatje zijn er zes parallellogrammen naast elkaar getekend (de turtle draait na elke parallellogram een x aantal graden naar rechts en tekent vervolgens de volgende). Bij de sneeuwvlok zijn het ook allemaal parallellogrammen die naast elkaar zijn getekend (je hoeft niet te tellen hoeveel dat er zijn ;))
a] Maak een functie sneeuwvlok die het linker plaatje tekent. De functie sneeuwvlok
moet gebruik maken van de functie parallellogram die je van mij cadeau krijgt.
b] Breid de functie sneeuwvlok
uit door nog een parameter te gebruiken. Met deze tweede parameter kun je aangeven hoeveel parallellogrammen er in een sneeuwvlok moeten zitten. Dus als je sneeuwvlok (30, 6)
uitvoert, dan maakt de turtle het eerste plaatje. Maar als je sneeuwvlok (30, 50)
uitvoert, dan begint de turtle iets te maken wat op het tweede plaatje gaat lijken.
Het onderdeel Automaticas bestaat uit een 5-tal lessen.
De inlever opdrachten hoef je niet in te leveren, dit mag wel. Dit zijn overigens exact de type vragen die je kunt verwachten op het SE.
6 leerlingen krijgen een nummer Ga in duo’s in 1 van de vakjes staan Vergelijk elkaars nummer: - Indien kleiner dan ga je links naar het volgend vakje. - Indien groter dan ga je rechts naar het volgend vakje. Wacht op elkaar
Hieronder kan op papier:
Hoe kun je spelkaarten sorteren?
Schrijf de stappen in logische volgorde op papier.(5 min) In duo’s bespreek elkaars algoritme. (5 min) Elk duo kiest 1 algoritme en wisselt deze uit met een andere duo.(5 min) Controleer het algoritme: - Waren de stappen duidelijk? - Was de volgorde logisch? - Werkte het algoritme correct? - Was het algoritme compleet?
Algoritmes zijn alomtegenwoordig. Of je een zoekterm intypt op Google, belastingaangifte doet of een recept kookt – je krijgt ermee te maken. Daarom: een stoomcursus algoritmes. (Sanne Blauw)
Leestijd: 15m
De kenmerken van een algortime zijn:
Verzameling van stappen
Elke stap moet duidelijk zijn
Volgorde van stappen
Compleet
Hieronder een voorbeeld van een algoritme van het opladen van je laptop.
Let op: In bovenstaand figuur
Duidelijke Start/Stop
Variabelen
Keuzes [Yes/No]
Iteratie [Loops]
Maak van je favoriete gerecht of handelig in draw.io een algoritme.
Uitwerking Toren van Hanoi
Eindopdracht voor het VWO
Het is de bedoeling dat je het spel Wordmind maakt. Wordmind is een woordspelletje wat veel weg heeft van het welbekende spel Lingo. De essentie van het spel is als het volgt: De speler van het spel moet een woord raden. Afhankelijk van de invoer van de gebruiker geeft het programma aan in hoeverre het woord goed is geraden. Het spel blijft de speler vragen om het woord te raden totdat de speler het goede woord raadt of totdat de speler aangeeft dat hij wil stoppen met het spel. Een verloop van het programma zou er als volgt uit kunnen zien (we gaan ervan uit dat het geheime woord brommer is:
Het spel moet aan de volgende eisen voldoen:
Als je een woord raadt en een letter komt qua positie exact overeen met het geheime woord, dan laat je dat voor de volgende keer zien. Voorbeeld: (stel je voor dat het geheime woord henk is, en de speler raadt het volgende: kaak. Dan gebeurt het volgende:
Als de speler een woord raadt, en een letter komt wel voor in het woord, maar niet op de juiste plek. Dan moet deze letter aangegeven worden met een ?. Voorbeeld: (Dus stel je voor dat het geheime woord henk is, en de speler raadt nico. Dan gebeurt het volgende:
Als de speler het goede woord raadt, dan geeft het programma aan met hoeveel keer het goede woord is geraden. Zie ook het voorbeeld aan het begin van dit document.
Extra opdrachten voor leerlingen die extra uitdaging op prijs stellen:
Voeg een puntentellingssysteem aan het spel. Hoe sneller je het woord raadt, hoe hoger je score! (TIP: gebruik hier import time voor). Voeg ook een highscorelist toe aan het spel.
Op het scherm verschijnen evenveel streepjes als dat er letters in het woord zijn. De gebruiker typt een letter. Als de letter voorkomt, verschijnt deze op de stippen waar het voorkomt;
Het programma moet het bestand <woordenlijst> in kunnen lezen om daar willekeurig een woord uit te kiezen. Dit ‘geheime’ woord moet dan worden geraden;
In het programma moet het mogelijk zijn om deze woordenlijst aan te passen; d.w.z.: je moet woorden kunnen toevoegen aan de woordenlijst;
Vrije invulling. Bespreek je voorstel even met je docent.
In hoeverre zijn alle eisen in het spel aanwezig?
Goed gebruik van loops
Goed gebruik van if-elif-else constructies
Goed gebruik van variabelen en variabelenamen
Goed gebruik van functies? Maak je zelf ook functies waardoor de code wat georganiseerder en overzichtelijker wordt? Hoe noem je die functies?
Zet je genoeg commentaar in je code, zodat de code overzichtelijk is voor anderen?
Begrijp je het ook? Ik ga je vragen, voordat ik het cijfer geef, of je wilt uitleggen hoe het precies werkt, en welk onderdeel van het programma welke gevolgen heeft.
Er wordt niet alleen gekeken of het werkt, maar ook hoe je hebt geprogrammeerd. Bondig programmeren, als iets in twee regels kan en je hebt het in tien regels gedaan dan werkt dat niet in je voordeel.
Hoe ziet het er uit?
Eindopdracht voor het VWO
Het is de bedoeling dat je het spel “het langste woord” maakt. Als de speler het spel opstart, dan wordt hij/zij gevraagd naar zijn naam. Vervolgens wordt de speler welkom geheten. Het spel kan dan pas echt beginnen!
De speler krijgt zeven letters aangereikt. Drie daarvan zijn klinkers en vier daarvan zijn medeklinkers. De letters die de speler krijgt zijn willekeurig. De opdracht is nu om vijf keer een woord te maken van de letters die je hebt gekregen. Hoe langer het woord hoe meer punten je krijgt. Om preciezer te zijn: voor elke letter dat in het goede woord zit krijg je een punt. Je kunt via de functie bestaat_woord()
checken of een opgegeven woord bestaat in het woordenboek. Als een opgegeven woord niet in het woordenboek bestaat of andere letters bevat dan de letters die je hebt gekregen, dan gaan er - afhankelijk van het aantal letters in het verkeerde woord - punten vanaf. Je mag vijf keer een poging doen. Het totaal aantal punten dat je behaalt is afhankelijk van de vijf pogingen die je hebt gedaan. Nadat de vijf pogingen zijn gedaan krijgt de speler de mogelijkheid om het spel opnieuw te spelen. Als de speler dan wilt, dan begint het opnieuw (hij hoeft dan niet weer zijn naam op te geven), zodra de speler dat niet wilt, dan mag een ander het spel spelen. Het programma vraagt dan hoe de nieuwe speler heet. Het spelverloop zou er als volgt uit kunnen zien (de dikgedrukte woorden zijn de dingen die de speler heeft moeten intypen):
Je kunt het spel op verschillende niveau’s programmeren.
aan het begin van het spel mag de speler zijn naam invoeren en tijdens het spel wordt deze naam gebruikt
de speler krijgt zeven willekeurige letters waarvan drie klinkers
de speler mag vijf woorden invoeren
de hoogste score wordt bijgehouden (in een variabele)
de score van de speler wordt goed bijgehouden
de woorden die de speler invoert worden goed gecontroleerd
het aantal punten per woord wordt goed berekend
de speler kan het spel opnieuw starten
je kunt aan het begin van het spel kiezen uit verschillende woordenlijsten. Engels, Frans of Nederlands;
er wordt een highscore bijgehouden in een apart bestand/database
vrije invulling. Je mag het spel zo mooi maken als je wilt. Overleg wel even met mij (je docent)
In hoeverre zijn alle eisen in het spel aanwezig?
Goed gebruik van loops
Goed gebruik van if-elif-else constructies
Goed gebruik van variabelen en variabelenamen
Goed gebruik van functies? Maak je zelf ook functies waardoor de code wat georganiseerder en overzichtelijker wordt? Hoe noem je die functies?
Zet je genoeg commentaar in je code, zodat de code overzichtelijk is voor anderen?
Begrijp je het ook= Ik ga je vragen, voordat ik het cijfer geef, of je wilt uitleggen hoe het precies werkt, en welk onderdeel van het programma welke gevolgen heeft.
Er wordt niet alleen gekeken of het werkt, maar ook hoe je hebt geprogrammeerd. Bondig programmeren, als iets in twee regels kan en je hebt het in tien regels gedaan dan werkt dat niet in je voordeel.
Hoe ziet het er uit?
Zet de woorden in een database zoals SQLite. Zie hiervoor:
Met python kun je ook een spel met een echte gebruikersinterface maken. Een GUI dus. Maak Wordmind met een echte GUI. Zie hiervoor:
Voor deze opdracht krijg je wat begincode. Zie:
Hieronder zie de planner voor VWO 5, de tweede periode
Week #
Date
Subject
Work
48
23-11
Database
1: Inleiding
2: Selectie..
Eigen Omgeving opzetten T/m Selectie & Sorteren
49
30-11
2: Selectie
3: Functie
Geheel afmaken
Alle opdrachten
50
7-12
4: Groeperen
Alle opdrachten
51
14-12
5: Joins
Alle opdrachten
1
4-1
6: SubQueries
Alle opdrachten
2
11-1
7: Tabellen muteren
8: Gegeven toevoegen
Alle opdrachten
Alle opdrachten
3
18-1
9: Sleutel en Verwijzing
Eindopdracht
Alle opdrachten
Starten aan PET
4
25-1
Eindopdracht
Werken aan PET
5
1-2
Eindopdracht
Werken aan PET
6
8-2
Eindopdracht
Werken aan PET
DL: PET3
7
15-2
uitloop
Oefenen voor de toets
9
1-3
uitloop
oefenen voor de toets
SQL is een querytaal is een soort programmeertaaltje waarmee je vragen kan stellen aan de database. De afkorting SQL staat voor Structured Query Language. Wat kun je nou met SQL?
Zie de volgende opsomming:
Met SQL kun je gegevens opvragen van een database
Met SQL kun je gegevens toevoegen aan een database
Met SQL kun je gegevens wijzigen in een database
Met SQL kun je gegevens verwijderen uit een database
Met SQL kun je nieuwe databases aanmaken;
Met SQL kun je tabellen aanmaken en aan een database toevoegen;
en nog veel meer ..
Een voorbeeld van een eenvoudige query zou kunnen zijn: Geef mij een lijst van alle mannelijke leden die in team B zitten. De bijbehorende query zou er als volgt uit kunnen zien:
In deze cursus wordt de basis van de taal SQL stap voor stap uitgelegd. Je zult ook opdrachten moeten maken. Deze opdrachten kun je uitvoeren binnen repl.it.
Het is belangrijk dat je goed oefend met de opgaven, op de toets krijg je alleen maar van dit type vragen.
Hier de opdracht voor deze les. De docent zal de torens van Hanoi uitdelen.
We leven in een informatiemaatschappij. Dat betekent dat informatie een steeds belangrijkere rol neemt in de maatschappij. Het creëren, verspreiden en manipuleren van gegevens is een uiterst belangrijke hedendaagse activiteit. Informatie wordt gegenereerd door smartphones, computers, sensoren, de kassa van een supermarkt, de docent die jouw cijfers invoert en nog veel en veel meer. Met de komst van het Internet is de hoeveelheid gegevens grandioos gestegen. Kijk maar eens op de volgende site waar je wat live statistieken van het internet kan zien: http://www.internetlivestats.com
Mensen vragen zich wel eens af hoe groot het internet is. Via een snelle zoektocht op Google blijkt dat de vier grote bedrijven Microsoft, Google, Amazon en Facebook gezamenlijk ongeveer 1200 petabytes aan data bewaren. Dat alleen al is zo onvoorstelbaar veel. 1 petabyte is namelijk 13.3 jaar lang HD-TV video! Je kunt alle geschreven teksten in de menselijke geschiedenis opslaan in 20 petabytes! Zie ook het plaatje hieronder:
Maar hoe sla je die gegevens op? En hoe je zorg je ervoor dat je eenvoudig en doelgericht naar specifieke gegevens kan zoeken? Dit is een vaardigheid die met de dag belangrijker wordt.
Informatie kan digitaal opgeslagen worden op verschillende manieren. Een van die manieren is door gebruik te maken van een relationele database.
Een relationele database bestaat uit tabellen die onderling aan elkaar gerelateerd zijn. Hieronder vind je een diagram waarin drie tabellen zijn afgebeeld. Het gaat om LEDEN, TEAMS en WEDSTRIJDEN:
De tabel LEDEN bestaat uit zichzelf weer uit de kolommen lidnr, voornaam, tussenv, achternaam et cetera. De pijltjes die van de ene tabel naar de andere tabel wijzen, geven aan dat er een relatie is tussen de verschillende tabellen. Zo geeft het pijltje dat van aanvoerder naar lidnr wijst aan dat “een aanvoerder van een team, een bestaand lid moet zijn in de leden tabel”.
Het diagram wordt ook een strokendiagram genoemd. Het bevat nog meer informatie. De tabel bestaat uit een aantal regels. Je wilt in een tabel geen dubbele regels hebben. Bij de velden lidnr en teamnr staat een pijl. Die geven aan dat de regels uniek zijn om deze criteria. Zo zie je in de tabel ‘WEDSTRIJDEN’ dat de pijl over twee velden gaat ‘teamnr’ en ‘datum’; de combinatie van deze twee maakt een unieke regel.
De pijlen tussen de tabellen geeft ook informatie: Een team kan meerdere wedstrijden spelen, maar elke wedstrijd hoort maar bij één team. Zo zie je ook dat een team uit meerdere leden bestaat (logisch), maar dat een lid maar bij één team hoort. De aanvoerder van elk team is een lid, maar een lid kan meerdere keren aanvoerder (bij verschillende teams) zijn.
Dit houdt dan ook in dat een aanvoerder niet hoeft te spelen.
Sorteert een rij van elementen door herhaaldelijk door de rij te lopen, opeenvolgende elementen met elkaar te vergelijken, en deze van plek te verwisselen indien de volgorde incorrect is.
Als je een bepaalde actie herhaaldelijk moet laten uitvoeren wordt vaak gebruik gemaakt van loops (for loops of while loops). Een andere aanpak is Recursie.
Stel je ziet een reclame op TV. En in die reclame zie je iemand naar TV kijken. Op de TV in de reclamespot zie je weer iemand naar TV kijken. Het herhaaldelijk iemand naar een TV kijken wordt ook wel recursie genoemd. Een ander voorbeeld van recursie zie je ook bij de cacaobus van Droste, waarop een verpleegster te zien is, die op een dienblad een cacaobus heeft, waarop een verpleegster te zien is, die .... etc..Dit noemt men soms ook het Droste effect.
Divide and conquer algoritme Divide: Verdeel het probleem in subproblemen van hetzelfde type. Conquer: Los de subproblemen op bijv. met behulp van recursie. Combine: Combineer de antwoorden van de subproblemen.
Probeer deze sorteer algortimes op papier stap voor stap uit te schrijven. [kan een vraag op de toets zijn]
Als de beheerder van de database een lijst wil hebben van de woonplaatsen, dan zou je de volgende query kunnen opstellen:
Een probleem is echter wel, dat je sommige woonplaatsen meerdere keren in de lijst terugziet. Dat is eigenlijk overbodig, want de beheerder wil alleen weten uit welke steden zijn klanten komen. Om unieke rijen te krijgen kun je het beste gebruik maken van DISTINCT
. Hiermee verwijder je alle dubbele waarden uit het resultaat. De query ziet er als volgt uit:
2.2 Oefening: Geef een lijst van alle landen waar onze klanten vandaan komen
Stel dat de beheerder van de database een lijst wil hebben met voornaam, achternaam en woonplaats van de klanten die lid zijn van de bibliotheek. Dit kan in SQL vrij eenvoudig gerealiseerd worden met de volgende query. Probeer maar eens uit! Ga naar de database op repl.it. Voor het volgende commando uit binnen repl.it:
Krijg je iets wat hier op lijkt:
Dan gaat het goed!
Uitleg: Achter SELECT
staan de kolommen die getoond moeten worden. De kolomnamen worden gescheiden door komma’s. Achter FROM
staat de naam van de tabel (of tabellen) waaruit deze kolommen komen. Een SQL-vraag wordt altijd afgesloten met een puntkomma (;). Een SQL-vraag noem je een query.
Je zou er ook voor kunnen kiezen om alle kolommen uit de Customer tabel te willen zien. Dan kun je natuurlijk alle kolommen achter SELECT
zetten, maar het kan gelukkig veel korter met behulp van *. Zie:
2.1 Oefening: Selecteer de voornaam, achternaam en telefoon van alle Klanten.
Als je bepaalde rijen wilt selecteren die voldoen aan één of meerdere voorwaarden, dan gebruik je WHERE
.
In het volgende voorbeeld maken we een lijstje van de Klanten die in "Spanje" wonen.
De query wordt:
De basis syntax voor de query is:
In de voorwaarde zit altijd een operator, je kunt de volgende operatoren in SQL gebruiken:
2.4 Oefening
Welke klanten hebben de voornaam "Mark"? (geef de voornaam en de achternaam)
De queries die we tot nu toe hebben gemaakt leveren lijsten die niet gesorteerd zijn, terwijl dat best handig kan zijn. Willen we een lijst dat alfabetisch gesorteerd is op voornaam, achternaam, woonplaats of misschien wel een andere kolom, dan kan je het resultaat sorteren m.b.v. de clausule ORDER B
Y. Wanneer de beheerder vraagt om de telefoonlijst van alle klanten op achternaam te sorteren, dan kan dat bijvoorbeeld met de volgende query:
Wanneer je de lijst met telefoonnummers wilt sorteren op achternaam, kan het een probleem worden als sommige achternamen meerdere keren voorkomen. In dat geval kun je de tabel op twee kolommen sorteren:
In beide voorbeelden wordt de tabel oplopend gesorteerd: teksten volgens de ASCII-tabel,
getallen en datums van klein naar groot. Het is ook mogelijk om de volgorde om te keren: aflopend sorteren. De Engelse termen daarvoor zijn ‘ascending’ en ‘descending’ (ASC
en DESC
).
Wanneer je er niets bij zet, wordt automatisch oplopend gesorteerd. Om aflopend te sorteren moet je dat achter de kolom in ORDER BY
zetten.
2.3 Oefening
Maak een lijst van alle klanten (voornaam, achternaam en land) gesorteerd op land en binnen het land op achternaam.
Er is een mooie database die wij kunnen gebruiken voor om oefening mee te gaan maken. Ook wordt deze database gebruikt om de toets die jij gaat krijgen over dit onderwerp.
De betreffende database is te bekijken op .
Hieronder het datamodel van de database, deze ga je nog veel gebruiken. Je hoeft er nu nog niet echt naar te kijken.
Log in op repl.it met je eigen account.
3. Druk op de Fork knop 4. Druk op de Run knop
5. Voer het volgende sql commando even uit om de testen of het werk:
6. Als de output hierop - lijkt werkt het!
Test deze 2 commando's even die zijn super handig!
Dan krijg je de velden in de Tabel.
Dan krijg je een overzicht van alle tabellen die in de database zijn.
Als er aan meerdere voorwaarden moet worden voldaan kun je gebruik maken van AND en OR.
Als je bijvoorbeeld alle facturen wilt met een totaal bedrag tussen de 6 en 10 euro. Krijg je de volgende query:
Nog een voorbeeld:
Combineren van AND en OR kan natuurlijk ook:
Stel nu deze:
Wat betekent dit? Krijg ik dan:
Alle klanten die mark en Frank heten die in America wonen
Krijg ik alle klanten die mark heten en alle klanten die frank en in america wonen.
Dat 2de dus.
Als we dat niet willen moeten we even haakjes plaatsen. Dan krijg je dus dit:
2.5 Oefening
Geef alle klanten die uit amerika komen en wonen in de stad new york of mounten view
Dit is een database die veel wordt gebruikt voor cursusen. Ik heb voor ons deze database al even op gezet. Als je inlogd met je account kun je mijn versie dupliseren en zo heb je een 'eigen' versie van de database.
Ga naar de volgende repl.it:
Operator
Betekenis
=
is gelijk aan
<
is kleiner dan
>
is groter dan
<=
is kleiner of gelijk aan
>=
is groter of gelijk aan
<>
is niet gelijk aan
between
ligt tussen
in
is een van de volgende waarden
LIKE is een krachtige operator. Met LIKE kun je selecteren op gedeelten van de tekst.
Stel dat je een lijstje wilt van de klanten waarvan de naam met een D begint. Dat kan met de volgende query:
Je ziet dat er na LIKE staat: 'D%'
Het %
teken is een zogenaamde wildcard en staat voor een willekeurig aantal tekens.
Het betekent dus dat de naam met een D moet beginnen, en wat er achter staat doet er niet toe, dat mag alles zijn.
Als je alle namen en hun woonplaatsen wilt hebben van mensen die een dubbele l (ll) in hun naam hebben, dan gebruik je de volgende query:
In combinatie met LIKE
kun je nog een andere wildcard gebruiken, namelijk het teken _ , de underscore. Dat teken staat voor één willekeurig teken (en een procentteken (%) staat voor meerdere willekeurige tekens (dat kan ook één of nul zijn).
Stel dat we alle namen willen hebben van de klanten waarvan de naam uit vier letters bestaat. De query wordt dan:
We kunnen de beide wildcards ook combineren. Stel dat we de namen van de klanten willen hebben waarvan de voorlaatste letter een e is.
Die krijg je m.b.v. de volgende query:
2.6 Oefening
Geef de voornaam, achternaam van alle klanten waarvan de eerste letter van de voornaam met een a, e, i, o of u begint.
Met het commando IN kun je hetzelfde bereiken als met OR maar de query wordt dan korter.
Als je de klanten wilt selecteren die in France, Canada of Netherlands wonen, dan kun je als voorwaarde gebruiken:
Maar het kan ook met de volgende voorwaarde:
De volledige query wordt dan als volgt:
Met BETWEEN moet de kolomwaarde tussen twee waarden liggen.
Voorbeeld:
Als je wilt controleren m.b.v. SQL of een kolom is ingevuld dan gebruik je IS NULL
Je kunt bijvoorbeeld de volgende query uitproberen:
Het resultaat is een lijst van klanten waarvan geen telefoonnummer in de database is geregistreerd.
Je zou ook het omgekeerde kunnen bevragen: dus alle leerlingen die wel een telefoonnummer hebben. Dat kan zo:
2.7 Oefening
NOT
Met NOT kun je de klanten krijgen die niet aan een bepaalde voorwaarde voldoen.
Stel dat je alle klanten wilt hebben die niet in Canada wonen.
Dat kan m.b.v. de volgende query:
Je kunt hetzelfde lijstje krijgen m.b.v. deze query: