Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
a dictionary of ranges
#5
Working with floats are annoying. So I change to Fraction.
from fractions import Fraction

def fract10(value, width):
    return Fraction(value, 10 ** width)

class FloatRange:
    def __init__(self, width, start, start_width, end=None, end_width=None, step=1):
        self.width = Fraction(10 ** width, 1)
        if end is None:
            self.start_width(10 ** self.width, 1)
            self.end_width = Fraction(10 ** start_width, 1)
            self.end = Fraction(start, 10 ** start_width)
            self.start = Fraction(1, self.width)
        else:
            self.start_width = Fraction(10 ** start_width, 1)
            self.end_width = Fraction(10 ** end_width, 1)
            self.start = Fraction(start, 10 ** start_width)
            self.end = Fraction(end, 10 ** end_width)

        self.step = Fraction(step, 10 ** width)
        self.start_range = self.start, self.end, self.step

    def __iter__(self):
        while self.start < self.end:
            yield float(self.start / self.width * self.start_width)
            self.start += self.step

    def __lt__(self, value, width):
        return Fraction(value, 10 ** width) <= self.start_range[0]

    def __gt__(self, value, width):
        return Fraction(value, 10 ** width) > self.start_range[1]

    def __contains__(self, value_tup):
        value, width = value_tup
        v = int(Fraction(value, 10 ** width) * self.width)
        s = int(self.start_range[0] * self.start_width)
        e = int(self.start_range[1] * self.end_width)
        step = int(self.step * self.width)
        return v in range(s, e, step) # or
        #return e > v >= s


if __name__ == "__main__":
    frange = FloatRange(3, 450, 2, 470 , 2)
    print((452, 2) in frange)
    print((452, 3) in frange)

    #for i in frange:
    #    print(i)
99 percent of computer problems exists between chair and keyboard.
Reply


Messages In This Thread
a dictionary of ranges - by Skaperen - Nov-29-2017, 01:53 AM
RE: a dictionary of ranges - by Windspar - Nov-29-2017, 01:45 PM
RE: a dictionary of ranges - by buran - Nov-29-2017, 02:47 PM
RE: a dictionary of ranges - by Windspar - Nov-29-2017, 04:13 PM
RE: a dictionary of ranges - by Windspar - Nov-29-2017, 09:23 PM
RE: a dictionary of ranges - by Skaperen - Nov-30-2017, 02:17 AM
RE: a dictionary of ranges - by buran - Nov-30-2017, 04:52 AM
RE: a dictionary of ranges - by Skaperen - Dec-01-2017, 04:10 AM
RE: a dictionary of ranges - by Windspar - Nov-30-2017, 05:56 PM
RE: a dictionary of ranges - by Windspar - Dec-02-2017, 07:40 PM
RE: a dictionary of ranges - by Windspar - Dec-02-2017, 11:29 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  [SOLVED] [loop] Exclude ranges in… range? Winfried 2 1,665 May-14-2023, 04:29 PM
Last Post: Winfried
  Delete all Excel named ranges (local and global scope) pfdjhfuys 2 2,022 Mar-24-2023, 01:32 PM
Last Post: pfdjhfuys
  Dictionary with ranges that have a float step value Irv1n 2 2,197 Apr-21-2021, 09:04 PM
Last Post: Yoriz
  Two operations in two ranges salwa17 3 2,267 Jun-22-2020, 04:15 PM
Last Post: perfringo
  iterating a list of ranges Skaperen 1 2,091 May-22-2019, 07:44 AM
Last Post: Gribouillis
  Subnet Mask Ranges ab52 0 1,867 Mar-11-2019, 10:39 AM
Last Post: ab52
  joined ranges Skaperen 4 3,286 Apr-03-2018, 07:14 PM
Last Post: Gribouillis
  compacting multiple ranges Skaperen 2 3,168 Oct-11-2017, 08:33 AM
Last Post: Skaperen

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020