Zoemzinnen. Algemene info. Functies met een variabel aantal argumenten

Vergelijkbare documenten
Opgaven. Python Assessment

Daylight saving time. Assignment

Algemeen. Rorschachtest. Algemene info

Inleiding Programmeren 2

Inleiding Programmeren 2

Uitwerkingen. Python Assessment

Programmeermethoden NA. Week 5: Functies (vervolg)

Het relaas van de beginnende programmeur. Het hoe en waarom van de assistent

Controle structuren. Keuze. Herhaling. Het if statement. even1.c : testen of getal even of oneven is. statement1 statement2

[15] Variabelen in functies (of: een woordje over scope)

PYTHON REEKS 2: FUNCTIES. Mathias Polfliet

Programmeermethoden NA

Obscure holidays. The last Square Root Day was celebrated on March 3, 2009 (9/9/2009).

Arrays. Complexe datastructuren. Waarom arrays. Geen stijlvol programma:

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object.

Programmeermethoden NA. Week 6: Lijsten

Inleiding Programmeren 2

OEFENINGEN PYTHON REEKS 1

Programmeermethoden NA. Week 5: Functies (vervolg)

[14] Functies. Volg mee via 14_Functies-1.py. We beginnen met een eenvoudig voorbeeldje:

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c

Inleiding Programmeren 2

Datum, Tijd en Timer-object

OEFENINGEN PYTHON REEKS 1

10 Meer over functies

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Informatietechnologie 2. JavaScript. Functies, Objecten en toegang tot de DOM. Kristof Michiels

Info-books. Toegepaste Informatica. Deel 20 : Algoritmen en programmeren in Access en Excel (Basis) AL20. Jos Gils Erik Goossens

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Combinatorische Algoritmen: Binary Decision Diagrams, Deel III

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms

Uitgebreide uitwerking Tentamen Complexiteit, mei 2007

Lab Webdesign: Javascript 3 maart 2008

OEFENINGEN PYTHON REEKS 1

Programmeermethoden NA

8C080 deel BioModeling en bioinformatica

Programmeermethoden NA

Modelleren en Programmeren

Programmeren. a. 0, 0, 0 b. 0, 0, 27 c. 15, 12, 0 d. 15, 12, 27

Programmeren (1) Examen NAAM:

[13] Rondjes draaien (loops)

Programmeermethoden NA. Week 4: Files & Functies

Een eenvoudig algoritme om permutaties te genereren

Hoofdstuk 3. Matrices en stelsels. 3.1 Matrices. [[1,7]],[[12,8] ] of [ 1, 7; 12,8 ] bepaalt de matrix

Maak een pivot uit een Generic.List

Pythoncursus. Opdrachtenserie 3. Tanja, Koen en Marein oktober Opdracht 1 - Turtlegraphics

RAAD HET GETAL. Hoofdstuk 4. Het spelletje 'Raad het getal' Voorbeeld van uitvoering van 'Raad het getal' Hoofdstuk 4 Raad het getal 21

GEDETAILLEERDE INHOUD

Practicumopgave 3: SAT-solver

Discrete Wiskunde 2WC15, Lente Jan Draisma

INHOUDSOPGAVE. Over de auteur, de illustrator en de technische redacteuren 13

Uitleg van de Hough transformatie

Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python.

1 Inleiding in Functioneel Programmeren

Python voor Natuur- en Sterrenkundigen Week 2

Niet-numerieke data-types

Programmeren in Java les 3

VAN HET PROGRAMMEREN. Inleiding. Het spiraalmodel. De programmeertaal. vervolgens de berekening van het totale bedrag, incl. BTW:

College Introductie

VBA voor Doe het Zelvers deel 20

Getallensystemen, verzamelingen en relaties

voegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is

Maak zelf een algoritme wanneer je een auto kunt winnen en welke auto je wint.

Objectgericht Programmeren. (in Python)

Algoritmen en Datastructuren 1. Functies

TECHNISCHE UNrVERSITElT DELFT Faculteit Elektrotechniek, Wiskunde en Informatica

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie

Afbeelding 12-1: Een voorbeeld van een schaakbord met een zwart paard op a4 en een wit paard op e6.

Practicum Programmeerprincipes

VAN HET PROGRAMMEREN. Inleiding

Informatica: C# WPO 11

Wat als je een heleboel informatie wilt opslaan? Bijvoorbeeld alle namen van iedereen die bij jouw dojo's aanwezig is? Hier gebruik je een lijst voor:

Wt s aanvullende Python opgaven

Cursus MSW-Logo. Def. Recursie: recursie is het oproepen van dezelfde functie of procedure binnen de functie of procedure

Inleiding Programmeren 2

Bepaling energie en soortelijke warmte 2D-atoomrooster m.b.v. de Metropolis Monte Carlo methode

Klassen. Hoofdstuk Klassen

Query SQL Boekje. Fredrik Hamer

