[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