![]() |
|||
| 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