Sequenties en data

Deze pagina bevat uitvoerbare code.

In deze Jupyter Notebook ga je het volgende oefenen:

  • Splitsen en gebruiken van Python data

Waar je werkt

Je werkt bij dit vak op je eigen machine, in VS Code. Dat is niet alleen praktisch: als ICT’er ga je met een echte ontwikkelomgeving werken, en hoe eerder je daar thuis raakt, hoe minder die omgeving je later in de weg zit. In Python installeren staat hoe je dat opzet; het practicum Rochambeau heeft daar een checklist voor.

De code op deze pagina kun je overnemen in een bestand en daar uitvoeren. Wil je iets snel proberen zonder een bestand aan te maken, open dan een terminal in VS Code en start python zonder argumenten; je krijgt dan een prompt waarin je regel voor regel kunt typen.

Notitie

Klik bovenaan op Activeren en je kunt de code hieronder rechtstreeks uitvoeren, zonder iets te installeren. Handig om snel iets te proberen.

# Voer deze cel uit
6 * 7
# Voer deze cel uit
_ * 2  # In notebooks verwijst '_' naar de output van de vorige cel
# Voer deze cel uit
'6 * 76 * 7'

Geweldig! Je kunt de output van vorige cellen gebruiken in nieuwe berekeningen. De Python eval functie voert strings uit alsof het Python commando’s zijn. Probeer eval('6 * 76 * 7') eens in een nieuwe cel!

Bewerkingen met Python

Probeer de volgende bewerkingen in aparte cellen:

# Voer deze cel uit
40 + 2
# Voer deze cel uit
40 ** 2
# Voer deze cel uit
40 % 7  # 40 "mod" 7: de rest van 40 gedeeld door 7
# Voer deze cel uit
40 // 11  # integerdeling: de rest wordt genegeerd
# Voer deze cel uit
'hi there!'  # (zie hoe beleefd Python is!)
# Voer deze cel uit
'who are you?'  # (maar is soms wat gevoelig.)
# Voer deze cel uit
my_list = [0, 1, 2, 3]  # Je kan gegevens (in dit geval een list) een naam geven (in dit geval de naam my_list)
# Voer deze cel uit
my_list[1:]  # Je kan lijsten slicen (in dit geval de list met naam my_list)
# Voer deze cel uit
my_list[::-1]  # Je kan lijsten omdraaien (ook strings!) door middel van "stap" slicing met -1 als de stapgrootte.
# Voer deze cel uit
[6, 7, 8, 9][1:]  # Je kan lijsten slicen met de lijst zelf in plaats van een naam (Dat is in dit geval niet heel handig, inderdaad!)
# Voer deze cel uit
100*my_list + [42]*100
# Voer deze cel uit
my_list = 42  # Je kan een andere waarde toekennen aan de naam my_list, zelfs van een ander type. Nu wijst my_list naar de integer 42, in plaats van de list waar het eerder naar verwees
# Voer deze cel uit
my_list == 42  # Eén of twee gelijktekens maakt uit! Dit _vergelijkt_ de twee waarden.
# Voer deze cel uit
my_list != 42  # Dit test op "ongelijkheid"

Fouten

Fouten zijn onvermijdelijk! Deze fouten worden in Python ook wel exceptions genoemd en één van de belangrijkste gewoontes die je hopelijk tijdens het maken van de oefeningen zult ontwikkelen is dat wanneer een fout optreedt je dit beschouwt als een kans, en niet als een probleem!

Laten we nu fouten gaan maken, oftewel exceptions. Neem hier een paar minuten de tijd voor en probeer in deze tijd zoveel mogelijk van de onderstaande exceptions te veroorzaken in aparte cellen:

  • NameError: Een onbekende variabele!

  • TypeError: Probeer bijvoorbeeld een integer te slicen, of een integer bij een string op te tellen!

  • ZeroDivisionError: De naam geeft het misschien al aan, iets delen door 0?

  • SyntaxError: Fouten die katten veroorzaken als ze over een toetsenbord lopen…

  • IndexError: Probeer een index die buiten de grenzen van een sequentie valt (bijvoorbeeld van een list of str)

  • OverflowError: Bedenk dat integers niet kunnen overflowen, als ze te groot worden voor het geheugen dan zal Python crashen (ook een leuk experiment!). Om een OverflowError te kunnen genereren zal je floating point getallen zoals bijvoorbeeld 42.0 in een berekening moeten gebruiken. Pas bijvoorbeeld de machtsverheffingsoperator ** toe om snel tot heel grote getallen te komen!

Voer de volgende cellen uit om deze fouten te zien:

# NameError
onbekende_variabele
# TypeError
5 + "2"
# ZeroDivisionError
10 / 0
# SyntaxError (een kat liep over het toetsenbord?)
2 + 2qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
# IndexError
my_list = [1, 2, 3]
my_list[10]
# OverflowError
2.0**10000

Probeer nu zelf code te schijven om een aantal van deze fouten te maken!

# NameError
# TypeError
# ZeroDivisionError
# SyntaxError
# IndexError

Opdrachten

Lijsten maken en bewerken

In de volgende opdrachten maak je een aantal lijsten met alleen maar de getallen in de lijsten pi en e met behulp van de volgende bewerkingen:

  • lijsten indexeren, bijvoorbeeld pi[0]

  • lijsten slicen, bijvoorbeel e[:1]

  • stapsgewijs slicen, bijvoorbeeld pi[0:6:2]

  • lijsten samenvoegen met +, bijvoorbeeld e[0:2] + pi[-2:]

    (voor deze opdrachten vragen we jou + niet te gebruiken voor het optellen van getallen)

