Sequenties en data#

In deze Jupyter Notebook ga je het volgende oefenen:

  • Splitsen en gebruiken van Python data

Jupyter Notebooks#

We gaan eerst bekend raken met de omgeving waar je veel tijd in zal doorbrengen, Jupyter Notebooks. Dit is een interactieve omgeving waar je Python code kunt schrijven en uitvoeren.

Bovenaan de pagina zie je een “raket” icoon en als je daar boven zweeft zie je twee opties, Colab en Live Code.

Launch button

Live Code maakt deze pagina interactief en kan je ter plekke code schrijven maar let op, jouw werk blijft niet bewaard! Deze optie kan handig zijn om snel iets te proberen.

Waarschuwing

De Live Code optie is nog experimenteel en kan soms niet goed werken!

De andere optie is Colab en zal dit volledige notebook openen in Google Colab waar je verder kan werken maar ook kan kiezen het te bewaren. Ook het boek gebruikt Colab voor de bijbehorende oefeningen en wij adviseren jou deze optie te gebruiken.

Notitie

Een ander optie is om het notebook te downloaden om daar verder aan te werken, kies onder het “download” icoon de optie .ipynb.

Download button

Visual Studio Code is een editor die notebook bestanden (.ipynb) kan openen en bewerken, het zal je de suggestie geven een extensie voor Jupyter Notebooks te installeren mocht je dit nog niet hebben gedaan.

In Jupyter Notebooks werk je met cellen. Er zijn twee hoofdtypes cellen: code cellen en markdown cellen. We beginnen met code cellen. Hier kun je Python code schrijven en uitvoeren. Probeer de onderstaande voorbeelden in aparte cellen:

# 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
L = [0, 1, 2, 3]  # Je kan gegevens (in dit geval een list) een naam geven (in dit geval de naam L)
# Voer deze cel uit
L[1:]  # Je kan lijsten slicen (in dit geval de list met naam L)
# Voer deze cel uit
L[::-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*L + [42]*100
# Voer deze cel uit
L = 42  # Je kan een andere waarde toekennen aan de naam L, zelfs van een ander type. Nu wijst L naar de integer 42, in plaats van de list waar het eerder naar verwees
# Voer deze cel uit
L == 42  # EĂ©n of twee gelijktekens maakt uit! Dit _vergelijkt_ de twee waarden.
# Voer deze cel uit
L != 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 string)

  • 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
L = [1, 2, 3]
L[10]
# OverflowError (dit kan lastig zijn om te reproduceren)
2.0 ** 1000
1.0715086071862673e+301

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

# NameError
# TypeError
# ZeroDivisionError
# SyntaxError
# IndexError

Opgaven#

Lijsten maken en bewerken#

In deze opgave ga je een aantal lijsten maken 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 opgaven 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 opgave krijg je van ons, dit is een voorbeeld van hoe je de opdrachten moet maken:

# Voorbeeldopgave lists, resultaat: [2, 7, 5, 9]
answer0 = e[0:2] + pi[-2:]
print(answer0)

Maak nu zelf de volgende lijsten:

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

Strings slicen en indexeren#

Deze opgave is in dezelfde stijl als de vorige, maar gebruikt 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 opgave 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:

# Opgave 5: Maak de string 'hoi'
answer5 = s[0:2] + g[4]
print(answer5)

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 opgaven 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:

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

Gefeliciteerd, je hebt een eerste kennismaking met notebooks voltooid!