HSG |
|
# -*- coding: iso-8859-1 -*- # Autor: mk, 20.11.08 class Bruch(object): def __init__(self,z,n): self.z = z self.n = n def kuerze(self): a=self.z b=self.n while b != 0: a,b = b,a%b self.z = self.z/a self.n = self.n/a def __add__(self,other): s = Bruch(1,1) s.z = self.z*other.n+other.z*self.n s.n = self.n*other.n s.kuerze() return s def __sub__(self,other): d = Bruch(1,1) d.z = self.z*other.n-other.z*self.n d.n = self.n*other.n d.kuerze() return d def __mul__(self,other): p = Bruch(1,1) p.z = self.z*other.z p.n = self.n*other.n p.kuerze() return p def __div__(self,other): q = Bruch(1,1) q.z = self.z*other.n q.n = self.n*other.z q.kuerze() return q def __str__(self): return str(self.z)+'/'+str(self.n) def __cmp__(self,other): if self.z*other.n < other.z*self.n: return -1 elif self.z*other.n == other.z*self.n: return 0 else: return 1
Definiere eine Klasse 'Laenge' zur Repräsentation von Strecken. Es soll Betrag und Einheit gespeichert werden. Ein Beispiel für einen Konstruktoraufruf wäre
erddurchmesser = Laenge(12713.507,'km')
Zur Umrechnung der Einheiten soll die Klasse als privates Klassenattribut ein Dictionary namens __meter enthalten, das einer Längeneinheit die Länge in Meter zuordnet. Das Dictionary kann mit Hilfe folgender Tabelle definiert werden:
Einheit (Kürzel) | Länge in Meter |
mm | 0.001 |
cm | 0.01 |
m | 1 |
km | 1000 |
in | 0.0254 |
ft | 0.3048 |
mil | 1609 |
Die Methode getMeter() liefert die Länge eines Objekts in Meter. Der Additionsoperator soll mit Hilfe von __add__() auf sinnvolle Weise überladen werden. Die Methode __str__() gibt eine lesbare Darstellung des Objektes als Zeichenkette, z.B. '1.34 mil' oder '1.23 cm'. Die Methode __cmp__() erlaubt Vergleiche von Längen.
Lösung: laenge.py