Introductie

Voorbereiding

Om zelf een jupyter notebook te draaien moet je het volgende doen:

  • Installeer Anaconda
  • start de python omgeving vanaf de command line met het commando
  jupyter notebook


Wat ook kan is een tijdelijke notebook openen op http://try.jupyter.org/, maar dit werkt helaas niet met de laatste chrome, wel met firefox. Deze notebook is tijdelijk, dus als je hem sluit is alles weer weg.

Laatste optie, dat je een notebook opent vanaf mijn computer, maar dit werk alleen voor de duur van de workshop.

Sudoku

Een sudoku is een puzzel die je vaak ziet, bijvoorbeeld in de krant. Hieronder een voorbeeld:

Met heel veel geduld en gepuzzel kan je deze sudoku oplossen. Dat is natuurlijk een beetje saai... Wat ook kan, is hem door de computer laten oplossen!

De opgave

Om het niet gelijk al te ingewikkeld te maken, gaan we deze sudoku proberen op te lossen

Dit is een 2x2 sudoku. Natuurlijk is deze zo makkelijk dat je die misschien wel uit je hoofd kan oplossen, maar het gaat er vandaag om dat je leert hoe je een programma schrijft dat hem voor jou oplost. Als je dat eenmaal kan, kan je die ook gebruiken om de (hele moeilijke) bovenste sudoku op te lossen. En wie weet kan vind je wel andere puzzels waarbij je dit kan toepassen.

Notebooks

Een notebook maakt het mogelijk code in je browser te draaien. Hieronder wat vorbeelden. In het grijze blokje staat de code, als je op ctrl+enter drukt wordt die uitgevoer. Onder het grijze blok zie je de uitvoer. Dit is uitkomst waarde van de laatste regel.


In [1]:
a=2
b=3
a+b


Out[1]:
5

In [2]:
a


Out[2]:
2

Je kan ook het print commando gebruiken om meer uitvoer te laten zien:


In [3]:
# er komen nu twee regels te staan
print('abc')
print('a+b =',a+b)


abc
a+b = 5

Je kan de invoer veranderen, en per stukje opnieuw berekenen. Doe dit door op een blokje te klikken, iets aan te passen, en met ctr+enter opnieuw uit te voeren

Basis python

In deze workshop gaan we een paar een paar bases (python) begrippen gebruiken, due handig als je alvast weet hoe het werkt

List


In [4]:
lijstje = ['nulste','eerste',2,'derde']
print('lijstje =',lijstje)


lijstje = ['nulste', 'eerste', 2, 'derde']

In [5]:
print('plek 1 =',lijstje[1])
print('plek 0 =',lijstje[0])
print('plek 1 tot en met 3 =',lijstje[1:3])


plek 1 = eerste
plek 0 = nulste
plek 1 tot en met 3 = ['eerste', 2]

Loop


In [6]:
for ding in lijstje:
    print('ding =',ding)


ding = nulste
ding = eerste
ding = 2
ding = derde

Dat we de elemeneten van lijstje hier ding noemen is een keuze. We kunnen ze net zo goed wat anders noemen


In [7]:
for iets in lijstje:
    print('iets =',iets)


iets = nulste
iets = eerste
iets = 2
iets = derde

Er is ook een andere manier om dit op te scrijven, we noemen dit list comprehension. Dit heeft als vordeel dat we het resultaat van de iteratie gelijk weer in een nieuwe lijst hebben


In [8]:
nieuwe_lijst = [print(ding) for ding in lijstje]
print('nieuwe_lijst = ', nieuwe_lijst)


nulste
eerste
2
derde
nieuwe_lijst =  [None, None, None, None]

In [9]:
nieuwe_lijst = [ding+ding for ding in lijstje]
print('nieuwe_lijst = ', nieuwe_lijst)


nieuwe_lijst =  ['nulstenulste', 'eersteeerste', 4, 'derdederde']

Dict

Een dict is, net als een list, een object waar je meerdere waarden in kan stoppen. Bij een list gaat het om de volgorde van je elementen, bij een dict om de key. Met de key kan je waardes opzoeken.


In [10]:
mijn_dict = {
    'lijstje': [1,2,3],
    'nog een lijstje': [4,5,6],
    }
print('mijn dict =',mijn_dict)
print('nog een lijstje =',mijn_dict['nog een lijstje'])


mijn dict = {'lijstje': [1, 2, 3], 'nog een lijstje': [4, 5, 6]}
nog een lijstje = [4, 5, 6]

Set

Heel handig voor deze workshop is een set. Een set is een verzameling unieke objecten. Die kan je snel vergelijken.


In [11]:
set1 = set([1,2,3,4])
set2 = set([3,4,5,6])
print('alles in set1 behalve als het in set2 is =',set1-set2)
print('alles wat zowel in set1 en set2 is=',set1 & set2)
print('alles wat in set1 en/of set2 is=',set1 | set2)


alles in set1 behalve als het in set2 is = {1, 2}
alles wat zowel in set1 en set2 is= {3, 4}
alles wat in set1 en/of set2 is= {1, 2, 3, 4, 5, 6}