On Sun, Sep 14, 2008 at 3:08 AM, Marc Tompkins <[EMAIL PROTECTED]> wrote:
> The built-in int() function does what you need - give it a string > representation of a number in any base 2-36; pass the base as the second > argument. The return is an integer - a pure, Platonic integer - which you > can then print in any base you choose. > If you omit the second argument (as you usually do), the base is assumed to > be 10. > The documentation says that if you pass 0 as the second argument, Python > will try to guess the base, but it didn't work when I tried it. The docs say, "If radix is zero, the proper radix is guessed based on the contents of string; the interpretation is the same as for integer literals." 'guessed' is not really a very good choice of words; 'determined' might be better. The last part of the sentence is the clue. With one argument, int() expects just the string representation of an int; any characters that are not digits are an error. For example: In [7]: int('0xaa') --------------------------------------------------------------------------- ValueError Traceback (most recent call last) /Users/kent/<ipython console> in <module>() ValueError: invalid literal for int() with base 10: '0xaa' If you pass 0 as the second argument, int() interprets the usual prefix for integer literals, and the above works: In [4]: int('0xaa', 0) Out[4]: 170 Also notice the difference here: In [5]: int('011') Out[5]: 11 In [6]: int('011', 0) Out[6]: 9 In the first case, the leading 0 has no special meaning and the result is 11. In the second case, the leading 0 is interpreted to mean 'octal' and the result is different. Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor