Sha256: af589c5b7e4fa1f299387990306d68c66d16aab140b18609141092b90ab11547

Contents?: true

Size: 1.6 KB

Versions: 71

Compression:

Stored size: 1.6 KB

Contents

from __future__ import division

from fractions import gcd


class Rational(object):
    """
    Toyish implementation of rational numbers. For production purpose,
    please use `fractions.Fraction` in standard library instead.
    """
    def __init__(self, numer, denom):
        self.numer, self.denom = self._reduce(numer, denom)

    def _reduce(self, numer, denom):
        if numer == 0:
            n, d = 0, 1
        else:
            g = gcd(numer, denom)
            n, d = int(numer/g), int(denom/g)
            if n > 0 and d < 0:
                n, d = -n, -d
        return n, d

    def __eq__(self, other):
        return self.numer == other.numer and self.denom == other.denom

    def __repr__(self):
        return '{}/{}'.format(self.numer, self.denom)

    def __add__(self, other):
        return Rational(
            self.numer*other.denom + self.denom*other.numer,
            self.denom*other.denom
        )

    def __sub__(self, other):
        return Rational(
            self.numer*other.denom - self.denom*other.numer,
            self.denom*other.denom
        )

    def __mul__(self, other):
        return Rational(self.numer * other.numer, self.denom * other.denom)

    def __truediv__(self, other):
        return Rational(self.numer * other.denom, self.denom * other.numer)

    def __abs__(self):
        if self.numer >= 0:
            return self
        else:
            return Rational(-self.numer, self.denom)

    def __pow__(self, power):
        return Rational(self.numer ** power, self.denom ** power)

    def __rpow__(self, base):
        return base ** (self.numer / self.denom)

Version data entries

71 entries across 71 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.179 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.178 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.177 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.176 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.175 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.174 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.173 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.172 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.171 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.170 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.169 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.167 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.166 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.165 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.164 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.163 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.162 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.161 tracks/python/exercises/rational-numbers/example.py
trackler-2.2.1.160 tracks/python/exercises/rational-numbers/example.py