Tussentoets Programmeren en genomics, 8CA10, versie A 17 maart 2017, 15.45-16.45u. Er zijn 2 opgaven. Per opgave is er een bestand (respectievelijk opgave1.py en opgave2.py) beschikbaar waarin je verzocht wordt je oplossing te maken. Deze bestanden moet je uiteindelijk (zie instructieblad “Als je klaar bent...”) uploaden. Succes!!!! 1. Laat n een tienvoud groter dan 100 zijn. Construeer enkel gebruikmakend van de rangemethode en de concatenatie-operator de lijsten: (a) [n+10, n+5, n, .., 10, 5, 0, 0, -5, -10, .., -n+10, -n+5, -n]. (b) [-n, -n+1, .., -2, -1, 0, 0, 0, 10, 20, .., n-20, n-10, n, n+10]. [Opgave 1: maximaal 2 punten] 2. Gegeven is een tekstbestand temperatures.txt met daarin temperatuurmetingen van een patiënt. Het bestandsformaat is zodanig dat op elke regel precies één meetpunt staat. Elk meetpunt bestaat daarbij uit 2 getallen die van elkaar gescheiden zijn door een tab. Het eerste getal op de regel is het tijdstip in uren vanaf het begin van het meten. Het tweede getal is de op dat tijdstip gemeten temperatuur. (a) Ontwerp een Python functie met een bestandsnaam als enige parameter die het opgegeven bestand leest en twee lijsten retourneert, waarbij de eerste lijst de tijdstippen van de meetpunten moet bevatten en de tweede lijst de gemeten temperaturen. Roep je Python functie aan op het bestand temperatures.txt. (b) Ontwerp een Python functie met een lijst (van getallen) als enige parameter die voor elk van de items in de lijst, behalve de eerste en laatste, het gemiddelde bepaalt van dit getal, het getal ervoor en het getal erna. De berekende gemiddeldes moeten in een lijst geretourneerd worden. De parameter van de functie moet als default waarde de lijst [37,37,38,39] krijgen en als de functie zonder argumenten aangeroepen wordt dus de lijst [37.33333, 38.0] retourneren. (c) Gebruik de functies die je bij de onderdelen (a) en (b) geschreven hebt om een grafiek te maken van de temperatuur van de patiënt als functie van de tijd. In deze grafiek moeten als eerste de meetpunten weergegeven worden met blauwe sterretjes. Tevens moet in deze zelfde grafiek een groene stippellijn getrokken worden door de gemiddelde waarden van steeds drie opeenvolgende punten (behalve dus weer voor het eerste en laatste tijdstip). Je grafiek zou er uit moeten zien als onderstaande figuur. [Opgave 2: a) maximaal 3 punten, b) maximaal 3 punten, c) maximaal 2 punten] 1 Feedback tussentoets Versie A: opgave 1 range(n+10,-5,-5) + range(0,-n-1,-5) of -4,-3,-2 of -1 of –n-5,-n-4,-n-3 of -n-2 of –(n+5) … -(n+1) range(-n,1,1) + range(1) + range(0,n+11,10) of range(-n,1) A.J. Markvoort of range(0,1) range(0,1,1) range(0,1,999) 10-5-2017 PAGE 277 of n+12, n+13, …, n+20 Feedback tussentoets Versie A: opgave 2 def readFile(filename): """ Leest bestand in met de naam filename en retourneert de inhoud van de 2 kolommen in 2 even lange lijsten """ # lees het bestand f = open(filename) lines = f.readlines() f.close() # verwerk regel per regel tijdpunten = [] meetwaarden = [] for line in lines: m = line.split() # scheid tijdpunt en meetwaarde tijdpunten.append(float(m[0])) # voeg tijdpunt toe als getal meetwaarden.append(float(m[1])) # voeg meetwaarde toe als getal return tijdpunten, meetwaarden print readFile('temperatures.txt') Feedback tussentoets Versie A: opgave 2 def walkingAverage(data=[37,37,38,39]): """ Retourneer een lijst die 2 elementen korter is met gemiddelden van telkens 3 opeenvolgende waarden uit de lijst data """ # Begin met een lege lijst listOfMeans = [] # Loop over alle elementen behalve de eerste en de laatste for i in range(1,len(data)-1): # Bereken het gemiddelde van huidige element en die ervoor en erna mean = (data[i-1]+data[i]+data[i+1])/3. # Voeg deze waarde toe aan de initieel lege lijst listOfMeans.append(mean) # retourneer de lijst met uitgerekende gemiddelden return listOfMeans print walkingaverage() [37.33333, 38.0] A.J. Markvoort 10-5-2017 PAGE 280 Feedback tussentoets Versie A: opgave 2 ### main program ### # Lees het bestand x, y = readFile('temperatures.txt') # Bereken het 'lopende gemiddelde' van y waarden yAveraged = walkingAverage(y) # plot de data plus het 'lopende gemiddelde' plt.plot(x, y, 'b*', x[1:-1], yAveraged, 'g:') plt.xlabel('time (h)', fontsize=18) plt.ylabel('temperature (Celcius)', fontsize=18) plt.xticks(fontsize=18) plt.yticks(fontsize=18) plt.show() x = readFile('temperatures.txt')[0] y = readFile('temperatures.txt')[1] A.J. Markvoort 10-5-2017 PAGE 281