title: How to create the divide method in Python
body: <p>How do I create the divide method in Python?</p>
  
  <p>This is my code:</p>
  
  <pre><code># Rational numbers
  
  def gcd(bigger, smaller):
      '''compute the greatest common divisor of two positive integers'''
      #print(' in gcd ')
      if not bigger &gt; smaller :
          bigger, smaller = smaller, bigger
      while smaller != 0:
          remainder = bigger % smaller
          #print('gcd calc, big:{}, small:{}, rem:{}'.format(bigger, smaller, remainder))
          bigger, smaller = smaller, remainder
      return bigger
  
  def lcm(a, b):
      '''calculate the least common multiple of two positive integers'''
      #print(' in lcm ')
      return (a*b)//gcd(a,b)
  
  
  class Rational(object):
      '''Rational with numerator and denominator. Denominator defaults to 1'''
  
      def __init__(self, numer, denom = 1):
          #print('in constructor')
          self.numer = numer
          self.denom = denom
  
      def __str__(self):
          '''String representation for printing'''
          #print(' in str ')
          return str(self.numer)  + '/'  +  str(self.denom)
  
      def __repr__(self):
          ''' Used in the interpreter. Call __str__ for now'''
          print(' in repr ')
          return self.__str__()
  
      def __add__(self, param_Rational):
          '''Add two Rationals'''
          if type(param_Rational) == int:
              param_Rational = Rational(param_Rational)
          if type(param_Rational) == Rational:
              # find the lcm
              the_lcm = lcm(self.denom, param_Rational.denom)
              # multiply each numerator by the lcm, then add
              numerator_sum = the_lcm*self.numer/self.denom + \
                          the_lcm*param_Rational.numer/param_Rational.denom
              return Rational( int(numerator_sum), the_lcm )
          else:
              print("Wrong type in addition method.")
              raise(TypeError)
  
      def __sub__(self, param_Rational):
          '''Subtract two Rationals'''
          #print(' in add ')
          # find the lcm
          the_lcm = lcm(self.denom, param_Rational.denom)
          # multiply each numerator by the lcm, then add
          numerator_sum = the_lcm*self.numer/self.denom - \
                      the_lcm*param_Rational.numer/param_Rational.denom
          return Rational( int(numerator_sum), the_lcm )
  
      def reduce_rational(self):
          '''Return the reduced fraction value as a Rational'''
          # find the gcd and divide numerator and denominator by it
          the_gcd = gcd(self.numer, self.denom)
          return Rational( self.numer//the_gcd, self.denom//the_gcd)
  
      def __eq__(self, param_Rational):
          '''Compare two Rationals for equalit and return a Boolean'''
          reduced_self  = self.reduce_rational()
          reduced_param = param_Rational.reduce_rational()
          return reduced_self.numer == reduced_param.numer and\
                 reduced_self.denom == reduced_param.denom
  
      def __mul__(self, param_Rational):
          ''' Multiply two Rationals '''
          if type(param_Rational) == int:
              param_Rational = Rational(param_Rational)
  
          if type(param_Rational) == Rational:
              #multiply
              denom_zero_check = self.denom
              second_denom_zero_check = param_Rational.denom
              if denom_zero_check &amp; second_denom_zero_check &gt; 0:
                  numer_mul = self.numer*param_Rational.numer
                  denom_mul = self.denom*param_Rational.denom
                  return Rational(int(numer_mul),int(denom_mul))
              else:
                  print("Denominator can't be zero.")
          else:
              print("Wrong type in subtraction method")
              raise(TypeError)
              """ """
  
      def __truediv__(self):           # &lt;-------- Here is where TypeError occurs #
          ''' Divide two Rationals '''
          if type(param_Rational) == int:
              param_Rational = Rational(param_Rational)
  
          if type(param_Rational) == Rational:
              #multiply
              denom_zero_check = self.denom
              second_denom_zero_check = param_Rational.denom
              if denom_zero_check &amp; second_denom_zero_check &gt; 0:
                  numer_mul = self.numer*param_Rational.denom
                  denom_mul = self.denom*param_Rational.numer
                  return Rational(int(numer_mul),int(denom_mul))
              else:
                  print("Denominator can't be zero.")
  </code></pre>
  
  <p>And I'm getting the error (location marked above): </p>
  
  <pre><code>TypeError: __truediv__() takes 1 positional argument but 2 were given 
  </code></pre>
  
  <p>How do I fix this?  I got the multiplication down but not the divide, should I use <code>div</code> or <code>truediv</code>?  And do I need to use <code>/</code> in the actual <code>div</code> method?</p>