This method is used to convert a rational number (which
may be an improper fraction) to a “mixed
fraction”. The general form of a mixed fraction
is a phrase of the form “
d” For example,
the improper fraction 22/7 is equivalent to the mixed
fraction “3 and 1/7”.
The result is returned as a string. There are three cases:
If the denominator is 1, we display just the whole-number part. Example: 17/1 becomes simply “17”.
If the whole-number part is zero but the fractional part is not, we'll display only the fractional part. Example: 5/6 becomes “5/6”, not “0 and 5/6”.
In the general case, there is both a whole-number part and a fractional part. Example: 22/7 becomes “3 and 1/7”.
First we find the whole-number part and the numerator of
the fractional part (the denominator of the fractional
part will be the same as the denominator of the original
rational). Python conveniently provides the
divmod() function, which provides both the
quotient and the remainder.
def mixed ( self ): """Render self as a mixed fraction in string form. """ #-- 1 -- # [ whole := self.n / self.d, truncated # n2 := self.n % self.d ] whole, n2 = divmod ( self.n, self.d )
Then we separate the three cases.
#-- 2 -- # [ if self.d == 1 -> # return str(self.n) # else if whole == zero -> # return str(n2)+"/"+str(self.d) # else -> # return str(whole)+" and "+str(n2)+"/"+str(self.d) ] if self.d == 1: return str(self.n) elif whole == 0: return "%s/%s" % (n2, self.d) else: return "%s and %s/%s" % (whole, n2, self.d)