Skip to content

Commit c9fc2ff

Browse files
authoredDec 5, 2018
Add all exercises of lesson 4.
1 parent 7806d36 commit c9fc2ff

File tree

7 files changed

+315
-0
lines changed

7 files changed

+315
-0
lines changed
 

‎Lesson-04/fa/pe4_fa.py

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
'''
2+
3+
Introduction To Computing Using Python (Werkboek)
4+
5+
Final Assignment: NS-functies
6+
7+
De NS heeft standaardtarieven voor treinreizen, maar onder sommige omstandig-
8+
heden krijger reizigers korting. Bijvoorbeeld omdat ze in een bepaalde
9+
leeftijdscategorie vallen. In deze opdracht maak je twee functies:
10+
standaardtarief(..) en ritprijs(..). De eerste functie bepaalt het standaard-
11+
bedrag voor een bepaalde rit. De tweede functie maakt hier gebruik van, maar
12+
bepaalt zelf ook nog welke kortingen van toepassing zijn en levert als
13+
return-waarde de definitieve prijs.
14+
15+
'''
16+
17+
'''
18+
Deel 1
19+
20+
Schrijf functie standaardprijs(afstandKM). Iedere treinrit kost 80 cent per
21+
kilometer, maar als de rit langer is dan 50 kilometer betaal je een vast bedrag
22+
van €15,- plus 60 cent per kilometer. Ga bij invoer van negatieve afstanden
23+
uit van een afstand van 0 kilometer (prijs is dan dus 0 Euro).
24+
25+
'''
26+
27+
def standaardPrijs(afstandKM):
28+
if afstandKM > 0:
29+
if afstandKM <= 50:
30+
return 0.80 * afstandKM
31+
else:
32+
return 15 + 0.60 * afstandKM
33+
return 0.0
34+
35+
'''
36+
Deel 2
37+
Schrijf nu ook de functie ritprijs(leeftijd, weekendrit, afstandKM). De
38+
parameter weekendrit is een boolean die aangeeft of de rit in het weekend
39+
plaats zal hebben (True) of niet (False). Het eerste wat de functie
40+
ritprijs moet doen, is het aanroepen van de functie standaardprijs, waarbij
41+
de afstand in kilometers doorgegeven moet worden, om de standaardprijs voor
42+
de rit op te vragen. Aan de hand van de return-waarde kan de ritprijs worden
43+
berekend. De regels zijn als volgt:
44+
45+
Op werkdagen reizen kinderen (onder 12 jaar) en ouderen (65 en ouder) met
46+
30% korting. In het weekend reist deze groep met 35% korting. De overige
47+
leeftijdsgroepen reizen betalen de gewone prijs, behalve in het weekend, dan
48+
reist deze leeftijdsgroep met 40% korting.
49+
'''
50+
51+
def ritprijs(leeftijd, weekendrit, afstandKM):
52+
prijs = standaardPrijs(afstandKM)
53+
if weekendrit:
54+
if leeftijd < 12 or leeftijd >= 65:
55+
return prijs - prijs * 0.3
56+
else:
57+
return prijs - prijs * 0.4
58+
else:
59+
if leeftijd < 12 or leeftijd >= 65:
60+
return prijs - prijs * 0.35
61+
else:
62+
return prijs
63+
64+
'''
65+
Deel 3
66+
67+
De diverse parameters kunnen voor heel veel verschillende executie-paden
68+
zorgen. Dat wil zeggen dat de code op heel veel verschillende manieren door-
69+
lopen kan worden. Verstandig is om je programma in ieder geval op grens-
70+
waarden te testen. Voor leeftijd test je dan 11, 12, 64 en 65, maar voor
71+
al die leeftijden ook weer of het een weekendrit is of niet (4x2 = 8
72+
combinaties). Voor elk van die 8 combinaties kan er ook weer een korte of lange
73+
treinrit (of een negatieve afstand) ingevoerd worden, wat 8x3 = 24 testpaden
74+
oplevert. Test jouw methode ritprijs zo goed mogelijk!
75+
'''
76+
77+
# 1. 11 jaar oud, geen weekendrit, 0 km.
78+
print(ritprijs(11, False, 0)) # 0.0
79+
80+
# 2. 12 jaar oud, geen weekendrit, 0 km.
81+
print(ritprijs(12, False, 0)) # 0.0
82+
83+
# 3. 64 jaar oud, geen weekendrit, 0 km.
84+
print(ritprijs(64, False, 0)) # 0.0
85+
86+
# 4. 65 jaar oud, geen weekendrit, 0 km.
87+
print(ritprijs(65, False, 0)) # 0.0
88+
89+
# 5. 11 jaar oud, weekendrit, 0 km.
90+
print(ritprijs(11, True, 0)) # 0.0
91+
92+
# 6. 12 jaar oud, weekendrit, 0 km.
93+
print(ritprijs(12, True, 0)) # 0.0
94+
95+
# 7. 64 jaar oud, weekendrit, 0 km.
96+
print(ritprijs(64, True, 0)) # 0.0
97+
98+
# 8. 65 jaar oud, weekendrit, 0 km.
99+
print(ritprijs(65, True, 0)) # 0.0
100+
101+
# 9. 11 jaar oud, geen weekendrit, 30 km.
102+
print(ritprijs(11, False, 30)) # 15.6000...1
103+
104+
# 10. 12 jaar oud, geen weekendrit, 30 km.
105+
print(ritprijs(12, False, 30)) # 24.0
106+
107+
# 11. 64 jaar oud, geen weekendrit, 30 km.
108+
print(ritprijs(64, False, 30)) # 24.0
109+
110+
# 12. 65 jaar oud, geen weekendrit, 30 km.
111+
print(ritprijs(65, False, 30)) # 15.6000...1
112+
113+
# 13. 11 jaar oud, weekendrit, 30 km.
114+
print(ritprijs(11, True, 30)) # 16.8
115+
116+
# 14. 12 jaar oud, weekendrit, 30 km.
117+
print(ritprijs(12, True, 30)) # 14.3999...
118+
119+
# 15. 64 jaar oud, weekendrit, 30 km.
120+
print(ritprijs(64, True, 30)) # 14.3999...
121+
122+
# 16. 65 jaar oud, weekendrit, 30 km.
123+
print(ritprijs(65, True, 30)) # 16.8
124+
125+
# 17. 11 jaar oud, geen weekendrit, 50 km.
126+
print(ritprijs(11, False, 50)) # 26.0
127+
128+
# 18. 12 jaar oud, geen weekendrit, 50 km.
129+
print(ritprijs(12, False, 50)) # 40.0
130+
131+
# 19. 64 jaar oud, geen weekendrit, 50 km.
132+
print(ritprijs(64, False, 50)) # 40.0
133+
134+
# 20. 65 jaar oud, geen weekendrit, 50 km.
135+
print(ritprijs(65, False, 50 )) # 26.0
136+
137+
# 21. 11 jaar oud, weekendrit, 50 km.
138+
print(ritprijs(11, True, 50)) # 28.0
139+
140+
# 22. 12 jaar oud, weekendrit, 50 km.
141+
print(ritprijs(12, True, 50)) # 24.0
142+
143+
# 23. 64 jaar oud, weekendrit, 50 km.
144+
print(ritprijs(64, True, 50)) # 24.0
145+
146+
# 24. 65 jaar oud, weekendrit, 50 km.
147+
print(ritprijs(65, True, 50)) # 28.0

