Why do I require an "elif" statement here?

John Machin sjmachin at lexicon.net
Sun Aug 6 18:51:37 EDT 2006


danielx wrote:
> No offense. I didn't mean there was anything wrong with your way, just
> that it wasn't "neat". By that, I meant, you were still using lots of
> for loops and if blocks.
>
> Justin  Azoff wrote:
> > danielx wrote:
> > > I'm surprised no one has mentioned neat-er, more pythonic ways of doing
> > > this. I'm also surprised no one mentioned regular expressions. Regular
> > > expressions are really powerful for searching and manipulating text.
>
> I suppose I put those things too close together. I meant I was
> surprised for each of the two Separate (non)occurances.

And what would regexes give you? A Pythonic way of calculating the
number of leading spaces??? N.B. in your (mis)reading of the OP's
intent, you don't need/use the number of leading spaces.


> >
> > > Anyway, here's my solution, which does Not use regular expressions:
> > >
> > > def reindent(line):
> > >     ## we use slicing, because we don't know how long line is
> > >     head = line[:OLD_INDENT]
> > >     tail = line[OLD_INDENT:]
> > >     ## if line starts with Exactly so many spaces...
> > >     if head == whitespace*OLD_INDENT and not tail.startswith(' '):
> > >         return whitespace*NEW_INDENT + tail
> > >     else: return line    # our default
> > [snip]
> >
> > This function is broken.  Not only does it still rely on global
> > variables to work, it does not actually reindent lines correctly.  Your
>
> It's just an illustration.

An illustration of ... what?

>
> > function only changes lines that start with exactly OLD_INDENT spaces,
> > ignoring any lines that start with a multiple of OLD_INDENT.
>
> Maybe I misread, but that's what I thought he wanted.

(a) Such a requirement is rather implausible.
(b) No "maybe":

                 x = line.count(whitespace*OLD_INDENT,0,i)
                # Reindent lines that have exactly a multiple of
OLD_INDENT.
                if x > 0 and (i-1)%OLD_INDENT == 0:
                    output.write(whitespace*NEW_INDENT*x+line.lstrip())


> Did you not see
> my code comments expressing that very intent?

Those comments merely documented the brokenness.

> Anyway, it wouldn't be
> that hard to modify what I gave to do multiple replacement: just add a
> recursive call.

... which would make it uglier.




More information about the Python-list mailing list