Voorbereiden toets deel 1: Python

Op de toets krijg je drie Python-vragen. Het niveau hiervan zal één vraag van niveau 1.1 à 1.2 zijn, één vraag van niveau 1.3 à 1.4 en één vraag van niveau 1.5 tot 1.6. Zeker voor de moeilijkere vragen zul je echt moeten oefenen met het op papier opschrijven. Let er daarbij op dat je ook de witruimte (bij het inspringen van for-loops en if-loops) duidelijk doet.

Hieronder staat een overzicht van de functies die je in Python geleerd hebt. Zorg dat je deze functies kent en kunt toepassen.

a+b            a plus b
a-b            a min b
a*b            a keer b
a**b           a tot de macht b
a/b            a gedeeld door b
a//b           a gedeeld door b naar beneden afgerond op gehelen
a%b            a modulo b (de rest bij deling van a door b)
a,b = b, a     Verwisseld a en b
a^b            a XOR b

a == b         Dit test of a en b dezelfde waarde hebben.
a > b          Dit test of a een grotere waarde dan b heeft.
a >= b         Dit test of a groter of gelijk is aan b.
a < b          Dit test of a kleiner dan b is.
a <= b         Dit test of a kleiner of gelijk aan b is.
a != b         Dit test of a ongelijk aan b is.
A or B         Uitkomst is waar als A en/of B waar is.
A and B        Uitkomst is waar als zowel A als B waar is.

print(a)       Dit print a op het scherm van de gebruiker.
print(a,b)     Print a en b met een spatie ertussen.
input()        Dit leest een input in.
range(a,b,c)   Dit maakt een lijst van a tot b met steeds c verschil.
range(a,b)     Dit maakt een lijst van alle getallen vanaf a tot b.
range(b)       Dit maakt een lijst van alle getallen vanaf 0 tot b.
int()          Dit maakt van een waarde een geheel getal.
float()        Dit maakt van een waarde een kommagetal.
str()          Dit maakt van een waarde een stukje tekst.
for a in b:    Dit herhaalt de ingesprongen regels voor iedere waarde a uit de lijst b.
break          Dit zorgt dat de loop eindigt.
while a:       Dit herhaalt de ingesprongen regels zolang a waar is
if a:          Als a True is, worden de ingesprongen regels uitgevoerd. 
else:          Als de if False is, worden de ingesprongen regels uitgevoerd.
elif a:        Een else- en if-statement ineen
or and         Je kunt de logische operatoren "or" en "and" ook gebruiken in een loop.

.split()       Splitst een regel in een lijst.
input().split() Splitst de input in een lijst
a[3]           Geeft waarde die op plek 3 van de lijst a staat.    
len(a)         Geeft het aantal elementen in lijst a.

def ja(a):     Start van de functie met de naam ja met inputvariabele a.
return True:   Als het programma op deze regel komt, eindigt de functie. De regel waar de functie aangeroepen werd, krijgt als waarde "True" terug
ord("A")       Geeft de ASCII-waarde van het symbool A.
chr(65)        Geeft het symbool met ASCII-waarde 65.
pow(3,7,13)    Berekent 3^7 modulo 13

Mijn advies is verder om in jouw Python-programma niet te veel op één regel te willen doen. Op papier geldt nog meer als op de computer dat het beter is om meer regels te gebruiken als dat voor jezelf en/of de lezer meer overzicht geeft.

Een laatste advies is om altijd te beginnen met de problemen. Zelfs als je geen idee hebt, krijg je het eerste punt bij een vraag voor het inlezen van de input-variableen in het juiste type (integer, float of string) en dat kun je ook als je nog niet precies weet hoe je de opgave moet oplossen.

We gaan dit oefenen door de les te starten met 5 problemen van niveau 1.1 t/m 1.5 die je op papier gaat programmeren. Over 30 minuten bespreken we de oplossingen.

Opdracht 1: (niveau 1.1)
Schrijf een programma op papier dat drie getallen na elkaar inleest. De output moet het derde getal min de som van de twee andere getallen zijn.
Voorbeeld input:
17
39
100
Voorbeeld output:
44

Je kunt je antwoord controleren door hem over te typen bij de opdracht A leid i bio op Kattis.

Uitwerking:

Je begint met het inlezen van de drie getallen:

a = int(input())
b = int(input())
c = int(input())

Nadat je de getallen ingelezen hebt, doe je het sommetje c-a-b en print dat op het scherm.

print(c-a-b)

Opdracht 2: (niveau 1.2)
Schrijf een programma dat één getal van 1 t/m 12 inleest. Dit staat voor de hoeveelste maand van 2025 het is. Geef als output het aantal dagen dat deze maand duurt.
Voorbeeld input:
2
Voorbeeld output:
28
Hint: April, Juni, September en November hebben 30 dagen.

