.. sectnum:: Oefeningen 2021-03-15 ============================= Opgave ----------- Schrijf een functie `volume_kubus(z)` die het volume van een kubus met zijde met lengte `z` berekent:: v = volume_kubus(z=1) print(v) # 1 v = volume_kubus(z=2) print(v) # 8 v = volume_kubus(z=5.50) print(v) # 166.375 Het volume van een kubus met zijde :math:`z` bereken je als volgt: .. math:: V = z^3 :label: eq:volkubus Opgave ----------- Schrijf een functie `volume_cilinder(r, h)` die het volume van een cilinder berekent:: v = volume_cilinder(r=1, h=1) print(v) # 3.141592653589793 v = volume_cilinder(r=2, h=4) print(v) # 50.26548245743669 v = volume_cilinder(r=4, h=2) print(v) # 100.53096491487338 Het volume van een cilinder met straal :math:`r` en hoogte :math:`h` bereken je als volgt: .. math:: V = \pi r^2 h :label: eq:volcilinder Hints: - de constante Pi zit in de module math - je kan modules importeren met import Opgave ----------- Schrijf een functie `afstand(x1, y1, x2, y2)` die de afstand tussen twee punten berekent:: d = afstand(x1=1, y1=2, x2=3, y2=5) print(d) # 3.605551275463989 d = afstand(x1=1, y1=2, x2=3, y2=4) print(d) # 2.8284271247461903 d = afstand(x1=-2, y1=3, x2=5, y2=-4) print(d) # 9.899494936611665 De afstand tussen twee punten :math:`(x_1,y_1)` en :math:`(x_2,y_2)` bereken je als volgt: .. math:: d=\sqrt{\left(x_1-x_2\right)^2+\left(y_1-y_2\right)^2} :label: eq:pfx Hints: - de functie sqrt berekent de vierkantswortel - sqrt zit in de module math Opgave ----------- Schrijf een class `Televisie` met 3 methods: `schakel_aan`, `schakel_uit` en `status`. Je moet de class als volgt kunnen gebruiken:: tv = Televisie() tv.schakel_aan() tv.status() # print "aan" tv.schakel_uit() tv.status() # print "uit" Hints: - vergeet niet de initialisatie functie `__init__` toe te voegen - gebruik `self` om properties aan te maken in `__init__` - gebruik `self` om aan de properties te kunnen in de andere methods - gebruik enkel `print` in de `status` method Opgave ----------- Voeg twee methods `harder` en `zachter` toe aan je class `Televisie`. Je moet de class als volgt kunnen gebruiken:: tv = Televisie() tv.schakel_aan() tv.status() # print "aan, volume 5" tv.harder() tv.harder() tv.status() # print "aan, volume 7" tv.zachter() tv.status() # print "aan, volume 6" Hints: - het standaardvolume is dus 5 - maak een property voor het standaardvolume in de `__init__` method Opgave --------- Pas je class `Televisie` aan zodat je een foutmelding krijgt als je de televisie aan probeert te zetten als ie reeds aan staat:: tv = Televisie() tv.schakel_aan() tv.schakel_aan() # print "fout: reeds aan" tv.status() # print "aan, volume 5" tv.schakel_uit() tv.schakel_uit() # print "fout: reeds uit" Hint: Gebruik if-condities in de `schakel_aan` en `schakel_uit` methods. Opgave --------- Pas je class `Televisie` aan zodat je kan zappen:: tv = Televisie() tv.schakel_aan() tv.status() # print "aan, volume 5, ?" tv.zap("canvas") tv.status() # print "aan, volume 5, canvas" tv.zap("vier") tv.status() # print "aan, volume 5, vier" Hint: - voeg het gekozen kanaal toe als property - pas de `status` method aan zodat het kanaal getoond wordt - initieel stel je '?' als gekozen kanaal in, om aan te geven dat nog geen kanaal gekozen werd Opgave --------- Voeg een method `__str__` toe zodat:: tv = Televisie() tv.schakel_aan() tv.zap("canvas") print(tv) # print "aan, volume 5, canvas" tv.harder() print(tv) # print "aan, volume 6, canvas" Opgave --------- Maak nu twee objecten aan van je class `Televisie`. Onderstaande code zou zonder aanpassing moeten werken mits je de vorige opgaves correct hebt geimplementeerd:: tv_living = Televisie() tv_slaapkamer = Televisie() tv_living.schakel_aan() tv_living.zap("canvas") print(tv_living) # print "aan, volume 5, canvas" tv_slaapkamer.schakel_aan() tv_slaapkamer.zap("vtm") tv_slaapkamer.zachter() print(tv_slaapkamer) # print "aan, volume 4, vtm" print(tv_living) # print "aan, volume 5, canvas" Opgave --------- Voeg een method `stel_kanalen_in` toe die als parameter een lijst krijgt:: tv = Televisie() tv.stel_kanalen_in(["vtm", "vier", "vijf"]) tv.schakel_aan() tv.zap("canvas") # print "error: onbekend kanaal" tv.zap("vier") print(tv) # print "aan, volume 5, vier" Hints: - Voeg een property `beschikbare_kanalen` toe in de `__init__` methode. - Stel de property `beschikbare_kanalen` in als je `stel_kanalen_in` uitvoert. - Gebruik in `zap` een if-conditie om te controleren of het kanaal waarnaar gezapt moet worden in de lijst met beschikbare kanalen staat. - Om te kijken of een waarde in een lijst voorkomt kan je `in` gebruiken. Voorbeeld van gebruik van `in`:: v = [1, 2, 3, 4] if 2 in v: print("2 zit in de lijst") else: print("2 zit niet in de lijst")