Tussentoets Programmeren en genomics, 8CA10, versie A 17 maart

advertisement
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
Download