Je kunt je antwoord controleren door hem over te typen bij de opdracht Dagatal op Kattis.

Uitwerking:

Allereerst moet je natuurlijk het maandnummer inladen.:

maand = int(input())

Vervolgens controleer je eerst of dit de maand februari is (en het antwoord dus 28 is). Als dat niet zo is, controleer je of het een maand met 30 dagen is en als dat ook niet zo is, moet het wel een maand van 31 dagen zijn.

if maand == 2:
    print(28)
elif maand == 4 or maand == 6 or maand == 9 or maand == 11:
    print(30)
else:
    print(31)

Opdracht 3: (niveau 1.3)
Op regel één van het programma staat hoeveel regels met getallen er volgen. Ieder van de volgende getallen staat voor de moeilijkheid van de problemen. Geef als output hoeveel van deze problemen een oneven getal als moeilijkheid hebben.
Voorbeeld input:
3
2
1
5
Voorbeeld output:
2

Je kunt je antwoord controleren door hem over te typen bij de opdracht Call for problems op Kattis.

Uitwerking:

Als eerste zet je de input van de eerste regel in de variabele aantal (die noem ik zo, omdat hierin het aantal opdrachten staat). Vervolgens maak je een variabele aan waarin je gaat tellen hoeveel opdrachten er met een oneven moeilijkheidsgraad zijn. In het begin heb je er nog nul geteld en daarom zet je het getal 0 in deze variabele.

aantal = int(input())
antwoord = 0

Vervolgens laad je de moeilijkheid van ieder probleem in en controleer je steeds of dit aantal oneven is. Voor ieder probleem dat een oneven moeilijkheid heeft, verhoog je het antwoord met één.

for i in range(aantal):
    moeilijkheid = int(input())
    if moeilijkheid % 2 == 1:
        antwoord += 1

Tot slot print je het antwoord.

print(antwoord)

Opdracht 4: (niveau 1.4)
Op regel één van het programma staat hoeveel regels met getallen er volgen. Alle volgende getallen waren oorspronkelijk machten met een ééncijferige exponent waarbij de exponent naar beneden is gevallen. Zo staat 235 voor de som 23^5. De vraag is om de som van de oorspronkelijke machten te geven als output. Het antwoord van de voorbeeldinput is dus 2^3+1^7+4^3+5^2+2^2=102.
Voorbeeld input:
5
23
17
43
52
22
Voorbeeld output:
102

Je kunt je antwoord controleren door hem over te typen bij de opdracht Pot op Kattis.

Uitwerking:

Je kunt op dezelfde manier beginnen als bij het vorige probleem.

aantal = int(input())
antwoord = 0

Nu willen we steeds (dus een for-loop) een getal inlezen. Hiervan is het laatste cijfer de exponent. Deze krijgen we door het getal modulo 10 te doen. Het stuk voor het laatste cijfer is het grondtal. Die krijgen we door het getal te delen door 10 en naar beneden af te ronden. Dat doet de operator //. Vervolgens tellen we \text{grondtal}^{\text{exponent}} op bij ons antwoord.

for i in range(aantal):
    getal = int(input())
    exponent = getal % 10
    grondtal = getal // 10
    antwoord += grondtal ** exponent

Tot slot hoeven we alleen nog het antwoord te printen.

print(antwoord)

Opdracht 5: (niveau 1.5)
Op regel één van het programma staan twee getallen gescheiden door een spatie. Deze getallen staan voor het aantal zijden van de twee dobbelstenen die je hebt. Je gooit met beide dobbelstenen en telt de uitkomsten op. Als output geef je het getal wat de grootste kans heeft om de som van de twee dobbelstenen te zijn. Als dit er meerdere zijn, print je deze één voor één van klein naar groot op verschillende regels.
Voorbeeld input:
6 4
Voorbeeld output:
5
6
7

Je kunt je antwoord controleren door hem over te typen bij de opdracht Dice Cup op Kattis.

Uitwerking:

Met 6 en 4 zien alle combinaties die we kunnen gooien er als volgt uit:

We zien dat 5 t/m 7 op iedere rij voorkomt. Vijf is de eerste, omdat je minstens één groter moet zijn dan het aantal ogen (4) op de viervlakkige dobbelsteen om in de laatste rij voor te komen. Zeven is de laatste omdat je maximaal 1 groter dan het aantal ogen (6) op de zesvlakkige dobbelsteen mag zijn om in de eerste rij voor te komen.

In het algemeen moeten we dus alle getallen printen van het kleinste aantal ogen plus één tot het grootste aantal ogen plus één. Dat is wat de volgende code doet:

getallen = input().split()
a = int(getallen[0])
b = int(getallen[1])
if a < b:
    a,b = b,a
for c in range(b+1,a+2):
    print(c)