Nieuwe cellen en experimenteren

Gebruik nieuwe cellen voor je antwoorden (zodat het zowel voor jou als voor ons goed leesbaar blijft!).

Je kunt experimenteren in nieuwe cellen, probeer bijvoorbeeld e[0:1] + pi[0:1] te typen in een nieuwe cel.

Als je het leuk vindt kan je proberen zo min mogelijk bewerkingen te gebruiken om tot eenvoudige, elegante en efficiënte oplossingen te komen.

Gebruik de volgende lijsten voor de opdrachten:

# Voer deze cel uit
e = [2, 7, 1]
pi = [3, 1, 4, 1, 5, 9]

De eerste opdracht krijg je van ons; dit is een voorbeeld van hoe je ze moet maken:

# Voorbeeldopdracht lists, resultaat: [2, 7, 5, 9]
answer0 = e[0:2] + pi[-2:]
print(answer0)
assert answer0 == [2, 7, 5, 9], "answer0 moet [2, 7, 5, 9] zijn"

Jezelf nakijken met assert

Onder elke opdracht staat een regel die met assert begint. Dat is een assertion: een bewering waarvan jij zegt dat hij waar moet zijn.

assert answer1 == [7, 1], "answer1 moet [7, 1] zijn"

Klopt de bewering, dan gebeurt er niets en loopt je cel gewoon door. Klopt hij niet, dan stopt Python met een AssertionError en de tekst die erachter staat. Zolang je nog niets hebt ingevuld gebeurt dat dus ook - dat is de bedoeling, want dan weet je dat je nog niet klaar bent.

Een assertion is daarmee iets anders dan een print. Met print kijk jij of het klopt; met assert kijkt Python het voor je na. Je komt ze de rest van de cursus overal tegen, en vanaf week 3 schrijf je ze zelf.

Maak nu zelf de volgende lijsten:

# Opdracht 1: Maak de lijst [7, 1]
answer1 = ... # Jouw code hier
print(answer1)
assert answer1 == [7, 1], "answer1 moet [7, 1] zijn"
# Opdracht 2: Maak de lijst [1, 1, 2]
answer2 = ... # Jouw code hier
print(answer2)
assert answer2 == [1, 1, 2], "answer2 moet [1, 1, 2] zijn"
# Opdracht 3: Maak de lijst [1, 4, 1, 5, 9]
answer3 = ... # Jouw code hier
print(answer3)
assert answer3 == [1, 4, 1, 5, 9], "answer3 moet [1, 4, 1, 5, 9] zijn"
# Opdracht 4: Maak de lijst [1, 2, 3, 4, 5]
answer4 = ... # Jouw code hier
print(answer4)
assert answer4 == [1, 2, 3, 4, 5], "answer4 moet [1, 2, 3, 4, 5] zijn"

Strings slicen en indexeren

Deze opdrachten zijn in dezelfde stijl als de vorige, maar gebruiken strings in plaats van lijsten.

Je mag elke combinatie van de onderstaande vier bewerkingen gebruiken:

  • strings indexeren, bijvoorbeeld h[0]

  • strings slicen, bijvoorbeeld s[1:]

  • strings samenvoegen met +, bijvoorbeeld h + s

  • herhalingen met *, bijvoorbeeld 42*g

# Voer deze cel uit
h = "hanze"
s = "hogeschool"
g = "groningen"

De eerste opdracht krijg je van ons, Gebruik h, s of g om de string hoi te maken. Bewaar de string in de variabele met naam answer5. Hier is de oplossing:

# Opdracht 5: Maak de string 'hoi'
answer5 = s[0:2] + g[4]
print(answer5)
assert answer5 == 'hoi', "answer5 moet 'hoi' zijn"

In totaal zijn 3 bewerkingen nodig, het ophalen van ho met s[0:2] (slicen), het ophalen van i met g[4] (indexeren) en vervolgens deze twee waarden samenvoegen met + zodat we tot hoi komen als nieuwe waarde.

Meer of minder bewerkingen

Bij elk van de volgende opdrachten zullen we steeds aangeven wat het minimaal aantal bewerkingen is dat wij hebben kunnen vinden. Het maakt niet uit als jij meer bewerkingen nodig hebt, zolang je maar tot een juiste oplossing komt!

Maak nu zelf de volgende strings:

# Opdracht 6: Maak de string 'schoenen' (Ons record: 4 bewerkingen)
answer6 = ... # Jouw code hier
print(answer6)
assert answer6 == 'schoenen', "answer6 moet 'schoenen' zijn"
# Opdracht 7: Maak de string 'anzeogeschool' (Ons record: 3 bewerkingen)
answer7 = ... # Jouw code hier
print(answer7)
assert answer7 == 'anzeogeschool', "answer7 moet 'anzeogeschool' zijn"
# Opdracht 8: Maak de string 'gnagnahahahahaha' (Ons record: 7 bewerkingen)
answer8 = ... # Jouw code hier
print(answer8)
assert answer8 == 'gnagnahahahahaha', "answer8 moet 'gnagnahahahahaha' zijn"
# Opdracht 9: Maak de string 'legonoego' (Ons record: 7 bewerkingen)
answer9 = ... # Jouw code hier
print(answer9)
assert answer9 == 'legonoego', "answer9 moet 'legonoego' zijn"
# Opdracht 10: Maak de string 'leggings' (Ons record: 7 bewerkingen)
answer10 = ... # Jouw code hier
print(answer10)
assert answer10 == 'leggings', "answer10 moet 'leggings' zijn"

Gefeliciteerd, je hebt een eerste kennismaking met notebooks voltooid!