‎Lesson-04/pe4_1.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
'''
2+
3+
Introduction To Computing Using Python (Werkboek)
4+
5+
Functions (Perkovic - §3.3 t/m §3.5)
6+
7+
Practice Exercise 4.1 (functie met 3 parameters)
8+
Maak een nieuwe Python file aan voor deze opdracht (vanaf nu is dat standaard
9+
en zal dat niet steeds meer bij de opdracht staan). Schrijf (en test) de
10+
functie som() die 3 parameters heeft: getal1, getal2 en getal3. De return-
11+
waarde van de functie moet de som (optelling) van deze parameters zijn!
12+
13+
'''
14+
15+
16+
def som(getal1, getal2, getal3):
17+
''' Return the sum of 3 given integer parameters '''
18+
return getal1 + getal2 + getal3
19+
20+
antwoord = som(1, 2, 3)
21+
print(antwoord) # 6

‎Lesson-04/pe4_2.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
'''
2+
3+
Introduction To Computing Using Python (Werkboek)
4+
5+
Functions (Perkovic - §3.3 t/m §3.5)
6+
7+
Practice Exercise 4.2 (functie met list-parameter)
8+
Schrijf (en test) de functie som() die 1 parameter heeft: getallenLijst. Ga
9+
ervan uit dat dit een list is met integers. De return-waarde van de functie
10+
moet de som (optelling) van de getallen in de lijst zijn! Tip: bekijk nog eens
11+
de list-functies (Perkovic, blz. 28).
12+
13+
'''
14+
15+
16+
def som(getallenLijst):
17+
''' Return the sum of given list parameter '''
18+
return sum(getallenLijst)
19+
20+
antwoord = som([1, 2, 3])
21+
print(antwoord) # 6

‎Lesson-04/pe4_3.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
'''
2+
3+
Introduction To Computing Using Python (Werkboek)
4+
5+
Functions (Perkovic - §3.3 t/m §3.5)
6+
7+
Practice Exercise 4.3 (functie met if)
8+
Schrijf (en test) de functie lang_genoeg() die voor Efteling-attracties
9+
bepaalt of een gebruiker in een attractie mag. De functie heeft één parameter,
10+
namelijk de lengte van de gebruiker in centimers. Als de gebruiker 120
11+
centimeter of langer is de return-waarde van de functie "Je bent lang genoeg
12+
voor de attractie!", anders is de melding "Sorry, je bent te klein!".
13+
14+
'''
15+
16+
def lang_genoeg(lengte):
17+
'''Returns message based on given height in centimeters.'''
18+
if(lengte >= 120):
19+
return 'Je bent lang genoeg voor de attractie!'
20+
else:
21+
return 'Sorry, je bent te klein!'
22+
23+
reactie = lang_genoeg(180)
24+
print(reactie) # 'Je bent lang genoeg voor de attractie!'

