Opmerking bij de onderstaande oefeningen

Probeer bij het maken van de onderstaande oefeningen programma's te schrijven die generiek zijn. Dat wil zeggen, die niet alleen het juiste antwoord geven voor het bij de opgave gegeven voorbeeld, maar het juiste antwoord in alle mogelijke, op het voorbeeld gelijkende, gevallen.
Dus het is beter als je programma bij 1b werkt niet alleen voor de gegeven list A = [[1, 2, 3], [4, 5, 6], [], [7, 8], [9]], maar ook voor andere lists die er ongeveer hetzelfde uitzien.

Moeilijkheidsgraad

Omdat sommige van de onderstaande oefeningen wat lastiger zijn dan andere, is een indicatie van de moeilijkheidsgraad toegevoegd.

De volgende niveau's worden daarbij onderscheiden:

  • oefening van behandelde onderwerpen
  • verdieping van behandelde onderwerpen
  • uitdaging, stof tot nadenken

Oefening 1

Schrijf een programma om ...

a. de verwachtingswaarde van het totaal aantal ogen te bepalen als je gooit een 6-zijdige dobbelsteen.

b. de verwachtingswaarde van het totaal aantal ogen te bepalen als je gooit met drie 6-zijdige dobbelstenen.

c. de verwachtingswaarde van het totaal aantal ogen te bepalen als je gooit met vier dobbelstenen: een 5-zijdige, een 8-zijdige, een 10-zijdige en een 12-zijdige?

d. de verwachtingswaarde van het totaal aantal ogen te bepalen als je gooit met een opgegeven aantal dobbelstenen met een opgegeven aantal zijden.

dice = [5, 8, 10, 12]  # als oefening 1c. of:
dice = [6, 6, 8, 10, 12]

Oefening 2

Schrijf een programma dat ...

a. het aantal geneste lists van een list geeft.

A = [[1, 2, 3], [4, 5, 6], [], 7, 8, [9]]
# bepaal aantal geneste lists in A (=4)

b. het totaal aantal elementen van een list plus het aantal elementen van alle geneste lists in een list geeft.

A = [[1, 2, 3], [4, 5, 6], [], 7, 8, [9]]
# bepaal het totaal aantal elementen in A (incl. geneste lists) (=9)

c. de som van alle elementen in een list, inclusief de elementen in alle geneste lists.

A = [[1, 2, 3], [4, 5, 6], [], 7, 8, [9]]
# bepaal de som van alle elementen van in A geneste lists (=45)

Oefening 3

Schrijf een programma dat ...

a. een platte list maakt met alle elementen van een list, inclusief de elementen in geneste lists.

A = [[1, 2, 3], 4, 5, [6], [7, 8], 9]
# maak een 'platte' list met de elementen van A
# (= [1, 2, 3, 4, 5, 6, 7, 8, 9])

b. alle opeenvolgende duplicaten van elementen in een list verwijdert.

A = [1, 1, 1, 1, 2, 2, 3, 4, 4, 4, 1, 1]
# verwijder opeenvolgende duplicaten van elementen in A
# (= [1, 2, 3, 4, 1])

c. een run-length encoded versie van een list maakt. Daarbij maak je een nieuwe list, waarin alle opeenvolgende duplicaten van de elementen van de list zijn vervangen door een tuple met daarin het element en het aantal duplicaten.

A = [1, 1, 1, 1, 2, 2, 3, 4, 4, 4, 1, 1]
# maak een run-length encoded versie van A
# (= [(1, 4), (2, 2), (3, 1), (4, 3), (1, 2)])

d. een run-length encoded list (zie 2c.) uitpakt naar een platte list.

A = [(1, 4), (2, 2), (3, 1), (4, 3), (1, 2)]
# pak de run-length encoded list A uit
# (= [1, 1, 1, 1, 2, 2, 3, 4, 4, 4, 1, 1])

Oefening 4

Schrijf een programma dat ...

a. alle elementen in een list dupliceert in dezelfde list, dus zonder een nieuwe list te maken.

A = [1, 2, 3, 4]
# dupliceer de elementen in A (zonder een nieuwe list te maken)
# (A = [1, 1, 2, 2, 3, 3, 4, 4])

b. de elementen van een list een opgegeven aantal plaatsen naar links 'draait'. Elementen die er aan de linkerzijde af zouden vallen, komen rechts terug in de list.

A = list("abcdefgh")
positions = 3
# draai de list A over positions elementen naar links
# (= ["d", "e", "f", "g", "h", "a", "b", "c"])

Oefening 5

Schrijf een programma dat ...

a. een opgegeven aantal, toevallig gekozen elementen uit een list trekt (lotto).

A = [1, 3, 5, 7, 8, 9]
count = 3
# trek count toevallig gekozen elementen uit A
# (= [7, 3, 5] of [1, 8, 3] etc.)

Oefening 6

a. Schrijf een programma dat twee matrices bij elkaar optelt.

A = [[1, 2, 3], [4, 5, 6]]
B = [[9, 8, 7], [6, 5, 4]]
# bepaal C = A + B

b. Schrijf een programma dat twee matrices vermenigvuldigt.

A = [[1, 2, 3], [4, 5, 6]]
B = [[9, 8], [7, 6], [5, 4]]
# bepaal C = A x B

Oefening 7

Als we een matrix niet met een geneste list zouden modelleren, maar met een platte list, hoe zou je dan een element van de matrix kunnen aanwijzen?
De afmeting van de matrix is bekend.

Bijvoorbeeld: $$ A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix} $$ Hoe vind ik nu $A_{r,c}$ ?

In Python:

A = [1, 2, 3, 4, 5, 6, 7, 8, 9]
rows, cols = (3, 3)  # matrix dimensions
r, c = (1, 2)  # 0-based row and column index
# hoe vind ik het element op A(r, c)?

Oefening 8

In het 8-koniginnen-probleem probeer je zoveel mogelijk koniginnen op een schaakbord te plaatsen. De koniginnen mogen niet de mogelijkheid hebben elkaar te slaan.
Een konigin mag op het schaakbord zowel horizontaal, verticaal als diagonaal lopen.

Een voorbeeld van een geldige oplossing:

a. Op hoeveel mogelijke manieren kun je de 8 koniginnen op de vakjes van het schaakbord plaatsen als je geen rekening hoeft te houden met het slaan?

b. Schrijf een Python programma dat een geldige oplossing van het probleem zoekt en vindt.

Oefening 9

Schrijf een programma dat ...

a. de geneste lists in een list sorteert op lengte van de geneste list.

A = [
    ["a", "b", "c"], ["d", "e"],
    ["f", "g", "h"], ["d", "e"],
    ["i", "j", "k", "l"], ["m", "n"],
    ["o"]
]
# maak een nieuwe lijst, waarin de elementen van A
# gesorteerd zijn op lengte van de list
# (= [["o"], ["d", "e"], ["d", "e"], ["m", "n"],
#     ["a", "b", "c"], ["f", "g", "h"], ["i", "j", "k", "l"]])

In [ ]: