4. digit_sum variations


I am just curious to see what solutions other users have come up with. Is mine the exact way the instructions ask it to be completed?

My code:

def digit_sum(n):
x = 0
a = str(n)
for i in a:
x += int(i)
return x


there are multiply ways to solve a problem, and none of them are perfect. There is rarely a perfect answer. There are multiple factors (readability, maintainability, efficiency and so on) which play a part.

Each solution has its pros and cons. Certain solution will certainly be better then others (more pros and less cons)


If anyone is interested in showing me alternative ways that they solved this, I think it would help benefit my understanding of different ways to solve these problems


If you want to see alternative ways, you can just google them. This has been a much solved problem

but its more fun to see if you can come up with another solution yourself.


I took the “convert the number into a string” route:

def digit_sum(n):
    total = 0
    n_list = []
    string_of_n = str(n)
    for x in string_of_n:
        n_list.insert(0, int(x))
        total = sum(n_list)
    return total


I would recommend coming back later to this solution and try to optimize it, which is possible in several ways.


You’re absolutely right. I was able to get it a smidge shorter (and more readable) after playing around with it a bit:

def digit_sum(n):
    total = 0
    all_nums = list(str(n))
    for each_num in all_nums:
        total += int(each_num)
    return total


why would you convert to list? we can also perfectly iterate over a string


My solution:

def digit_sum(n):
  n > 0
  dsum = 0
  for i in str(n):
    dsum = dsum + int(i)
  return dsum


Here’s my solution:

def digit_sum(n):
  result = 0
  for number in str(n):
    result += int(number)
  return result


Are we posting solutions only? I suppose i should join then. We could use math only, which saves us string/integer conversion:

def digit_sum(n):
    total = 0
    while n > 0:
        total += n % 10
        n = n // 10
    return total
print digit_sum(434)

or we could use a generator expression (which hands us the numbers one by one, not constructing a list in memory), which is effective:

def digit_sum(n):
    return sum(int(i) for i in str(n))
print digit_sum(434)

i think ideally, we should do the string conversion outside the loop:

def digit_sum(n):
    n = str(n)
    return sum(int(i) for i in n)
print digit_sum(434)

to ensure string casting to a string isn’t needed each iteration of the loop


This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.