‎Lesson-04/pe4_4.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
'''
2+
3+
Introduction To Computing Using Python (Werkboek)
4+
5+
Functions (Perkovic - §3.3 t/m §3.5)
6+
7+
Practice Exercise 4.4 (functie met if)
8+
Schrijf (en test) een functie new_password() die 2 parameters heeft:
9+
oldpassword en newpassword. De return-waarde is True als het nieuwe password
10+
voldoet aan de eisen. Het nieuwe password wordt alleen geaccepteerd als het
11+
verschilt van het oude password èn als het minimaal 6 tekens lang is. Als dat
12+
niet zo is, is de return waarde False.
13+
14+
Optioneel: zorg dat het nieuwe password minstens 1 cijfer moet bevatten!
15+
16+
'''
17+
18+
def new_password(oldpassword, newpassword):
19+
'''Checks if new password meets set requirements. '''
20+
if oldpassword != newpassword and len(newpassword) >= 6:
21+
return any(char.isdigit() for char in newpassword)
22+
23+
a = new_password('password123', 'password123')
24+
print(a) # False
25+
26+
b = new_password('password123', 'passw')
27+
print(b) # False
28+
29+
c = new_password('password', 'password')
30+
print(c) # False
31+
32+
d = new_password('password123', 'password1')
33+
print(d) # True

‎Lesson-04/pe4_5.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
'''
2+
3+
Introduction To Computing Using Python (Werkboek)
4+
5+
Functions (Perkovic - §3.3 t/m §3.5)
6+
7+
Practice Exercise 4.5 (functie met list-parameter en for-loop)
8+
Schrijf (en test) de functie kwadraten_som() die 1 parameter heeft:
9+
grondgetallen. Dit is een list met integers. De return-waarde van de functie
10+
is de som van de kwadraten van alle positieve getallen in de lijst! Een lijst
11+
van [4, 5, 3, -81] heeft als return waarde dus 50 (16 + 9 + 25)
12+
13+
'''
14+
15+
def kwadraten_som(grondgetallen):
16+
''' Returns sum of squared positive numbers in given parameter. '''
17+
positief = []
18+
for getal in grondgetallen:
19+
if getal > 0:
20+
positief.append(getal ** 2)
21+
return sum(positief)
22+
23+
antwoord = kwadraten_som([4, 5, 3, -81])
24+
print(antwoord)

‎Lesson-04/pe4_6.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
'''
2+
3+
Introduction To Computing Using Python (Werkboek)
4+
5+
Functions (Perkovic - §3.3 t/m §3.5)
6+
7+
Practice Exercise 4.6 (functie met (im)mutable parameter)
8+
Schrijf (en test) functie wijzig() met één parameter: letterlijst. Zorg dat de
9+
functie de lijst leegt en de letters ['d', 'e', 'f'] toevoegt. Er is geen
10+
return-waarde! Test je programma als volgt:
11+
12+
lijst = ['a', 'b', 'c']
13+
print(lijst)
14+
wijzig(lijst)
15+
print(lijst)
16+
17+
'''
18+
19+
lijst = ['a', 'b', 'c']
20+
letterlijst = 'f'
21+
22+
def wijzig(letterlijst):
23+
lijst.clear()
24+
lijst.append(letterlijst)
25+
26+
print(lijst)
27+
wijzig(letterlijst)
28+
print(lijst)
29+
30+
# Q: Waarom kun je in de functie niet de opdracht lijst = ['d', 'e', 'f'] geven?
31+
# A: Dit zou een nieuwe variabele lijst aanmaken in de scope van de functie,
32+
# hierdoor kun je niet meer bij de originele variabele die je moet muteren.
33+
34+
# Q: Werkt jouw functie ook met string-parameter? Probeer dit! Waarom werkt het
35+
# wel/niet?
36+
# A: Dit werkt wel, omdat de list.append() methode zowel een list als een
37+
# een string accepteert. Deze plaatst hij dan achter de originele lijst.
38+
39+
# Q: Welke rol speelt (im)mutabiliteit in deze vraag?
40+
# A: In het kader van de eerste vraag, zou variabele lijst, op het moment dat je
41+
# een nieuwe variabele genaamd 'lijst' in de functie aanmaakt, immutabel
42+
# worden, omdat de referentie binnen de scope van de functie verloren gaat.
43+
#
44+
# Je past in dit voorbeeld voor het eerst een variabele aan buiten de scope
45+
# waar we de vorige lessen mee hebben gewerkt.

0 commit comments

Comments
 (0)
Please sign in to comment.