15.4. Arithmetic Methods

We will conclude this chapter by adding a few more methods to our Fraction class. In particular, we will implement arithmetic. To begin, consider what it means to add two fractions together. Remember that you can only add fractions if they have the same denominator. The easiest way to find a common denominator is to multiply the two individual denominators together. Anything we do to the denominator needs to the done to the numerator. This gives us the following equation for fraction addition:

a/b + c/d = (ad + cb)/bd

Our add method will take a Fraction as a parameter. It will return a new Fraction representing the sum. We will use the equation shown above to compute the new numerator and the new denominator. Since this equation will not give us lowest terms, we will utilize a similar technique as was used in the simplify method to find the greatest common divisor and then divide each part of the new fraction.

def add(self,otherfraction):

    newnum = self.num*otherfraction.den + self.den*otherfraction.num
    newden = self.den * otherfraction.den

    common = gcd(newnum,newden)

    return Fraction(newnum//common,newden//common)

You can try the addition method and then modify the fractions and retry.

 
1
def gcd(m, n):
2
    while m % n != 0:
3
        oldm = m
4
        oldn = n
5
6
        m = oldn
7
        n = oldm % oldn
8
9
    return n
10
11
class Fraction:
12
13
    def __init__(self, top, bottom):
14
15
        self.num = top        # the numerator is on top
16
        self.den = bottom     # the denominator is on the bottom
17
18
    def __str__(self):
19
        return str(self.num) + "/" + str(self.den)
20
21
    def simplify(self):
22
        common = gcd(self.num, self.den)
23
24
        self.num = self.num // common
25
        self.den = self.den // common
26
27
    def add(self,otherfraction):
28
29
        newnum = self.num*otherfraction.den + self.den*otherfraction.num
30
        newden = self.den * otherfraction.den
31
32
        common = gcd(newnum, newden)
33
34
        return Fraction(newnum // common, newden // common)
35
36
f1 = Fraction(1, 2)
37
f2 = Fraction(1, 4)
38
39
f3 = f1.add(f2)
40
print(f3)
41

(fractions_add1)

One final modification to this method will be quite useful. Instead invoking the add method, we can use the addition operator “+”. This requires that we implement another special method, this time called __add__. The details of the method are the same.

def __add__(self, otherfraction):

    newnum = self.num*otherfraction.den + self.den*otherfraction.num
    newden = self.den * otherfraction.den

    common = gcd(newnum, newden)

    return Fraction(newnum // common, newden // common)

However, now we can perform addition in the same manner that we are used to with other numeric data.

f1 = Fraction(1, 2)
f2 = Fraction(1, 4)

f3 = f1 + f2    # calls the __add__ method of f1
print(f3)

Note

This workspace is provided for your convenience. You can use this activecode window to try out anything you like.

3
 
1
2
3

(scratch_cl_02)

Next Section - 15.5. Glossary