[Tutor] skipping ahead within a loop

Clay Wiedemann clay.wiedemann at gmail.com
Thu Mar 15 19:04:22 CET 2007


Thanks, this is not too much information at all. I am always happy with depth.

-c

On 3/15/07, Dave Kuhlman <dkuhlman at rexx.com> wrote:
> On Thu, Mar 15, 2007 at 03:35:27PM +0100, Rikard Bosnjakovic wrote:
> > On 3/15/07, Clay Wiedemann <clay.wiedemann at gmail.com> wrote:
> > > If  doing a loop, how can one skip forward a specific amount randomly
> > > determined within the loop?
> >
> > y = 0
> > while y < HEIGHT:
> >   linewidth = random(3, 9)
> >   # drawlines etc
> >   y += linewidth
> >
> > The reason why you cannot alter the for-variable beats me, though.
>
> The while-statement looks like a good solution to me.
>
> Two additional points:
>
> 1. You can alter the for-variable, *but* each time you go to the
>    top of the for-loop, that variable is set to the next item from
>    the iterator, wiping out any alteration.  Because of this, you
>    can modify and use that variable within the loop body without
>    having to worry about messing up the loop sequence.  What Clay
>    wants to do is mess with the sequencing of items in the loop.
>
> 2. The reason that modifying the for-variable does not change the
>    sequence of objects processed by the loop is that the
>    for-statement is generating a sequence of objects from an
>    iterator.  In this case the range function creates a list, which
>    the for-statement turns into an iterator.
>
> You don't even *want* to give Clay what he is asking for.  He asked
> about being able to jump forward in the loop or sequence.  If you
> were able to give him that one, he would come back and ask whether
> he could jump *backward* in the loop.
>
> For more on iterators, see "Iterator types" at
> http://docs.python.org/lib/typeiter.html.  Also see the "iter"
> function in "Built-in functions":
> http://docs.python.org/lib/built-in-funcs.html.
>
> You can think of the following:
>
>     def test2():
>         for item in range(4):
>             print item
>
> as syntactic sugar for this:
>
>     def test1():
>         myrange = range(4)
>         myiter = iter(myrange)
>         try:
>             while True:
>                 item = myiter.next()
>                 print item
>         except StopIteration, e:
>             pass
>
> Hoping this is not TMI (too much information), but sometimes it
> helps to understand what is going on underneath, because the for
> statement and iterators are very general, powerful,
> and elegant features of Python.
>
> Dave
>
>
> --
> Dave Kuhlman
> http://www.rexx.com/~dkuhlman
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>


-- 

- - - - - - -

Clay S. Wiedemann

voice: 718.362.0375
aim: khlav
wii: 3905 4571 6175 2469
twitter: seastokes


More information about the Tutor mailing list