[Tutor] String Replace..... [octal numbers]
Glen Wheeler
wheelege@tsn.cc
Mon, 29 Jan 2001 18:48:05 +1100
tiny tiny comment about octals....
----- Original Message -----
From: Danny Yoo <dyoo@hkn.eecs.berkeley.edu>
To: Budgester <budgester@budgester.com>
Cc: 'Tutor (E-mail)' <tutor@python.org>
Sent: Monday, January 29, 2001 10:55 AM
Subject: RE: [Tutor] String Replace..... [octal numbers]
> On Sun, 28 Jan 2001, Budgester wrote:
>
> > I'm new to Python as well, the reason I was using \012 was because
> > that's what was returned when i did a debugging print statement,
>
> Hmmm... let me go off on a tangent on '\012', and then go back to the
> original question.
>
> It turns out that Python thinks that '\012' and '\n' are the same thing:
>
> ###
> >>> '\n' == '\012'
> 1
> ###
>
> What's neat is that characters can be thought of as numbers. We can see
> this more clearly by using the ord() "ordinal" and chr() "character"
> functions, which let us explore this more:
>
> ###
> >>> ord('\n')
> 10
> >>> chr(ord('\n'))
> '\012'
> ###
>
> But at first, this is weird! Why is the ordinal value of '\012' equal to
> 10? Apparently, it's reversable, since we can go from a character back to
> its ordinal number back to its character, but where did that 10 come from?
>
> One way we can get 10 out of '\012' is like this:
>
> 10 = 1 * 8**1
> + 2 * 8**0
>
> That is, it has to do with "octal" numbers, that is, numbers that are
> represented in terms of powers of 8's. Python shows us the special
> characters (newlines, tabs, etc.) in octal. To tell the truth, I'm not
> quite sure why, but there's probably a good reason for it. *grin*
>
Pretty sure it was because the first ASCII tables were 128 characters
long, so could be easily represented with octal.
Told ya it was short :)
> Likewise, if we try something like this:
>
> ###
> >>> num = 0223
> >>> num
> 147
> ###
>
> We can see that:
>
> 147 = 2 * 8**2
> + 2 * 8**1
> + 3 * 8**0
>
> It's weird, but it's neat to see a glimpse of something a little foreign
> at times.
>
>
>
>
> Anyway, to go back to your original problem, the error that pops up:
>
> ###
> File "c:\python20\lib\string.py", line 363, in replace
> return s.replace(old, new, maxsplit)
> ###
>
> is really wacky, since that's part of the standard library. I think that
> another part of your code might have accidently touched string's version
> of replace(), so let's take a look at the full code.
>
>
> _______________________________________________
> Tutor maillist - Tutor@python.org
> http://mail.python.org/mailman/listinfo/tutor