Introducing the "for" loop

Bill BILL_NOSPAM at whoknows.net
Thu Oct 5 16:27:22 EDT 2017


Stefan Ram wrote:
> "ROGER GRAYDON CHRISTMAN" <dvl at psu.edu> writes:
>> On Wed, Oct 4, 2017 22:42 Stefan Ram (ram at zedat.fu-berlin.de) wrote:
>> Steve D'Aprano <steve+python at pearwood.info> writes:
>>>> So, "bottom-up" in this case means: iterators should be
>>>> taught before for-loops.
>>>> Why?
>> The easy answer here is to not use the range in the first for loop.
>    I never intended to use »range«. But I also will not use lists.
>
>    Very early in the course, I teach numeric and string literals:
>
> 1, 2.3, 'abc'
>
>    then come operators, functions and »if«, »while« and »try«.
>    But neither »range« nor lists have been shown so far.

As long as I have two teachers here, which textbooks are you using? I am 
hoping to teach a college course in Python next fall.

Thanks,
Bill



>
>    The basic course may already and there after about 12 - 18 hours.
>    (This time includes many exercises in the classroom.)
>
>    But if I have time to introduce »for«, I'll do it as follows
>    at this point in the course:
>
>    <now speaking like a teacher:>
>
>    We want to walk through (traverse) a string
>    character-by-character:
>
>    To do this we need a walker. A walker can be
>    obtained using »iter«:
>
> |>>> walker = iter( 'abc' )
>
>    Now, we can get character after character from the walker
>    using »next« (transcript simplified):
>
> |>>> next( walker )
> |'a'
> |>>> next( walker )
> |'b'
> |>>> next( walker )
> |'c'
> |>>> next( walker )
> |StopIteration
>
>    We can use »while« to automate this:
>
> def example():
>      walker = iter( 'abc' )
>      try:
>          while True:
>              print( next( walker ))
>      except StopIteration:
>          pass
>
>    A walker also is known as an /iterator/.
>
>    An object, one can get an iterator from
>    is called an /iterable object/.
>
>    Strings are iterable objects.
>
>    This for-loop does just what our previous
>    while-loop did:
>
> def example():
>      for ch in 'abc':
>          print( ch )
>
>    It gets an iterator from »'abc'« and then does the suite
>    repeatedly with »ch« being the result of a each »next«
>    call until StopIteration.
>
>    </end of "speaking like a teacher">
>
>    No »range«, no list.
>
>    (Yes, »print('\n'.join('abc'))« can do the same and will
>    be shown later in the course if there is still time.)
>




More information about the Python-list mailing list