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