Okay, not a very descriptive subject, but here goes...
This is the code
########################################### from decimal import Decimal as D """Everything is first converted to meters, and then converted to the unit you want to extend usage.
dic[unit] = (unittometers,meterstounit) """
dic = {## Metric ## 'm':(lambda x:x,lambda x:x), 'km':(lambda x:1000*x,lambda x:x/1000), 'cm':(lambda x:x/100,lambda x:100*x), 'mm':(lambda x:x/1000,lambda x:1000*x),
## English ## 'in':(lambda x:127*x/5000,lambda x:5000/(127*x)), 'ft':(lambda x:381*x/1250,lambda x:1250/(381*x)), 'mi':(lambda x:201168*x/125,lambda x:125/(201168*x)), 'yd':(lambda x:1143*x/1250,lambda x:1250/(1143*x)) }
def convert(num,unit1,unit2): num = D(str(num)) tometer = dic[unit1][0](num) frommeter = dic[unit2][1](tometer) return frommeter ####################################################
Fortunately my docstrings are getting slightly better, and you can at least tell that
the function "convert" first changes the value to meters then to the second unit.
This increases the number of conversions I can do to N! where N is the number of
known units, I'm guessing...
But, I digress--to the problem... If I call convert(3,'ft','yd'), I should get Decimal("1") instead, I get Decimal("1.195990046301080256481500617")
The first lambda function returns the number converted to meters, the second lambda function converts the number to the unit you want.
So, expanded -- convert is
def convert(num, unit1, unit2):
num = D(str(num))
tometer = dic[unit1][0] # a function that converts its argument to meters
frommeter = dic[unit2][1] # a function that converts its argument from meters to the unit you want
inmeters = tometer(num)
in_the_units = frommeter(inmeters)
return in_the_units
I have checked all of the lambdas I have defined...
x -ft- 12 -in- 2.54 -cm- m
def dic['ft'][0](x) = ---- X -------- X ----------- X ------- = 12*2.54*x/100 = 12*254*x/10000 = 381*x/1250
-ft- -in- 100 -cm-
Like that of above...
I just don't get where it goes from *okay* to 0.195990046301... margin error.
Can anyone help?
Jacob
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor