Een hodometer (van het Griekse hodos = weg, onder invloed van het Engels ook odometer genoemd) is een apparaat waarmee een afgelegde afstand gemeten wordt. Dit gebeurt in het algemeen door het aantal omwentelingen van een wiel te tellen en dit aantal te vermenigvuldigen met de omtrek van dat wiel. De meest bekende vorm van een hodometer is de kilometerteller zoals die gebruikt wordt in bijvoorbeeld een auto. In een aantal landen (zoals de VS), wordt de afgelegde afstand weergegeven in mijl. In andere landen wordt dan weer gemeten in kilometer. Veel voertuigen die uitgerust zijn met een elektronische hodometer hebben echter de mogelijkheid te schakelen tussen kilometer of mijl. De nauwkeurigheid waarmee de afgelegde afstand wordt weergegeven is 1/10 van een mijl of van een kilometer. Wanneer een hodometer wordt vervangen, dan kan een nieuwe hodometer ingesteld worden op een gespecifieerd aantal kilometer of mijl.
Je opdracht bestaat erin een klasse HodoMeter aan te schrijven. Je klasse moet de volgende methoden ondersteunen:
De initialisatiemethode __init__ krijgt als optionele parameters de totaal afgelegde afstand en de gebruikte eenheid mee. De eenheid wordt meegegeven als een Booleaanse waarde die True is als de afgelegde afstand in kilometer werd gemeten en False in het geval de afstand in mijl wordt uitgedrukt. Leidt de standaardwaarden voor de parameters van de constructor af uit onderstaand voorbeeld.
De methoden __str__ en __repr__ geven de stringrepresentatie van de hodometer terug. Baseer je voor de vorm waarin de gegevens worden uitgeschreven op het voorbeeld hieronder.
De methoden __add__ en __sub__. Deze methoden hebben als eerste parameter een HodoMeter object en als tweede parameter een numerieke waarde die bij de afgelegde afstand moet opgeteld of afgetrokken worden. Merk op dat een afgelegde afstand niet negatief kan worden. Wanneer de numerieke waarde die wordt afgetrokken groter is dan de huidige afgelegde afstand, dan wordt de nieuwe afstand in de hodometer nul.
De methode switch die de eenheid van de hodometer verandert (van mijl naar kilometer of van kilometer naar mijl). Ook de afgelegde afstand wordt aangepast, wetende dat 1 mijl gelijk is aan 1609,344 meter.
Merk op dat de gevraagde hodometer de afgelegde afstand toont tot op 1/10 van een mijl of een kilometer nauwkeurig, maar dat de hodometer intern floating point precisie 6 gebruikt (dat is zes cijfers na de komma).
>>> h = HodoMeter()
>>> print(h)
0.0 km
>>> h
HodoMeter(0.000000, True)
>>> h = h + 10.4
>>> print(h)
10.4 km
>>> g = HodoMeter(10, False)
>>> print(g)
10.0 mi
>>> g
HodoMeter(10.000000, False)
>>> print(g - 50)
0.0 mi
>>> h.switch()
>>> print(h)
6.5 mi
>>> h
HodoMeter(6.462260, False)