On 09/02/2011 21:42, Jason Swails wrote:
You've gotten several good explanations, mainly saying that 0 -> False
and not 0 -> True, which is why the while loop exits.  You've also
gotten advice about how to make your method more robust (i.e. force
integer division).

However, as surprising as this may be I'm actually with RR on this one
(for a little) -- for code readability's sake, you should make your
conditional more readable (i.e. don't depend on the fact that the
iterations will take your test value down to 0 which conveniently in
this case evaluates to False).  This could encourage you in later cases
to think that if this result eventually converged to a different number,
say the multiplicative identity instead, that the same approach will
work (when instead it'll dump you into an infinite loop).

You've also gotten the suggestion of typecasting to a string and then
looking at the number of characters in the string.  This works fine for
integers and positive numbers, but not so well for negatives and floats,
since both the decimal and negative sign will be counted.  You could
typecast to a string then strip out '-' and '.' and then count the
characters.  i.e.

def num_digits(n):
    return len(str(n).replace('-','').replace('.',''))

Or:

def num_digits(n):
    return len(str(abs(n)).replace('.',''))

Or typecast to an int if you want to neglect decimals before converting
to a string, etc.

[snip]
Python doesn't have typecasting. :-)
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to