15f Methoden met return
Deze les gebruikt return, uit Return.
Een methode kan iets uitrekenen en het antwoord teruggeven met return, net
als een gewone functie:
class Hond:
def __init__(self, naam, leeftijd):
self.naam = naam
self.leeftijd = leeftijd
def hondenjaren(self):
return self.leeftijd * 7
rex = Hond("Rex", 3)
jaren = rex.hondenjaren()
print(f"In hondenjaren is {rex.naam} {jaren}.")
Uitvoer:
In hondenjaren is Rex 21.
blaf() uit 15d print zelf iets. hondenjaren() print niets: hij geeft een
getal terug, en jij kiest wat je ermee doet. Je kunt het printen, maar ook
vergelijken of verder mee rekenen.
Een methode die ja of nee zegt
Vaak geeft een methode True of False terug. Dan past hij mooi in een
if:
class Hond:
def __init__(self, naam, leeftijd):
self.naam = naam
self.leeftijd = leeftijd
def is_puppy(self):
return self.leeftijd < 1
pup = Hond("Max", 0)
if pup.is_puppy():
print(f"{pup.naam} is nog een puppy.")
Uitvoer:
Max is nog een puppy.
Er gaat iets mis
class Hond:
def __init__(self, naam, leeftijd):
self.naam = naam
self.leeftijd = leeftijd
def hondenjaren(self):
print(self.leeftijd * 7)
rex = Hond("Rex", 3)
print(f"In hondenjaren is {rex.naam} {rex.hondenjaren()}.")
Uitvoer:
21
In hondenjaren is Rex None.
De methode print het getal zelf, en geeft daarna niets terug. Niets heet in
Python None, en dat komt in je zin terecht. Schrijf return in plaats van
print.
Opdracht 15f.1: Kilometers
Geef de Stappenteller uit 15e een methode kilometers(). Die geeft terug
hoeveel kilometer de stappen zijn, bij 1300 stappen per kilometer, afgerond
op één decimaal. Afronden doe je met round(): round(2.0008, 1) is 2.0,
het getal met één cijfer achter de punt.
Verwachte uitvoer:
2601 stappen is 2.0 km
class Stappenteller:
def __init__(self):
self.stappen = 0
def stap(self):
self.stappen += 1
def loop(self, aantal):
self.stappen += aantal
def kilometers(self):
return 0
teller = Stappenteller()
teller.stap()
teller.loop(2600)
print(f"{teller.stappen} stappen is {teller.kilometers()} km")Klik hier voor een tip.
Deel self.stappen door 1300, en geef de uitkomst aan round() met een
1 erachter.
Klik hier voor de oplossing.
class Stappenteller:
def __init__(self):
self.stappen = 0
def stap(self):
self.stappen += 1
def loop(self, aantal):
self.stappen += aantal
def kilometers(self):
return round(self.stappen / 1300, 1)
teller = Stappenteller()
teller.stap()
teller.loop(2600)
print(f"{teller.stappen} stappen is {teller.kilometers()} km")
Uitvoer:
2601 stappen is 2.0 km
Opdracht 15f.2: Niet rood staan
Geef de Rekening uit 15e een methode neem_op(bedrag). Is er genoeg
saldo, dan gaat het bedrag eraf en geeft de methode True terug. Is er te
weinig, dan blijft het saldo gelijk en geeft hij False terug.
Verwachte uitvoer:
True
False
Saldo van Sara: 5 euro
class Rekening:
def __init__(self, eigenaar):
self.eigenaar = eigenaar
self.saldo = 0
def stort(self, bedrag):
self.saldo += bedrag
def toon(self):
print(f"Saldo van {self.eigenaar}: {self.saldo} euro")
def neem_op(self, bedrag):
return "nog te doen"
rekening = Rekening("Sara")
rekening.stort(35)
print(rekening.neem_op(30))
print(rekening.neem_op(10))
rekening.toon()Klik hier voor een tip.
Vergelijk bedrag met self.saldo in een if. In het ene geval verlaag je
het saldo en return True, anders return False.
Klik hier voor de oplossing.
class Rekening:
def __init__(self, eigenaar):
self.eigenaar = eigenaar
self.saldo = 0
def stort(self, bedrag):
self.saldo += bedrag
def toon(self):
print(f"Saldo van {self.eigenaar}: {self.saldo} euro")
def neem_op(self, bedrag):
if bedrag <= self.saldo:
self.saldo -= bedrag
return True
else:
return False
rekening = Rekening("Sara")
rekening.stort(35)
print(rekening.neem_op(30))
print(rekening.neem_op(10))
rekening.toon()
Uitvoer:
True
False
Saldo van Sara: 5 euro
De tweede keer staat er nog 5 euro op de rekening, dus 10 opnemen lukt niet en het saldo blijft staan.