Ich arbeite an einer Hausaufgabe für meine einführende Python-Klasse. Ziel ist es, Funktionen zu definieren, die */+ - <> < => = Operatoren mit Klassenaufrufen verwenden. Dieses besondere Programm nimmt 3 Parameter self, inches, numerator, denominator
und speichert den Nenner als einen Faktor von 64 (wenn es vereinfacht werden kann)Zuweisen von Operatoren zu eingebetteten Klassenfunktionen
Der Aufruf RulerUnit(2, 1, 4)
"2 1/4"
zurückkehren würde ich auf dem Multiplikationsteil arbeite, und habe Probleme, wenn inches
ist gleich 0
Ist inches == 0
oder inches is None
?
Außerdem, je nachdem was der Fall sein kann, wenn ich eine Behauptung zuführen: assert(str(RulerUnit(2, 3, 4) * RulerUnit(0, 1, 2)) == "1 3/8")
Ein AssertionError
ist abgesenkte, mein Code
print((RulerUnit(2, 3, 4) * RulerUnit(0, 1, 2)))
druckt 2 3/8
Code:
def __mul__ (self, other):
if self.inches == 0 and other.inches == 0:
newnum = self.num * other.num
finaldenom = self.denom * other.denom
finalnum = newnum % 64
finalinches = newnum // finaldenom
return RulerUnit(finalinches, finalnum, finaldenom)
elif self.inches == 0 and other.inches != 0:
newnum1 = (self.inches * self.denom) + self.num
finaldenom = self.denom * other.denom
finalnum = (newnum1 * other.num) % 64
finalinches = (newnum1 * other.num) // finaldenom
return RulerUnit(finalinches, finalnum, finaldenom)
elif self.inches!= 0 and other.inches == 0:
newnum1 = (self.inches * self.denom) + self.num
finaldenom = self.denom * other.denom
finalnum = (newnum1 * other.num) % 64
finalinches = (newnum1 * other.num) // finaldenom
return RulerUnit(finalinches, finalnum, finaldenom)
elif self.inches != 0 and other.inches != 0:
newnum1 = (self.inches * self.denom) + self.num
newnum2 = (other.inches * other.denom) + other.num
finaldenom = (self.denom * other.denom) % 64
finalnum = (newnum1 * newnum2) % 64
finalinches = (newnum1 * newnum2) // finaldenom
return RulerUnit(finalinches, finalnum, finaldenom)
ok danke für den Vorschlag, ich werde das nutzen –