Digit sum help



I'm getting correct output but still getting error message:

Your function fails on digit_sum(6). It returns 0 when it should return 6.

def digit_sum(n):  #n is a number input
    counter = (len(str(n))-1)  #convrt 2 str, get(len - 1), used as counter and index 
    tempList = []  #variable = list... to contain extracted digit
    for i in range(counter):  
        while counter != -1: # while NOT TRUE/FALSE will execute
            n = str(n)  #convert int to string
            digit = n[counter]  #using "counter" as index, "digit" to store value
            tempList.append(int(digit))  #convert to int, append to list
            counter -= 1
    return sum(tempList) # sum(v), v needs to be int type
print digit_sum(12345)


your code fails for single digits, because length - 1 is zero, so counter is zero, then your for loop never runs


right. doesn't work in single digit.


any tips? do I need to scrap the whole code? I was trying to do it based on the first suggested hint... What did I do wrong?


well, you could of course check if length is one, but not really nice

Your code is pretty lengthy, you could scrap it and start again. You can just loop over a string version of n and append to list, or declare a variable total and give it a value of zero and add all values to total (also using for loop)


I got the answer from another post... I'm mentally dead.

for i in range(counter)... he used "i" as index and use a variable set to 0 then add all values to variable to total(just as you suggested)

did not think the solution would be that simple.



you don't even have to use range(), you can just do for i in str(n): which gives you access directly to the values of the list


hehe... feeling stupid right now. I spent a long time trying to come up with my code only to find a simple solution. It's a different way of thinking.

Paying my dues!

Thanks for the tip, I'll keep it in mind for next time.


for i in str(n) did not work for me...

"string indices must be integers, not str"


but then i contains the values from the list, no longer indexes, so you can add to total directly:

total += int(i)


ok, got it.
using i in range() gives indexes...
using i on int() gives values...
I'll go try it out... thanks again.


It worked.... Awesome!


going thru the instructions again and it already says to use str() and int()... so dumb!