FAQ: Learn Python - Practice Makes Perfect - digit_sum

This community-built FAQ covers the “digit_sum” exercise in Codecademy’s lessons on Python.

FAQs for the Codecademy Python exercise digit_sum:

Join the Discussion. We Want to Hear From You!

Have a new question or can answer someone else’s? Reply (reply) to an existing thread!

Agree with a comment or answer? Like (like) to up-vote the contribution!

Need broader help or resources about Python in general? Go here!

Want to take the conversation in a totally different direction? Join our wider discussions.

Learn more about how to use this guide.

Found a bug? Report it!

Have a question about your account, billing, Pro, or Pro Intensive? Reach out to our support team!

None of the above? Find out where to ask other questions here!

Not seeing your question? It may still have been asked before – try (search) in the top-right of this page. Still can’t find it? Ask it below by hitting the reply button below this post (reply).

Other FAQs

The following are links to additional questions that our community has asked about this exercise:

  • This list will contain other frequently asked questions that aren’t quite as popular as the ones above.
  • Currently there have not been enough questions asked and answered about this exercise to populate this FAQ section.
  • This FAQ is built and maintained by you, the Codecademy community – help yourself and other learners like you by contributing!

3 posts were split to a new topic: Practice makes perfect - digit sum

4 posts were split to a new topic: Why Do We Use Floor Division Here?

A post was split to a new topic: Solving digit sum using str()

def digit_sum(n):
sum = 0
while n > 1:
x = n/10.0
y = x - int(x)
y = y*10
sum += int(y)
n = x
return sum

Why is this not working? n = 434 should return 11 but my code is returning 10.

Just for curiosity, what if that 1 were a 0?

1 Like

Stick to integer operations, not float (digits are integers)
Looking at remainders is totally fine, but there are integer operations for doing that
And, after removing all remainders (digits) you’ll end up with 0, not 1, and definitely not something between 0,1 or 1,2 which may be a possibility as a result of rounding error
Whenever you do any kind of exact math, float probably isn’t what you want.

1 Like

I keep getting this:
Traceback (most recent call last):
File “python”, line 6, in <module>
File “python”, line 3, in digit_sum
TypeError: ‘int’ object is not iterable
I dont know what it means

you can’t loop over integers:

# error
for i in 123456:
  print i 

you can loop over a string:

for i in "123456":
   print i

so you could convert the integer to string, then you can loop

3 Likes

I am getting this error:
‘int’ type can’t have attribute ‘get_item’

Let us have a look at your code to see where this attribute error is occurring.

1 Like

Can someone tell me why I print 4 in my code below?

def digit_sum(n):
  total = 0
  str_n= str(n)
  for i in str_n:
    total=+ int(i)
  return total

print digit_sum(434)
1 Like

Your total=+ int(i) is assigning the value at int(i) to the variable named total. Since 4 is the last character it has a value of 4 at the end. You just need to switch =+ to +=.

2 Likes

ugh, duh. Those ■■■■ simple errors, thank you

You bet. Happens to all of us.

1 Like

why do we need to convert the integer to a string using str() in this excercise…?

@method1888576813, there are different ways to accomplish this task. One of them involves methods available to Python strings to split up the digits, one uses mod division, and there are surely others I have never heard of.

If the output requires an int, and you used string techniques,you must cast back to int before submitting.

2 Likes

Hi everybody,

Can someone tell my why this code works:

def digit_sum(n):
  m = str(n)
  c = [ ]
  t  = 0
  for i in m :
    c += i
  
  for x in c:
    
    t = t + int(x)
  return t


print digit_sum(1234)

But this one gives me this error (can only concatenate list (not “str”) to list):


def digit_sum(n):
  m = str(n)
  c = [  ]
  t = 0
  for i in m:
    c = c + i
  for b in c:
    
    t = t + int(b)
  return t

print digit_sum(1234)

Line 6 is where the diference is

i would use neither, for one because when adding items to list, .append() is preferred anyway

furthermore, the whole appending to list step is totally redundant, you can loop over over the string and add the numbers to t directly.