NAAM: Programmeren 1 Examen 29/08/2012

Vectorruimten en deelruimten

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010


Inleiding Programmeren 2

Ruimtemeetkunde deel 1

Toetsvoorbereiding Informatica HAVO/VWO 5 (T51) Programmeren met Python II. Duur: 70 minuten Datum: sept 2018

6.3 VBA Syntax Instructie. Wij gaan de Visual Basic Editor opnieuw openen, om de instructie die wij zojuist getypt hebben, nader te bekijken.

De sheets zijn gebaseerd op met name hoofdstuk. D. Bell en M. Parr, Java voor studenten, Prentice Hall,

Verzamelingen, Lijsten, Functioneel Programmeren

Zelftest Inleiding Programmeren

Lineaire Algebra TW1205TI. I.A.M. Goddijn, Faculteit EWI 12 februari 2014

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

Gebruikers handleiding. Lizard Configuration Manager ToolTip. Installatie. Instellen. Initieel instellen

Variabelen en statements in ActionScript

Gerichte Grafen Boolese Algebra s &. Logische Netwerken

Vakgroep CW KAHO Sint-Lieven

Een spoedcursus python

Zomercursus Wiskunde. Rechten en vlakken (versie 14 augustus 2008)

Verzamelingen, Lijsten, Functioneel Programmeren

Transcriptie:

Zoemzinnen Functies met een variabel aantal argumenten Bij het definiëren van een functie leg je in principe vast hoeveel argumenten er aan de functie moeten doorgegeven worden. Dit aantal correspondeert met het aantal parameters die opgegeven worden bij de definitie van de functie. Aan onderstaande functie moeten bijvoorbeeld twee argumenten doorgegeven worden, en zal de functie het resultaat van de optelling van de twee doorgegeven objecten teruggeven. >>> def som(term1, term2):... return term1 + term2... >>> som(1, 2) Stel echter dat we een functie willen schrijven waaraan men nul of meer argumenten moet kunnen doorgeven, waarop de functie het resultaat van de som van alle doorgegeven objecten moet teruggeven. Dit kan door een parameter te laten voorafgaan door een asterisk (*). Aan deze parameter zal een tuple toegekend worden dat alle argumenten bevat die positioneel werden doorgegeven bij het aanroepen van de functie en die niet aan andere parmaters werden toegekend. >>> def som(*termen):... totaal = 0... for term in termen:... totaal += term... return totaal... >>> som(1, 2) >>> som(1, 2, ) 6 >>> som(1, 2,, 4) 10 In dit geval zullen alle argumenten die aan de functie som doorgegeven worden, gebundeld worden in een tuple dat wordt toegekend aan de lokale variabele termen. Het is ook mogelijk om andere parameters op te geven bij de definitie van de functie, zolang de parameter die voorafgegaan wordt door een asterisk als laatste parameter gedefinieerd wordt. Er kan ook slechts één parameter voorkomen die voorafgegaan wordt door een asterisk. Hieronder definiëren we bijvoorbeeld een functie som waaraan minstens twee argumenten moeten doorgegeven worden. De functie geeft nog altijd de som van alle argumenten terug die aan de functie worden doorgegeven. >>> def som(term1, term2, *termen):... totaal = term1 + term2... for term in *termen:... totaal += term... return totaal... >>> som(1, 2) 1

