On 2011-02-09, Michael Hrivnak <mhriv...@hrivnak.org> wrote:
> Your function only works if n is an integer.  Example:
>
>>>> num_digits(234)
> 3
>>>> num_digits(23.4)
> 325
>
> When doing integer division, python will throw away the remainder and
> return an int.  Using your example of n==44, 44/10 == 4 and 4/10 == 0
>
> Before each iteration of the while loop, the given expression (in this
> case just n) is evaluated as a boolean.  Your function would act the
> same if it looked like this:
>
> def num_digits(n):
>   count = 0
>   while bool(n):
>       count = count + 1
>       n = n / 10
>   return count
>
> 0 of course evaluates to False as a boolean, which is why the while loop 
> stops.
>
> Just for kicks, this function would work about as well:
>
> def num_digits(n):
>    return len(str(n))


What about this one:

import math
def num_digits(n):
   return int(math.ceil(math.log(n,10)))




-- 
When in doubt, use brute force.
                -- Ken Thompson
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to