[Tutor] for vs while
James
jtp at nc.rr.com
Fri Sep 28 17:08:41 CEST 2007
On Sep 28, 2007, at 10:59 AM, bob gailer wrote:
> James wrote:
>> All,
>>
>> I have a dumb question...hopefully someone can shed some light on
>> the difference between for and while in the situation below.
>>
>> I'm trying to iterate through a list I've created. The list
>> consists of a command, followed by a 'logging' message (a message
>> printed to a console or log file after the command is run).
>>
>> Here's a small snippet of code:
>>
>> # a list which includes (1) a command, and (2) something to be
>> dumped into a log file after the command runs
>> stuff = [ ["cat /etc/password"] , ["viewed /etc/password"] ]
>>
>> #works
>> i = 0 ; j = 1
>> while i < len( stuff ):
>> os.system( str( stuff[ i ] ) )
>> print stuff[ j ]
>> i += 1 ; j += 1
>>
>> The while loop does precisely what it should do: it runs the
>> first command using os.system(), and then prints out the string
>> in the second position of the list.
>>
>> Then I tried to do the same thing with a for loop that looks
>> logically equivalent. I replaced the while loop with this for loop:
>>
>> # doesn't work
>> for i in len( stuff ):
>>
> Try this:
>> for i in range(len(stuff)):
>>
>>
>> os.system( stuff[ i ] )
>> j = i + 1
>> print stuff[ j ]
>>
>> Python doesn't like it, though. It gives me the following error:
>>
>> Traceback (most recent call last):
>> File "<stdin>", line 1, in <module>
>> TypeError: 'int' object is not iterable
>>
>> What precisely causes this error? I come from a C background,
>> and while and for loops can be molded to do precisely the same
>> thing; it doesn't seem like this is the case in this scenario.
>>
>> Thoughts/ideas appreciated. :)
>>
> for expects, as the error says, an "iterable". range() provides an
> iterable. len() just gives an integer.
Great! I was under the impression that the range was implied, but I
guess not. ;)
> BTW I find it very hard to read code where there are spaces next to
> () and [].
I find it difficult to read code where there *aren't* spaces next to
the () and [] and there are several parenthesis/brackets next to each
other. :) Personal preference.
Thanks again.
More information about the Tutor
mailing list