def randrange(self, start, stop=None, step=1, int=int, default=None,
                  maxwidth=1L<<BPF, _BuiltinMethod=_BuiltinMethodType):
        """Choose a random item from range(start, stop[, step]).

        This fixes the problem with randint() which includes the
        endpoint; in Python this is usually not what you want.
        Do not supply the 'int', 'default', and 'maxwidth' arguments.
        """

        # This code is a bit messy to make it fast for the
        # common case while still doing adequate error checking.
        istart = int(start)
        if istart != start:
            raise ValueError, "non-integer arg 1 for randrange()"
        if stop is default:
            if istart > 0:
                if istart >= maxwidth and type(self.random) is _BuiltinMethod:
                    return self._randbelow(istart)
                return int(self.random() * istart)
            raise ValueError, "empty range for randrange()"

        # stop argument supplied.
        istop = int(stop)
        if istop != stop:
            raise ValueError, "non-integer stop for randrange()"
        width = istop - istart
        if step == 1 and width > 0:
            # Note that
            #     int(istart + self.random()*(istop - istart))
            # instead would be incorrect.  For example, consider istart
            # = -2 and istop = 0.  Then the guts would be in
            # -2.0 to 0.0 exclusive on both ends (ignoring that random()
            # might return 0.0), and because int() truncates toward 0, the
            # final result would be -1 or 0 (instead of -2 or -1).
            #     istart + int(self.random()*(istop - istart))
            # would also be incorrect, for a subtler reason:  the RHS
            # can return a long, and then randrange() would also return
            # a long, but we're supposed to return an int (for backward
            # compatibility).
            if width >= maxwidth and type(self.random) is _BuiltinMethod:
                return int(istart + self._randbelow(width))
            return int(istart + int(self.random()*width))
        if step == 1:
            raise ValueError, "empty range for randrange()"

        # Non-unit step argument supplied.
        istep = int(step)
        if istep != step:
            raise ValueError, "non-integer step for randrange()"
        if istep > 0:
            n = (width + istep - 1) / istep
        elif istep < 0:
            n = (width + istep + 1) / istep
        else:
            raise ValueError, "zero step for randrange()"

        if n <= 0:
            raise ValueError, "empty range for randrange()"

        if n >= maxwidth and type(self.random) is _BuiltinMethod:
            return istart + self._randbelow(n)
        return istart + istep*int(self.random() * n)
dataset/ETHPy150Open babble/babble/include/jython/Lib/random.py/Random.randrange/original