Jason Swails wrote:
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).
while n: is plenty readable. n is either something or nothing, and
something evaluates to True, nothing 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 [...]
See above comment -- something or nothing, not mathematical identities.
def num_digits(n):
return len(str(n).replace('-','').replace('.',''))
Or typecast to an int if you want to neglect decimals before converting
to a string, etc.
Or use recursion!
>>> def num_digits(n):
... if n == 0:
... return 0
... else:
... return num_digits(n//10) + 1
...
>>> num_digits(1)
1
>>> num_digits(0)
0
0 is still one digit. ;)
~Ethan~
--
http://mail.python.org/mailman/listinfo/python-list