Zelftoets

Vragen over de eerste vier lessen samen. Elk antwoord staat eronder, ingeklapt. Maak eerst de vraag, klap dan pas open. Kom je er niet uit, zoek dan de sectie op in plaats van meteen te kijken. In de cel hieronder kan je alles uitproberen wat je bij een vraag nodig hebt.

  1. De functie hieronder zou de omtrek van een rechthoek moeten teruggeven, en doet dat niet. Wat loopt er mis, en wat gebeurt er bij omtrek(3, 4) + 1?

    De functie toont het juiste getal en geeft niets terug, dus levert ze None af. omtrek(3, 4) + 1 schrijft eerst 14 op het scherm en loopt daarna vast, want bij None valt niets op te tellen. Vervang print door return.

  2. Wat geven 7 / 2 en 7 // 2, en van welk type is elke uitkomst?

    3.5 en 3. De eerste deling levert altijd een float, ook wanneer de uitkomst rond is. De tweede gooit alles na de komma weg en levert een int.

  3. Schrijf volle_minuten(seconden), die teruggeeft hoeveel volle minuten er in een aantal seconden zitten, dus volle_minuten(200) levert 3.

    Met / zou je 3.3333333333333335 krijgen, en met return in plaats van print kan de aanroeper verder rekenen met het antwoord.

  4. De variabele punten bevat 17. Schrijf de regel die je haalde 17 punten op het scherm zet, waarbij het getal uit de variabele komt en niet in de zin zelf staat.

    Zonder str() loopt de regel vast met een TypeError, aangezien er links tekst staat en rechts een getal.

  5. Maak een trace table voor de code hieronder en geef het eindresultaat.

    Er verschijnt 8.

    iteratie i n
    voor de lus 1
    1 0 2
    2 1 4
    3 2 8

    Merk op dat i in het lichaam van de lus niet voorkomt. range(3) dient hier enkel om drie keer af te tellen.

  6. Maak ook voor deze code een trace table, en geef het eindresultaat.

    Er verschijnt 2.

    iteratie i teller
    voor de lus 0
    1 1 1
    2 2 2
    3 3 0
    4 4 1
    5 5 2

    Er komt vijf keer 1 bij, en toch staat er op het einde geen 5. De rest bij deling door \(3\) is nooit groter dan \(2\), dus valt teller na 2 terug op 0 en telt deze lus rond in een kringetje van drie.

  7. Schrijf som_kwadraten(n), die de som van de kwadraten van de getallen van \(1\) tot en met n teruggeeft. Voor n gelijk aan \(4\) is dat \(1 + 4 + 9 + 16\), dus \(30\).

    De beginwaarde is 0, want er is nog niets opgeteld. De bovengrens van range hoort er niet bij, vandaar n + 1.

  8. Schrijf drie functies die samen de wortels van een vierkantsvergelijking \(ax^2 + bx + c = 0\) berekenen: discriminant(a, b, c), wortel1(a, b, c) en wortel2(a, b, c). Ga ervan uit dat de discriminant strikt positief is. Twee waarden tegelijk teruggeven kan je nog niet, dus zijn het twee aparte functies voor de twee wortels. Een vierkantswortel schrijf je als ** 0.5.

    Controleer met \(x^2 - 5x + 6 = 0\), dat 3.0 en 2.0 moet opleveren.

    Let op de haakjes rond 2 * a.

  9. Je staat in je thuismap op de Linux virtuele machine. Schrijf voor elke stap het commando dat je typt.

    1. Maak een map toets.
    2. Ga erin.
    3. Schrijf met micro een bestand groet.py dat Hallo toont.
    4. Voer het uit.
    5. Hernoem het naar begroeting.py.
    6. Maak er een reservekopie begroeting.py.bak van.
    7. Gooi begroeting.py weg.
    8. Zet de reservekopie terug onder de oude naam.
    9. Voer ze een tweede keer uit.
    leerling@penguin:~$ mkdir toets
    leerling@penguin:~$ cd toets
    leerling@penguin:~/toets$ micro groet.py
    leerling@penguin:~/toets$ python3 groet.py
    Hallo
    leerling@penguin:~/toets$ mv groet.py begroeting.py
    leerling@penguin:~/toets$ cp begroeting.py begroeting.py.bak
    leerling@penguin:~/toets$ rm begroeting.py
    leerling@penguin:~/toets$ mv begroeting.py.bak begroeting.py
    leerling@penguin:~/toets$ python3 begroeting.py
    Hallo

    In micro typ je één regel, print("Hallo"), je bewaart met Ctrl-S en je sluit af met Ctrl-Q. Buiten die twee keer Hallo zegt geen enkel commando iets, en dat hoort zo.

    Het terugzetten kan ook met cp in plaats van mv. Het verschil is dat je de reservekopie dan overhoudt, terwijl mv ze opgebruikt.

  10. Je hebt begroeting.py en een oudere begroeting.py.bak naast elkaar staan. Je wil een verse reservekopie maken en typt mv begroeting.py begroeting.py.bak, met mv waar cp moest staan. Wat antwoordt de shell, en wat is de schade?

    De shell antwoordt niets. Je krijgt een nieuwe prompt, precies zoals bij een geslaagd commando, want dit is een geslaagd commando.

    Je bent twee dingen kwijt. De oude begroeting.py.bak is overschreven zonder enige waarschuwing, en begroeting.py bestaat niet meer, want mv verplaatst en kopieert niet. Waar twee bestanden stonden, staat er nu één. Er is geen Prullenbak om iets uit terug te halen.

    Dat is dezelfde les als bij 2 ^ 3 in 1.1: geen foutmelding betekent niet dat er staat wat je bedoelde. ls gebruiken voor je een naam hergebruikt, kost één commando.

  1. In vraag 6 kwam er telkens 1 bij, en teller doorliep netjes 0, 1 en 2. Hieronder komt er telkens i bij. Maak een trace table. Kan teller ooit 2 worden?

    Nee, nooit, hoe lang de lus ook loopt.

    i geeft zelf achtereenvolgens rest 1, 2 en 0 bij deling door \(3\), en dan begint het opnieuw. Sta je op 0, dan brengt de +1 je op 1, brengt de +2 je terug op 0, en laat de +0 je staan waar je staat. Daarna herhaalt hetzelfde rondje zich. teller zit dus vast in 1, 0, 0, 1, 0, 0 en raakt nooit op 2.