\(\newcommand{\footnotename}{footnote}\) \(\def \LWRfootnote {1}\) \(\newcommand {\footnote }[2][\LWRfootnote ]{{}^{\mathrm {#1}}}\) \(\newcommand {\footnotemark }[1][\LWRfootnote ]{{}^{\mathrm {#1}}}\) \(\let \LWRorighspace \hspace \) \(\renewcommand {\hspace }{\ifstar \LWRorighspace \LWRorighspace }\) \(\newcommand {\TextOrMath }[2]{#2}\) \(\newcommand {\mathnormal }[1]{{#1}}\) \(\newcommand \ensuremath [1]{#1}\) \(\newcommand {\LWRframebox }[2][]{\fbox {#2}} \newcommand {\framebox }[1][]{\LWRframebox } \) \(\newcommand {\setlength }[2]{}\) \(\newcommand {\addtolength }[2]{}\) \(\newcommand {\setcounter }[2]{}\) \(\newcommand {\addtocounter }[2]{}\) \(\newcommand {\arabic }[1]{}\) \(\newcommand {\number }[1]{}\) \(\newcommand {\noalign }[1]{\text {#1}\notag \\}\) \(\newcommand {\cline }[1]{}\) \(\newcommand {\directlua }[1]{\text {(directlua)}}\) \(\newcommand {\luatexdirectlua }[1]{\text {(directlua)}}\) \(\newcommand {\protect }{}\) \(\def \LWRabsorbnumber #1 {}\) \(\def \LWRabsorbquotenumber "#1 {}\) \(\newcommand {\LWRabsorboption }[1][]{}\) \(\newcommand {\LWRabsorbtwooptions }[1][]{\LWRabsorboption }\) \(\def \mathchar {\ifnextchar "\LWRabsorbquotenumber \LWRabsorbnumber }\) \(\def \mathcode #1={\mathchar }\) \(\let \delcode \mathcode \) \(\let \delimiter \mathchar \) \(\def \oe {\unicode {x0153}}\) \(\def \OE {\unicode {x0152}}\) \(\def \ae {\unicode {x00E6}}\) \(\def \AE {\unicode {x00C6}}\) \(\def \aa {\unicode {x00E5}}\) \(\def \AA {\unicode {x00C5}}\) \(\def \o {\unicode {x00F8}}\) \(\def \O {\unicode {x00D8}}\) \(\def \l {\unicode {x0142}}\) \(\def \L {\unicode {x0141}}\) \(\def \ss {\unicode {x00DF}}\) \(\def \SS {\unicode {x1E9E}}\) \(\def \dag {\unicode {x2020}}\) \(\def \ddag {\unicode {x2021}}\) \(\def \P {\unicode {x00B6}}\) \(\def \copyright {\unicode {x00A9}}\) \(\def \pounds {\unicode {x00A3}}\) \(\let \LWRref \ref \) \(\renewcommand {\ref }{\ifstar \LWRref \LWRref }\) \( \newcommand {\multicolumn }[3]{#3}\) \(\require {textcomp}\) \(\newcommand {\opl }[2][]{\bbox [whitesmoke, 3px, border: 1px dashed darkseagreen]{\class {opl-math opl-optie-#1}{#2}}}\) \(\newcommand {\hint }[1]{\class {hint}{#1}}\) \(\newcommand {\aside }[1]{\class {aside}{#1}}\) \(\newcommand {\vov }[1]{\aside {{\vphantom {#1}}^{\textstyle \lower {0.7ex}{\text {`}}}\mkern -1mu\mathopen {}#1\mathclose {}\mkern -1mu{\vphantom {#1}}^{\textstyle \lower {0.7ex}{\text {'}}}}}\) \(\newcommand {\truc }[1]{\class {truc}{#1}}\) \(\newcommand {\N }{\mathbb {N}}\) \(\newcommand {\Z }{\mathbb {Z}}\) \(\newcommand {\Q }{\mathbb {Q}}\) \(\newcommand {\R }{\mathbb {R}}\) \(\newcommand {\C }{\mathbb {C}}\) \(\newcommand {\E }{\mathrm {E}}\) \(\newcommand {\T }{\mathsf {T}}\) \(\newcommand {\dom }{\mathrm {dom}}\) \(\newcommand {\ber }{\mathrm {ber}}\) \(\newcommand {\degree }{^{\circ }}\) \(\newcommand {\Bgsin }{\operatorname {Bgsin}}\) \(\newcommand {\Bgcos }{\operatorname {Bgcos}}\) \(\newcommand {\Bgtan }{\operatorname {Bgtan}}\) \(\newcommand {\Bgcot }{\operatorname {Bgcot}}\) \(\newcommand {\bgsin }{\operatorname {bgsin}}\) \(\newcommand {\bgcos }{\operatorname {bgcos}}\) \(\newcommand {\bgtan }{\operatorname {bgtan}}\) \(\newcommand {\bgcot }{\operatorname {bgcot}}\) \(\newcommand {\qed }{\class {mathesis-qed}{\square }}\) \(\newcommand {\markeercellen }[4][.35]{}\) \(\newcommand {\celpijl }[3]{}\) \(\newcommand {\weq }{\ifnextchar [{\weqmet }{\weqzonder }}\) \(\def \weqmet [#1]{\ifnextchar [{\weqtwee {#1}}{\weqeen {#1}}}\) \(\def \weqtwee #1[#2]#3{\mathrel {\overset {#1}{\underset {#2}{#3}}}}\) \(\def \weqeen #1#2{\mathrel {\overset {#1}{#2}}}\) \(\def \weqzonder #1{\mathrel {#1}}\) \(\newcommand {\shortstack }[2][]{\substack {#2}}\) \(\newcommand {\scriptsize }{}\) \(\newcommand {\tiny }{}\) \(\newcommand {\tvmax }[1]{\begin {array}{c} \scriptstyle \text {max} \\[-0.8ex] \scriptstyle =#1 \end {array}}\) \(\newcommand {\tvmin }[1]{\begin {array}{c} \scriptstyle \text {min} \\[-0.8ex] \scriptstyle =#1 \end {array}}\) \(\newcommand {\markeerterm }[2]{#2}\) \(\newcommand {\lightning }{\unicode {x21AF}}\) \(\newcommand {\arceervak }{\enclose {updiagonalstrike}{\phantom {\rule {0em}{1.2ex}}}\kern -0.33em}\) \(\newcommand {\undefsign }{\class {undefsign}{\arceervak \arceervak \arceervak \arceervak \arceervak \arceervak \arceervak \arceervak \arceervak \arceervak \arceervak \arceervak \arceervak \arceervak \arceervak \arceervak }}\) \(\newcommand {\intertext }[1]{\text {#1}\notag \\}\) \(\let \Hat \hat \) \(\let \Check \check \) \(\let \Tilde \tilde \) \(\let \Acute \acute \) \(\let \Grave \grave \) \(\let \Dot \dot \) \(\let \Ddot \ddot \) \(\let \Breve \breve \) \(\let \Bar \bar \) \(\let \Vec \vec \) \(\require {mathtools}\) \(\newcommand {\vcentcolon }{\mathrel {\unicode {x2236}}}\) \(\newcommand {\approxcolon }{\approx \vcentcolon }\) \(\newcommand {\Approxcolon }{\approx \dblcolon }\) \(\newcommand {\simcolon }{\sim \vcentcolon }\) \(\newcommand {\Simcolon }{\sim \dblcolon }\) \(\newcommand {\dashcolon }{\mathrel {-}\vcentcolon }\) \(\newcommand {\Dashcolon }{\mathrel {-}\dblcolon }\) \(\newcommand {\colondash }{\vcentcolon \mathrel {-}}\) \(\newcommand {\Colondash }{\dblcolon \mathrel {-}}\) \(\newenvironment {crampedsubarray}[1]{}{}\) \(\newcommand {\smashoperator }[2][]{#2\limits }\) \(\newcommand {\SwapAboveDisplaySkip }{}\) \(\newcommand {\LaTeXunderbrace }[1]{\underbrace {#1}}\) \(\newcommand {\LaTeXoverbrace }[1]{\overbrace {#1}}\) \(\Newextarrow \xLongleftarrow {10,10}{0x21D0}\) \(\Newextarrow \xLongrightarrow {10,10}{0x21D2}\) \(\let \xlongleftarrow \xleftarrow \) \(\let \xlongrightarrow \xrightarrow \) \(\newcommand {\LWRmultlined }[1][]{\begin {multline*}}\) \(\newenvironment {multlined}[1][]{\LWRmultlined }{\end {multline*}}\) \(\let \LWRorigshoveleft \shoveleft \) \(\renewcommand {\shoveleft }[1][]{\LWRorigshoveleft }\) \(\let \LWRorigshoveright \shoveright \) \(\renewcommand {\shoveright }[1][]{\LWRorigshoveright }\) \(\newcommand {\shortintertext }[1]{\text {#1}\notag \\}\) \(\newcommand {\bm }[1]{\boldsymbol {#1}}\) \(\newcommand {\toprule }[1][]{\hline }\) \(\let \midrule \toprule \) \(\let \bottomrule \toprule \) \(\def \LWRbooktabscmidruleparen (#1)#2{}\) \(\newcommand {\LWRbooktabscmidrulenoparen }[1]{}\) \(\newcommand {\cmidrule }[1][]{\ifnextchar (\LWRbooktabscmidruleparen \LWRbooktabscmidrulenoparen }\) \(\newcommand {\morecmidrules }{}\) \(\newcommand {\specialrule }[3]{\hline }\) \(\newcommand {\addlinespace }[1][]{}\) \(\newcommand {\LWRnicearrayarray }[1]{\begin {array}{#1}}\) \(\def \LWRnicearrayarrayopt #1[#2] {\begin {array}{#1}}\) \(\newenvironment {NiceArray}[2][]{\ifnextchar [{\LWRnicearrayarrayopt {#2}}{\LWRnicearrayarray {#2}}}{\end {array}}\) \(\newcommand {\LWRnicearraywithdelimtwo }[2][]{\ifnextchar [{\LWRnicearrayarrayopt {#2}}{\LWRnicearrayarray {#2}}}\) \(\newenvironment {NiceArrayWithDelims}[2]{\def \LWRnicearrayrightdelim {\right #2}\left #1\LWRnicearraywithdelimtwo }{\end {array}\LWRnicearrayrightdelim }\) \(\newenvironment {pNiceArray} {\begin {NiceArrayWithDelims}{(}{)}} {\end {NiceArrayWithDelims}} \) \(\newenvironment {bNiceArray} {\begin {NiceArrayWithDelims}{[}{]}} {\end {NiceArrayWithDelims}} \) \(\newenvironment {BNiceArray} {\begin {NiceArrayWithDelims}{\{}{\}}} {\end {NiceArrayWithDelims}} \) \(\newenvironment {vNiceArray} {\begin {NiceArrayWithDelims}{\vert }{\vert }} {\end {NiceArrayWithDelims}} \) \(\newenvironment {VNiceArray} {\begin {NiceArrayWithDelims}{\Vert }{\Vert }} {\end {NiceArrayWithDelims}} \) \(\newenvironment {NiceMatrix}[1][]{\begin {matrix}}{\end {matrix}}\) \(\newenvironment {pNiceMatrix}[1][]{\begin {pmatrix}}{\end {pmatrix}}\) \(\newenvironment {bNiceMatrix}[1][]{\begin {bmatrix}}{\end {bmatrix}}\) \(\newenvironment {BNiceMatrix}[1][]{\begin {Bmatrix}}{\end {Bmatrix}}\) \(\newenvironment {vNiceMatrix}[1][]{\begin {vmatrix}}{\end {vmatrix}}\) \(\newenvironment {VNiceMatrix}[1][]{\begin {Vmatrix}}{\end {Vmatrix}}\) \(\newcommand {\LWRnicematrixBlock }[1]{#1}\) \(\def \LWRnicematrixBlockopt <#1>#2{#2}\) \(\newcommand {\Block }[2][]{\ifnextchar <\LWRnicematrixBlockopt \LWRnicematrixBlock }\) \(\newcommand {\diagbox }[2]{\begin {array}{l}\hfill \quad #2\\\hline #1\quad \hfill \end {array}}\) \(\let \hdottedline \hdashline \) \(\newcommand {\Hline }[1][]{\hline }\) \(\newcommand {\CodeBefore }{}\) \(\newcommand {\Body }{}\) \(\newcommand {\CodeAfter }{}\) \(\newcommand {\line }[3][]{}\) \(\newcommand {\RowStyle }[2][]{}\) \(\newcommand {\LWRSubMatrix }[1][]{}\) \(\newcommand {\SubMatrix }[4]{\LWRSubMatrix }\) \(\newcommand {\OverBrace }[4][]{}\) \(\newcommand {\UnderBrace }[4][]{}\) \(\newcommand {\HBrace }[3][]{}\) \(\newcommand {\VBrace }[3][]{}\) \(\newcommand {\ShowCellNames }{}\) \(\newcommand {\tabularnote }[2][]{}\) \(\newcommand {\cellcolor }[3][]{}\) \(\newcommand {\rowcolor }[3][]{}\) \(\newcommand {\LWRrowcolors }[1][]{}\) \(\newcommand {\rowcolors }[4][]{\LWRrowcolors }\) \(\newcommand {\rowlistcolors }[3][]{\LWRrowcolors }\) \(\newcommand {\columncolor }[3][]{}\) \(\newcommand {\rectanglecolor }[4][]{}\) \(\newcommand {\arraycolor }[2][]{}\) \(\newcommand {\chessboardcolors }[3][]{}\) \(\newcommand {\ldots }[1][]{\dots }\) \(\newcommand {\Cdots }[1][]{\cdots }\) \(\newcommand {\Vdots }[1][]{\vdots }\) \(\newcommand {\Ddots }[1][]{\ddots }\) \(\newcommand {\Iddots }[1][]{\mathinner {\unicode {x22F0}}}\) \(\newcommand {\Hdotsfor }[1]{\ldots }\) \(\newcommand {\Vdotsfor }[1]{\vdots }\) \(\newcommand {\AutoNiceMatrix }[2]{\text {(AutoNiceMatrix #1)}}\) \(\let \pAutoNiceMatrix \AutoNiceMatrix \) \(\let \bAutoNiceMatrix \AutoNiceMatrix \) \(\let \BAutoNiceMatrix \AutoNiceMatrix \) \(\let \vAutoNiceMatrix \AutoNiceMatrix \) \(\let \VAutoNiceMatrix \AutoNiceMatrix \) \(\require {cancel}\) \(\newcommand {\LWRsubmultirow }[2][]{#2}\) \(\newcommand {\LWRmultirow }[2][]{\LWRsubmultirow }\) \(\newcommand {\multirow }[2][]{\LWRmultirow }\) \(\newcommand {\mrowcell }{}\) \(\newcommand {\mcolrowcell }{}\) \(\newcommand {\STneed }[1]{}\) \(\newcommand {\LWRldelimtwo }[1][]{\text {#1}~\LWRbigdelim }\) \(\newcommand {\LWRldelimone }[2][]{\LWRldelimtwo }\) \(\def \ldelim #1#2{\def \LWRbigdelim {#1}\LWRldelimone }\) \(\newcommand {\LWRrdelimtwo }[1][]{\LWRbigdelim ~\text {#1}}\) \(\newcommand {\LWRrdelimone }[2][]{\LWRrdelimtwo }\) \(\def \rdelim #1#2{\def \LWRbigdelim {#1}\LWRrdelimone }\)

Herhaling Python met Colab

I Starten met Python en Colab

1 Herhaling
  • • Twee jaar geleden zag je een eerste inleiding tot Python.

  • • We frissen die basis terug op, in vijf stappen:

    • – expressies

    • – variabelen

    • – eenvoudige functies

    • – condities

    • – iteraties

  • • Tegelijk leer je werken met Google Colab, de omgeving waarin we dit jaar programmeren.

2 Wat is Colab?
  • • Google Colab is een notebook dat draait in je browser.

  • • Je moet niets installeren.

  • • Je code draait op een computer van Google, niet op je eigen toestel.

  • • Je notebooks worden bewaard in je Google Drive, in de map Colab Notebooks.

  • • Een notebook heeft de extensie .ipynb.

Doe nu:

  • 1. Surf naar https://colab.research.google.com.

  • 2. Meld je aan met je schoolaccount.

  • 3. Kies Bestand \(\rightarrow \) Nieuw notitieblok.

  • 4. Noem het notebook Herhaling.

3 Cellen uitvoeren
  • • Een notebook is een lijst van cellen: codecellen (Python) en tekstcellen (uitleg).

  • • Nieuwe cel maken met de knoppen + Code en + Tekst.

  • • Een codecel uitvoeren:

    • – Shift+Enter: uitvoeren en naar de volgende cel

    • – Ctrl+Enter: uitvoeren en in dezelfde cel blijven

  • • Links van de cel staat [ ]. Na het uitvoeren wordt dat [1], [2], …: het volgnummer van de uitvoering.

  • • Een draaiend rondje betekent: de cel is nog bezig.

Doe nu:

  • 1. Typ de regel hieronder in de eerste cel.

  • 2. Druk Shift+Enter.

  • 3. Kijk of links van de cel [1] verschijnt.

print("Hallo, ik ben er terug!")
4 AI uitschakelen
  • • AI is niet weg te denken uit de informatica: ze schrijft in enkele seconden code, legt foutmeldingen uit, zet je idee om in een eerste versie en helpt bij het opzoeken van functies.

  • • Later leren we die hulp bewust gebruiken. Wie het vak kent, wint er veel tijd mee.

  • • Maar niet nu. We leren hier programmeren, en dat leer je enkel door zelf te typen, zelf vast te lopen en zelf te herstellen.

  • • Laat je de AI het werk doen, dan lees je een correcte oplossing zonder er iets van te onthouden. Op de toets, en straks in je job, heb je die basis wel nodig.

  • • Bovendien: AI vergist zich, en enkel wie het zelf kan, ziet dat.

Doe nu:

  • 1. Kies Extra \(\rightarrow \) Instellingen \(\rightarrow \) AI-assistentie.

  • 2. Vink Generatieve AI-functies verbergen aan.

  • 3. Zet de AI-codeaanvullingen af.

Het Gemini-icoon verdwijnt uit je cellen.

II Expressies

1 Uitleg
  • • Een expressie is een berekening die één waarde oplevert.

  • • Types: int (geheel), float (kommagetal, met een punt), str (tekst tussen aanhalingstekens).

  • • Operatoren: + - * / // ** % (// gehele deling, % rest, ** macht).

  • • Haakjes eerst, dan machten, dan * en /, dan + en -.

  • • Tekst plakken met +, herhalen met *; omzetten met int(), float() en str().

print(15 / 4)
print(15 // 4, 15 % 4)
print("ha " * 3)
print("Ik heb " + str(3) + " appels")
2 De laatste regel wordt vanzelf getoond
  • • In een codecel toont Colab automatisch de waarde van de laatste expressie, ook zonder print().

  • • Wil je meerdere resultaten zien, dan heb je wél print() nodig.

Toont enkel 9:

2 + 3
4 + 5

Toont 5 en 9:

print(2 + 3)
print(4 + 5)
  • • In een .py-bestand is er geen automatische uitvoer: daar is print() altijd nodig. Wen er dus aan.

3 Oefeningen

Opgave. Een pizza kost \(12.50\) euro. Bereken wat \(7\) pizza’s kosten met \(10\%\) korting, en toon het bedrag afgerond op \(2\) cijfers na de komma. Gebruik één enkele expressie.

Welke uitkomst verwacht je?

Bereken eerst de prijs zonder korting. Met \(10\%\) korting betaal je nog \(90\%\).

round(12.50 * ... * (1 - ...), 2)

III Variabelen

1 Uitleg
  • • In round(12.50 * 7 * (1 - 0.10), 2) zie je niet meer wat elk getal betekent, en bij \(9\) pizza’s moet je zoeken welk getal je moet aanpassen.

  • • Geef de getallen dus een naam, en reken daarna met die namen.

prijs = 12.50
aantal = 7
korting = 0.10
totaal = prijs * aantal * (1 - korting)
print("Totaal:", round(totaal, 2), "euro")
  • • Zelfde berekening, zelfde resultaat, maar nu leesbaar: je verandert aantal op één plaats en de rest volgt.

  • • Zo’n naam voor een waarde heet een variabele.

2 Waarden bewaren
  • • Een variabele is een naam voor een waarde die je bewaart.

  • • Toewijzen met =: links de naam, rechts de waarde.

  • • Namen: letters, cijfers en underscores, niet beginnen met een cijfer, geen Python-woorden.

  • • Een variabele mag van waarde en van type veranderen.

  • • Verkorte operatoren: +=, -=, *=, /=.

  • • rekening += 3.50 is hetzelfde als rekening = rekening + 3.50: je past een bestaande waarde aan.

  • • Commentaar met #: wordt niet uitgevoerd.

rekening = 0                # een int
rekening += 12.50 * 2       # twee pizza's erbij
rekening += 3.50            # een drankje erbij
rekening -= 5               # waardebon eraf
print(rekening, type(rekening))
3 De runtime onthoudt je variabelen
  • • Alle cellen delen hetzelfde geheugen, de runtime.

  • • Een variabele uit cel 1 bestaat dus nog in cel 5.

  • • Wat telt is de volgorde waarin je uitvoert, niet de volgorde op het scherm. Dat is een klassieke valkuil.

# cel 1
x = 5
print(x)
# cel 2
x += 1
print(x)   # 6, maar enkel als cel 1 al uitgevoerd is
  • • Runtime \(\rightarrow \) Runtime herstarten: alle variabelen zijn weg. Met Reset zet je ook de oorspronkelijke code van een cel terug.

  • • Runtime \(\rightarrow \) Alles uitvoeren: alles opnieuw, netjes van boven naar onder. Doe dit voor je je werk indient.

4 Oefeningen

Oefening 2

Opgave. Je hebt x = 3 en y = 8. Wissel de waarden om, zodat x gelijk is aan \(8\) en y aan \(3\). Je mag de getallen niet opnieuw intypen.

Wat gebeurt er als je enkel x = y en daarna y = x schrijft?

Bewaar de oorspronkelijke waarde van x voordat je x een nieuwe waarde geeft.

x = 3
y = 8
# wissel hier de waarden om
...
print(x, y)   # moet 8 3 tonen

Je kunt de drie regels met de hulpvariabele ook vervangen door één gelijktijdige toewijzing: x, y = y, x.

IV Eenvoudige functies

1 Uitleg
  • • Een functie is een zwarte doos: je geeft er parameters in en krijgt een retourwaarde terug.

  • • Schrijfwijze: naam(parameter1, parameter2), altijd met haakjes.

  • • De volgorde van de parameters is belangrijk.

  • • Enkele functies die je al kent: print(), input(), len(), round(), abs(), max(), min(), int(), float(), str().

  • • Let op: input() geeft altijd een string terug. Reken je ermee, zet dan om met int() of float().

naam = input("Je naam: ")
print("Hallo", naam, ", je naam heeft", len(naam), "tekens")
leeftijd = int(input("Je leeftijd: "))
print("Volgend jaar:", leeftijd + 1)
2 Hulp bij functies
  • • Typ de eerste letters en druk Tab: Colab vult de naam aan en toont de mogelijkheden.

  • • Zet de cursor in een functienaam en druk Shift+Tab: je ziet welke parameters de functie verwacht.

  • • Of vraag het expliciet met help().

help(round)
# round(number, ndigits=None)
#   Round a number to a given precision in decimal digits.
  • • Zo zie je meteen dat round(3.14159, 2) kan, en wat het tweede getal betekent.

  • • Dit is de gewone aanvulling uit de documentatie, geen AI: ze verzint niets, ze toont wat er echt bestaat.

3 Oefeningen

Oefening 3

Opgave. Vraag de gebruiker twee kommagetallen en toon het grootste van de twee, afgerond op \(1\) cijfer na de komma.

Welke functie geeft het grootste van twee getallen terug?

a = float(input("Eerste getal: "))
b = ...
grootste = ...
print("Het grootste is", round(..., 1))

V Condities

1 Uitleg
  • • Een booleaanse expressie is waar (True) of vals (False).

  • • Vergelijken met <, <=, ==, >=, >, !=. Let op: == vergelijkt, = wijst toe.

  • • Combineren met and, or, not.

  • • Kiezen met if …elif …else: de dubbele punt en het inspringen horen erbij.

temp = 12
if temp < 0:
    print("Vriezen")
elif temp < 15:
    print("Fris")
else:
    print("Aangenaam")
2 Invoer en foutmeldingen
  • • Bij input() verschijnt een invoervakje onder de cel. Typ je antwoord en druk Enter.

  • • Zolang je niets typt blijft de cel wachten; je ziet het rondje draaien.

  • • Loopt er iets mis, dan toont Colab een traceback in het rood. Lees altijd de laatste regel: daar staat wat er fout is.

getal = int(input("Getal: "))   # je typt: drie
# ValueError: invalid literal for int()
#             with base 10: 'drie'
  • • De regel met het pijltje toont waar het misging.

  • • Twijfel je over een waarde? Zet er een print() bij.

3 Oefeningen

Oefening 4

Opgave. Vraag een punt op \(20\). Toon niet geslaagd onder \(10\), geslaagd vanaf \(10\), en geslaagd met onderscheiding vanaf \(14\).

Welke boodschap verwacht je bij \(9\), \(10\), \(13\) en \(14\) punten?

Probeer ook de grenswaarden \(10\) en \(14\). Welke voorwaarde controleer je eerst?

punt = int(input("Punt op 20: "))
if ...:
    print(...)
elif ...:
    print(...)
else:
    print(...)

VI Iteraties

1 Uitleg
  • • Een lus herhaalt een stuk code.

  • • for: je weet op voorhand hoeveel keer, of je overloopt een collectie.

  • • while: herhalen zolang een conditie waar is. Vergeet de update niet, anders stopt de lus nooit.

  • • range(start, stop, stap) stopt vlak voor stop.

for i in range(1, 4):
    print(i)
i = 1
while i < 4:
    print(i)
    i += 1
2 Een lus onderbreken
  • • Een while zonder update blijft eeuwig draaien: het volgnummer blijft leeg en het rondje blijft draaien.

  • • Klik dan op de stopknop van de cel, of Runtime \(\rightarrow \) Uitvoering onderbreken.

  • • Je krijgt een KeyboardInterrupt: dat is geen fout in je code, dat is jij die stopt.

i = 1
while i < 10:
  print(i)
  • • Tip: schrijf bij een while i < …: meteen de regel i += 1, en vul pas daarna de rest van de lus in.

  • • Helpt niets meer? Runtime \(\rightarrow \) Runtime herstarten.

3 Oefeningen

Oefening 5

Opgave. Toon de tafel van \(7\), van \(7 \times 1\) tot en met \(7 \times 10\), in de vorm 7 x 3 = 21.

Welk eindgetal geef je aan range() zodat \(10\) nog meegeteld wordt?

for i in range(...):
    print(7, "x", i, "=", ...)

Oefening 6

Opgave. Vraag getallen aan de gebruiker tot die 0 intypt. Toon daarna de som van alle ingegeven getallen.

Welke voorwaarde moet waar zijn om de lus te blijven herhalen?

totaal = 0
getal = int(input("Getal (0 = stoppen): "))
while ...:
    totaal ...
    getal = ...
print("Som:", totaal)

Oefening 7

Opgave. De computer denkt aan het getal \(7\). Laat de gebruiker raden tot het juist is, zeg telkens te hoog of te laag, en toon op het einde het aantal pogingen.

Herhaal zolang de gok verschillend is van het geheime getal.

geheim = 7
pogingen = 1
gok = int(input("Raad: "))
while ...:
    if ...:
        print("Te hoog")
    else:
        print("Te laag")
    gok = ...
    pogingen ...
print("Juist na", pogingen)

VII Bewaren en indienen

1 Uitleg
  • • Colab bewaart automatisch in je Drive, maar sla zelf op met Ctrl+S (Bestand \(\rightarrow \) Opslaan).

  • • Klik bovenaan op de naam om je notebook te hernoemen, bijvoorbeeld Herhaling_Mijn_Naam.

  • • Voeg met + Tekst een tekstcel toe boven elke oefening, met de vraag erin. Zo blijft je notebook leesbaar.

  • • Indienen:

    • – eerst Runtime \(\rightarrow \) Alles uitvoeren (zo staat alle uitvoer erin),

    • – dan Delen en de link doorsturen, of Bestand \(\rightarrow \) Downloaden \(\rightarrow \) .ipynb.

2 Samenwerken
  • • Colab is een Google-product, net als Documenten en Spreadsheets: het delen werkt er op dezelfde manier.

  • • Knop Delen rechtsboven: voeg mensen toe met hun schooladres of maak een link, en kies hun recht: Kijker, Reageerder of Bewerker.

  • • Je kan met meerdere tegelijk in hetzelfde notebook werken: je ziet elkaars cursor en de aanpassingen komen er meteen bij.

  • • Vraag stellen bij een cel: een reactie (Ctrl+Alt+M). Iets stukgemaakt: Bestand \(\rightarrow \) Revisiegeschiedenis.

  • • Let op: de code wordt gedeeld, de runtime niet. Ieder voert uit op zijn eigen machine, dus jouw variabelen bestaan niet bij de anderen. En typ nooit met twee tegelijk in dezelfde cel.

Doe nu:

  • 1. Maak groepjes van drie.

  • 2. Één van jullie maakt een notebook Samen.

  • 3. Deel dat notebook met de twee anderen als Bewerker.

  • 4. Verdeel een aantal onderstaande oefening: ieder lost er één op in een eigen cel.

  • 5. Zet boven je eigen cel een tekstcel met je naam.

Oefeningen

Oefening 8

Bereken in één enkele expressie het gemiddelde van \(12\), \(15\) en \(18\), afgerond op \(1\) cijfer na de komma.

Oefening 9

Je spaarpot bevat \(25\) euro. Leg er tweemaal \(5\) euro bij, haal er daarna \(12.50\) euro uit en toon wat er overblijft. Gebruik de verkorte operatoren.

Oefening 10

Vraag de gebruiker twee gehele getallen en toon het verschil tussen de twee, altijd als een positief getal.

Oefening 11

Vraag een geheel getal en toon of het even of oneven is.

Oefening 12

Tel af van \(10\) tot en met \(1\), elk getal op een eigen regel, en toon daarna Start!.

VIII Samenvatting

  • • Expressies: types int, float, str; operatoren en haakjes; omzetten met int(), str().

  • • Variabelen: toewijzen met =, hergebruiken, +=, commentaar met #.

  • • Functies: print(), input(), len(), round(), max(); input() geeft een string.

  • • Condities: vergelijken, and/or/not, if/elif/else met inspringen.

  • • Iteraties: for met range(), while met een update.

  • • Colab: cellen uitvoeren, gedeelde runtime, AI uit, hulp met Tab en help(), tracebacks lezen, onderbreken, opslaan, delen en samenwerken.