<float>range(0.0,100.0,0.1)

Radovan Garabik garabik at melkor.dnp.fmph.uniba.sk.spam
Thu May 18 09:50:23 CEST 2000


 on 2000-05-17 15:57, Warren Postma (embed at geocities.com) wrote:
 : how do you do this:
 : 
 : for i in range(0.0, 100.0, 0.1):
 : print i


import UserList

class frange(UserList.UserList):
    """
    frange(stop) # assume start=0, step=1
    frange(start, stop) # assume step=1
    frange(start, stop, step)
    returns a list of values from start up to stop, with step step.
    Unlike range(), stop value is included in the list, if it is equal
    to the last value of the arithmetic sequence.
    If the returned list is too big, you may want to use xfrange class.
    This class is not resistant to rounding errors, e.g. on my computer:

>>> frange(0.7, 0, -0.1)
[0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1]
>>> frange(0.7, -0.05, -0.1)
[0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, -1.11022302463e-16]

    """

    def __init__(self, *args):
        l = len(args)
        if l == 1: # only to
            f = 0
            t = args[0]
            self.step = 1
        elif l == 2: # from, to
            self.start, self.stop = args
            self.step = 1
        elif l == 3:
            self.start, self.stop, self.step = args
        self.data = []
        k = (self.stop-self.start)/self.step+1
        self.data = map(lambda x, f=self.start, s=self.step: f+s*x, range(max(0, int(k))))

        
    def __repr__(self):
        return "frange(%i, %i, %i)" % (self.start, self.stop, self.step)

    def __str__(self):
        return str(self.data)

    def __len__(self):
        return len(self.data)

class xfrange:
    """
    xfrange(stop) # assume start=0, step=1
    xfrange(start, stop) # assume step=1
    xfrange(start, stop, step)
    Similar to frange, but constructs values on the fly, making it suitable
    for large sequences.
    Constructs values from start up to stop, with step step.
    Unlike xrange(), stop value is included in the list, if it is equal
    to the last value of the arithmetic sequence.
    This class is not resistant to rounding errors.
    """
    
    def __init__(self, *args):
        l = len(args)
        if l == 1: # only to
            f = 0
            t = args[0]
            step = 1
        elif l == 2: # from, to
            f, t = args
            step = 1
        elif l == 3:
            f, t, step = args
        self.length = max(0, int((t-f)/step+1)) # number of items
        self.start = f
        self.stop = t
        self.step = step

    def __getitem__(self, i):
        r = self.start+self.step*i
        if (self.step>0 and r<=self.stop) or (self.step<0 and r>=self.stop):
            return r
        raise IndexError, "index out of range"
        
    def __len__(self):
        return self.length
        
    def __str__(self):
        return str(frange(self.start, self.stop, self.step))

    def __repr__(self):
        return "xfrange(%i, %i, %i)" % (self.start, self.stop, self.step)



-- 
 -----------------------------------------------------------
| Radovan Garabik http://melkor.dnp.fmph.uniba.sk/~garabik/ |
| __..--^^^--..__    garabik @ melkor.dnp.fmph.uniba.sk     |
 -----------------------------------------------------------
Antivirus alert: file .signature infected by signature virus.
Hi! I'm a signature virus! Copy me into your signature file to help me spread!



More information about the Python-list mailing list