Easy function, please help.

Ethan Furman ethan at stoneleaf.us
Thu Feb 10 02:16:06 CET 2011


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~



More information about the Python-list mailing list