[Tutor] Doing this in reverse?

Kent Johnson kent37 at tds.net
Sun Sep 14 13:48:02 CEST 2008


On Sun, Sep 14, 2008 at 3:08 AM, Marc Tompkins <marc.tompkins at gmail.com> 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


More information about the Tutor mailing list