>>> som(1, 2, ) 6 >>> som(1, 2,, 4) 10 Dawkins wezel De module random De module random uit The Python Standard Library kan gebruikt worden om willekeur toe te voegen aan je Python code. Deze module bevat onder andere de volgende functies. functie korte omschrijving random() genereert een willekeurig reëel getal uit het interval [0, 1[ randint(a, b) genereert een willekeurig geheel getal uit het interval [a, b] choice(s) kiest een willekeurig element uit de sequentie s sample(s, k) kiest willekeurig k verschillende elementen uit de sequentie s shuffle(l) schudt de elementen van de lijst l willekeurig door elkaar Hieronder staan alvast enkele voorbeelden. >>> import random >>> random.random() 0.95411645221452 >>> random.random() 0.54842948267479 >>> random.randint(, 10) 5 >>> random.randint(, 10) 8 >>> lijst = [ a, b, c ] >>> random.choice(lijst) b >>> random.choice(lijst) a >>> lijst [ a, b, c ] >>> random.sample(lijst, 2) [ a, c ] >>> random.sample(lijst, 2) [ b, a ] >>> lijst [ a, b, c ] 2

>>> random.shuffle(lijst) >>> lijst [ c, a, b ] Onvoorspelbare verjaardagen De module datetime De module datetime uit The Python Standard Library definieert een aantal nieuwe gegevenstypes die datums (datetime.date objecten) en tijdsintervallen (datetime.timedelta objecten) voorstellen. Hieronder alvast enkele voorbeelden. >>> from datetime import date >>> geboortedatum = date(1990, 10, ) >>> geboortedatum = date(day=, month=10, year=1990) >>> geboortedatum.day # day is een eigenschap >>> geboortedatum.month # month is een eigenschap 10 >>> geboortedatum.year # year is een eigenschap 1990 >>> geboortedatum.weekday() # weekday is een methode!! 2 >>> vandaag = date.today() >>> vandaag datetime.date(2015, 11, 10) # uitgevoerd op 11 oktober 2015 >>> from datetime import timedelta >>> morgen = vandaag + timedelta(1) >>> morgen datetime.date(2015, 11, 11) >>> verschil = morgen - vandaag >>> type(verschil) datetime.timedelta >>> verschil.days 1

Algemeen Verzamelingen en dictionaries in doctests De elementen van een verzameling en de sleutels van een dictionary hebben geen vaste volgorde. Dit betekent dat twee verzamelingen of twee dictionaries gelijk zijn, ongeacht de volgorde waarin de elementen/sleutels voorkomen bij de definitie ervan. >>> {1,, 2, 4} == {4,, 1, 2} >>> { A : 1, B : 2, C : } == { B : 2, A : 1, C : } Verzamelingen en dictionaries kunnen echter problemen opleveren als je werkt met doctests, omdat die bij het vergelijken van de verwachte en gegenereerde uitvoer als volgt te werk gaan: de verwachte uitvoer wordt uit de docstring geëxtraheerd als een string, en de waarde die door de functie wordt teruggegeven of die als resultaat bekomen wordt bij de evaluatie van een expressie, wordt omgezet naar een string. Deze twee strings worden met elkaar vergeleken (als string, niet als verzameling of als dictionary). Bij het vergelijken van strings speelt de volgorde van de karakters wel een rol, en hier zit net het probleem. >>> d1 = { A : 1, B : 2, C : } >>> s1 = str(d1) # uitgevoerd op computer 1 >>> d1 "{ A : 1, C :, B : 2}" >>> d2 = { A : 1, B : 2, C : } >>> s2 = str(d2) # uitgevoerd op computer 2 "{ A : 1, B : 2, C : }" >>> d1 == d2 >>> s1 == s2 False Hoewel de dictionaries d1 en d2 dezelfde waarde hebben, geeft de doctest aan dat de stringvoorstellingen van deze twee dictionaries verschillend zijn. Het omzetten van een dictionary naar een string kan immers afhangen van de computer waarop je de code uitvoert, van de versie van Python die gebruikt wordt en kan zelfs verschillen als je het een paar keer na elkaar uitvoert op dezelfde computer met dezelfde Python versie. Het probleem kan opgelost worden door ervoor te zorgen dat de doctest geen strings maar elkaar vergelijkt, maar rechtstreeks de verzamelingen of dictionaries met elkaar vergelijkt. Als je dus oorspronkelijk een doctest krijgt van de volgende vorm >>> functie(parameter1, parameter2) { A : 1, B : 2, C : } dan kan je deze doctest beter herschrijven als >>> functie(parameter1, parameter2) == { A : 1, B : 2, C : } Indien je je oplossing indient op Dodona, dan zullen de resultaten wel degelijk als verzamelingen of dictionaries geïnterpreteerd worden, en niet als strings. Daar doet het probleem zich dus niet voor. 1

Busroddels Operatoren voor verzamelingen In Python is het eenvoudig om de unie, de doorsnede en het verschil te bepalen van twee verzamelingen. >>> verzameling1 = { A, B, C } >>> verzameling2 = { C, D, E } >>> verzameling1 & verzameling2 # doorsnede { C } >>> verzameling1 verzameling2 # unie { A, B, C, D, E } >>> verzameling1 - verzameling2 # verschil { A, B } >>> verzameling2 - verzameling1 # verschil is assymetrisch { D, E } Evendeling Specifieke info De methode samenhangend kan best geïmplementeerd worden met een flood fill algoritme. We starten hiervoor met een willekeurig element e uit onze container S en plaatsen het in een lijst L. L zal de lijst zijn die alle elementen bevat die we als bereikbaar gelabeld hebben, maar waarvan de buren nog niet noodzakelijk gelabeld zijn. Voeg e toe aan L. Vervolgens blijven we de volgende procedure uitvoeren tot L leeg is. Neem het eerste element f uit L Voor alle niet gelabelde buren b van f in S Voeg b toe aan L Label b als bereikbaar Verwijder f uit L Als L leeg is, zijn alle elementen uit S die bereikbaar zijn vanuit e gelabeld. Als er dus nog elementen in S zijn die niet gelabeld zijn, is onze container niet samenhangend. Tips: Je kunt de container S best omvormen naar een lijst In plaats van een element te labelen in S kan het ook verwijderd worden uit S. Ditkunjee doen door zijn waarde naar None te veranderen in de S. ciënt 2

Figure 1: Flood fill