[Tutor] Converting integers into digit sum (Python 3.3.0)

Wolfgang Maier wolfgang.maier at biologie.uni-freiburg.de
Mon Dec 9 10:46:47 CET 2013


Rafael Knuth <rafael.knuth <at> gmail.com> writes:

> 
> Hej there,
> 
> I wrote a program that converts an integer into a digit sum:
> 
> def DigitSum(YourNumber):
>     DigitList = []
>     YourNumber = str(YourNumber)
>     for i in YourNumber:
>         DigitList.append(int(i))
>     print(sum(DigitList))
> 
> DigitSum(55)
> 
> >>>
> 10
> 
> It actually works but I was wondering if that's the only way to solve
> the task of converting an integer into a digit sum?  I learned from
> past conversations on this mailing list that often times there is a
> better, more elegant and shorter way to write a program, and I was
> wondering if that's the case here.
> 
> Thanks!
> 
> Raf
>

Hi Raf,
your way is legitimate, but can be improved slightly through the use of
comprehensions as others have pointed out
(one side note though since you are asking specifically for Python 3.3:
you can simplify expressions like

sum([int(digit) for digit in str(55)])

to just:

sum(int(digit) for digit in str(55))

turning the comprehension into a generator expression.)



A different approach avoiding the str conversion and working only in the
domain of integer arithmetics would be:

def digsum (integer):
    s = 0
    while integer != 0:
        integer, remainder = divmod(integer, 10)
        s += remainder
    return s

>From a quick and dirty test, i.e.,
comparing:

for i in range(1000000):
    a=digsum(i)

and

for i in range(1000000):
    a=sum(int(c) for c in str(i))

the arithmetic solution also seems to be a bit faster.

Best,
Wolfgang




More information about the Tutor mailing list