Help printing the integers of a longer number

Discussion in 'Python' started by khaosyt, Mar 28, 2013.

  1. khaosyt

    khaosyt Guest

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

    For example:

    Enter a positive integer: 54321
    khaosyt, Mar 28, 2013
    1. Advertisements

  2. This looks familiar. Make the integer a string and use a for loop to
    iterate over each item
    Joel Goldstick, Mar 28, 2013
    1. Advertisements

  3. 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.

    Finally, when you're asking about homework, please be honest about it.
    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
    happy to help you learn, but we won't simply give you the answer.

    Chris Angelico, Mar 28, 2013
  4. 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:

    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

    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.
    Jussi Piitulainen, Mar 28, 2013
  5. 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 about that.
    Jussi Piitulainen, Mar 28, 2013
  6. An elegant solution, but buggy, I'm afraid... fortunately it's a
    trivial problem. The comparison should be left>0. :)

    Chris Angelico, Mar 28, 2013
  7. 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:
    # and continue.

    Chris Angelico, Mar 28, 2013
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.