-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprice_fraction.py
57 lines (48 loc) · 1.66 KB
/
price_fraction.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
"""
http://rosettacode.org/wiki/Price_fraction
A friend of mine runs a pharmacy.
He has a specialised function in his Dispensary application which
receives a decimal value of currency and replaces it to a standard value.
This value is regulated by a government department.
Task: Given a floating point value between 0.00 and 1.00,
rescale according to the following table:
>= 0.00 < 0.06 := 0.10
>= 0.06 < 0.11 := 0.18
>= 0.11 < 0.16 := 0.26
>= 0.16 < 0.21 := 0.32
>= 0.21 < 0.26 := 0.38
>= 0.26 < 0.31 := 0.44
>= 0.31 < 0.36 := 0.50
>= 0.36 < 0.41 := 0.54
>= 0.41 < 0.46 := 0.58
>= 0.46 < 0.51 := 0.62
>= 0.51 < 0.56 := 0.66
>= 0.56 < 0.61 := 0.70
>= 0.61 < 0.66 := 0.74
>= 0.66 < 0.71 := 0.78
>= 0.71 < 0.76 := 0.82
>= 0.76 < 0.81 := 0.86
>= 0.81 < 0.86 := 0.90
>= 0.86 < 0.91 := 0.94
>= 0.91 < 0.96 := 0.98
>= 0.96 < 1.01 := 1.00
"""
class PriceRescaler(object):
def __init__(self, table):
self.upperBoundPriceTuples = self.transform(table)
def transform(self, table):
pairs = []
for line in table.splitlines():
interval, result = line.split(":=")
upperBound = interval.split('<')[1]
pairs.append((float(upperBound), float(result)))
return pairs
def rescale(self, price):
for upperBound, result in self.upperBoundPriceTuples:
if price < upperBound:
return result
if __name__ == '__main__':
pt = PriceRescaler(__doc__.split("following table:")[-1].strip())
for n in range(101):
price = n / 100.0
print("%.2f -> %.2f" % (price, pt.rescale(price)))