[Tutor] Re: Convert doesn't work... I'm stumped

Javier Ruere javier at ruere.com.ar
Wed Mar 16 05:27:01 CET 2005


Jacob S. wrote:
> Okay, not a very descriptive subject, but here goes...
> 
> This is the code
> 
> ###########################################
> from decimal import Decimal as D

   Oh come on!

> """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.

   The function has no docstring. You could place this description in 
the docstring with a description of the parameters and their spected type.

> But, I digress--to the problem...
> If I call convert(3,'ft','yd'), I should get Decimal("1")
> instead, I get Decimal("1.195990046301080256481500617")

   Let's see. First you convert to meters with 381*x/1250 so we get... 
Decimal("0.9144")! OK, then you convert to "yd" using 1250/(1143*x) so 
we get... Decimal("1.195990046301080256481500617"). Mmmmm... OK let's 
Google:
	3 feet = 0.9144 meters. All right!
	1 yard = 0.9144 meters. Aha! It should be x/0.9144 or 1250*x/1143 instead!

Javier

PS: Sorry if this was shown further ahead but I'm too lazy to read any more.
PPS: This may be a good oportunity to start using some sort of unit test.



More information about the Tutor mailing list