[Tutor] script comparing two values - ASCII encoding error

Mic Forster micforster@yahoo.com
Wed Feb 26 21:49:02 2003


Hi Jeff,

What I sent you originally was all Python gave to me.
There was no traceback given. I also tried all your
suggestions below, including your personalised
function, but still to no avail. 

Confused, Mic


--- Jeff Shannon <jeff@ccvcorp.com> wrote:
> Mic Forster wrote:
> 
> >I repeated the code you recommended and had no
> >problem. All of the sudden this started happening:
> >
> 
> I don't see offhand anything that should be causing
> a UnicodeError.  Can 
> you give us the complete traceback that you're
> getting?  Those few lines 
> that precede the "UnicodeError: ..." bit can tell us
> a lot about where 
> your problem is...
> 
> However, I'd like to point out one thing...
> 
> >>>>def f(k, s):
> >>>>        
> >>>>
> >        return k / (1-k) * (1-k)**s / (1-(1-k)**s)
> >
> 
> You should probably add some parens to this -- as it
> is, it could be 
> read two different ways (depending on which has
> higher priority, 
> multiplication or division -- I can't remember
> offhand which is higher 
> priority, which says to me that relying on priority
> is a bad idea). 
>  Those two ways are:
> 
>    ( k / (1-k) ) * ( (1-k)**s / (1-(1-k)**s) )
> or
>     k / ( (1-k) * (1-k)**s) / (1-(1-k)**s)
> 
> I think the first is what you meant, but since I'm
> not certain which way 
> Python will read it, I'd recommend being explicit
> about it.
> 
> For that matter, your last subexpression,
> 1-(1-k)**s, is slightly vague 
> too -- should that be (1-(1-k))**s, or
> 1-((1-k)**s)??  I'm pretty sure 
> that Python will presume the latter, and I believe
> that that's what you 
> want, but it never hurts to add parens to make it
> explicit.  I'm a big 
> fan of using lots of parens in complicated
> mathematical expressions -- 
> extra parens don't hurt, and may make the intended
> order more clear.  
> 
> I'm also a big fan of using intermediate variables
> to split complicated 
> expressions into two or more lines, and I'd probably
> write the above 
> function like this:
> 
> def f(k, s):
>     subterm = (1-k)**s
>     return ( k / (1-k) ) * (subterm / (1-subterm) )
> 
> This makes the function a little easier to read, and
> also emphasises the 
> symmetry involved (and, as a side bonus, saves you
> time by calculating 
> the exponent only once).  Of course, this is really
> just a matter of 
> taste...
> 
> Jeff Shannon
> Technician/Programmer
> Credit International
> 
> 
> 
> _______________________________________________
> Tutor maillist  -  Tutor@python.org
> http://mail.python.org/mailman/listinfo/tutor


__________________________________________________
Do you Yahoo!?
Yahoo! Tax Center - forms, calculators, tips, more
http://taxes.yahoo.com/