Randy Goldsmith
Randy Goldsmith

Reputation: 397

Need explanation of how function works printing digits in reverse

I cheated after giving up of how to figure out how to print digits backwards making a function for it but I still do not quite understand how it works. For instance why does it print the digits backwards and not in order?

def print_digits(n):
    """
      >>> print_digits(13789)
      9 8 7 3 1
      >>> print_digits(39874613)
      3 1 6 4 7 8 9 3 
      >>> print_digits(213141)
      1 4 1 3 1 2 
    """
    while n > 0:
        print n % 10
        n = n / 10 

I would appreciate a line by line explanation starting with the while loop. I've tried tracing it in my head and on paper but just can't grasp the code in the function.

Upvotes: 0

Views: 96

Answers (2)

chamathabeysinghe
chamathabeysinghe

Reputation: 868

% operator returns the remainder of division. (20%3=2,24%5=4). When you divide a number by 10 remainder is always the last digit. For example 123/10=12 & remainder is 3. So 123%10=3. Inside the while loop while n is greater than 0 the last digit of n is printed.

And because of the line n=n/10, n becomes n/10. Here integer division has used so finally value of n will become 0 and then the loop will stop.( if n is initially 123 value of n will change as 123,12,1,0 and then loop will stop.)

Upvotes: 0

mstuebner
mstuebner

Reputation: 434

In the first line in the loop the '%' operator devides the number given by 10 and returns the rest only, means the fraction of the division (25 : 10 = 2.5, so it returns the 5 only!).

The line 'n/10' then does exactly the other way around and stores part left of the comma into the variable itself, as the '/' operator returns only the left part of the comma.

In short you can say:

  1. n%10 returns only the rest of the divison
  2. n/10 "throws" the rest of the division away
  3. the code repeats

Upvotes: 1

Related Questions