Paul Rubin: > If you want to peel off digits from an int one by one without string > conversions, it's easiest to do that in reverse order: > > n = 961 > digits = [] > while n > 0: > n,d = divmod(n, 10) > digits.append(d) > > Look up the docs for "divmod" for an explanation of that handy function. > Now the above gives you a reversed list of digits--what to do with it > is an exercise for you ;-). Note that if n=0 then you get the empty list.
I think that with Psyco it's better to avoid divmod(). It's very positive to teach novices to always use tests every time they write a function, because it makes their programs less buggy and often allows them to solve the whole programming problem sooner: def reverse(n): """ Reverse the digits of integer n, ignoring trailing zeros. >>> reverse(12590) 9521 >>> reverse("abc") Traceback (most recent call last): ... TypeError: unsupported operand type(s) for divmod(): 'str' and 'int' >>> [reverse(x) for x in (0, 1, -1, 2, -2L, 100L, -100)] [0, 1, -1, 2, -2L, 1L, -1] >>> [reverse(x) for x in (125, 1250, 123456789)] [521, 521, 987654321] >>> [reverse(x) for x in (0.0, 1.0, -5.3, 125.0, 1.23456e20)] [0, 1.0, -5.2999999999999998, 521.0, 654321.0] >>> str(reverse(169883903200298309284038223098439430943092816286 ** 123))[:35] '65852401624276201339740994895755844' """ # code removed ... if __name__ == "__main__": import doctest doctest.testmod() print "Doctests done" Using tests (and a bit later to use a versioning system) is among the things that have to be taught as soon as possible :-) Bye, bearophile -- http://mail.python.org/mailman/listinfo/python-list