Hi,
I'm a newbie to python. I'm going through the wonderful 'how to think like a computer scientist tutorial' and I've come up with a question that I'm not sure how to get it to add the results at the end. Here's the question and my working so far :)

def sum_of_squares_of_digits(n):
    """
    >>> sum_of_squares_of_digits(1)
    1
    >>> sum_of_squares_of_digits(9)
    81
    >>> sum_of_squares_of_digits(11)
    2
    >>> sum_of_squares_of_digits(121)
    6
    >>> sum_of_squares_of_digits(987)
    194
    """
    sum = []
    squares = []
    num = []
    index = 0
    while n:
       num = n % 10
       squares = num*num
       n = n / 10
    sum += squares
    print sum
        
sum_of_squares_of_digits(987)

This would give you the sum of digits:

def sum_digits(n):
    total = 0
    for digit in str(n):
        total += int(digit)
    return total

Now expand this function so you multiply int(digit) with each other.
Notice that I didn't use 'sum' because sum() is a Python function.

while n:
       num = n % 10
       squares = num*num
       n = n / 10

"while n:" evaluates to True/False. If n==0, then it is False, otherwise True (for both positive and negative numbers). So you would have an infinite loop, except for the fact that that you are using integers, so a some point n will equal one and the next pass will round to zero using integers. Anyway, this is not a good way to do this as you missed an infinite loop by luck only, and hopefully you now understand while loops a little better.

Thanks so much sneekula and woooee. I guess I was trying to use a 'while' loop because in the tutorial 'for' loops was the next lesson. You've definately put me on the right track. Thanks

For a sequence with a finite length like you have in str(n), the for loop is ideal. Welcome to DaniWeb! Hope you have fun with Python programming!

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.