# Help printing the integers of a longer number

K

#### khaosyt

I want to print the individual numbers of a large number using division and modulus division.

For example:

Enter a positive integer: 54321
5
4
3
2
1

J

#### Joel Goldstick

I want to print the individual numbers of a large number using division
and modulus division.

For example:

Enter a positive integer: 54321
5
4
3
2
1
This looks familiar. Make the integer a string and use a for loop to
iterate over each item

C

#### Chris Angelico

I want to print the individual numbers of a large number using division and modulus division.

For example:

Enter a positive integer: 54321
5
4
3
2
1

Python has two operators that can help here:

// for integer division - returns the quotient without the remainder
% for modulus - returns the remainder

You'll also want to use a while loop to continue gathering digits so
long as there's something left in the number.

And if you want the digits to come out in that order, you're probably
going to want to gather them into a list and then output them in
reverse. But start by ignoring that part and producing something that,
for the input 54321, produces 1, 2, 3, 4, and then 5.

We can tell, you're not putting one over us Better still, post your
non-working code and explain where you're having trouble; we'll be

ChrisA

J

#### Jussi Piitulainen

I want to print the individual numbers of a large number using
division and modulus division.

For example:

Enter a positive integer: 54321
5
4
3
2
1

Those numbers are called the digits of the large number.

With divmod(54321, 10) you get both the number that is "left" after
removing the last digit, and the last digit:
1

Define a function, print_digits(num), that prints the digits of the
non-negative integer num. Zero turns out fine so let's allow zero:

def print_digits(num):
left, last = divmod(num, 10)
if left < 0: print the digits of left
print(last)

How do you print the digits of left? With print_digits. Why does it
work? Because you only call print_digits again when left is closer to
zero than num.

It's called recursion.

J

#### Jussi Piitulainen

Jussi said:
Those numbers are called the digits of the large number.

With divmod(54321, 10) you get both the number that is "left" after
removing the last digit, and the last digit:

1

Define a function, print_digits(num), that prints the digits of the
non-negative integer num. Zero turns out fine so let's allow zero:

def print_digits(num):
left, last = divmod(num, 10)
if left < 0: print the digits of left
print(last)

Blush. That should be:

...
if left > 0: ...
...

(Or just "if left" because left will eventually be 0, positive numbers
are true values, and 0 is a false value.)

C

#### Chris Angelico

def print_digits(num):
left, last = divmod(num, 10)
if left < 0: print the digits of left
print(last)

How do you print the digits of left? With print_digits. Why does it
work? Because you only call print_digits again when left is closer to
zero than num.

It's called recursion.

An elegant solution, but buggy, I'm afraid... fortunately it's a
trivial problem. The comparison should be left>0.

ChrisA

C

#### Chris Angelico

Blush. That should be:

...
if left > 0: ...
...

(Or just "if left" because left will eventually be 0, positive numbers
are true values, and 0 is a false value.)

Sorry, I just nitpicked that very thing, hehe

Note that this doesn't work with negative numbers; it'll infinitely
recurse, due to divmod's behaviour. You'd need a special trap in there
to handle that:

if num<0:
print("-")
num=-num
# and continue.

ChrisA