Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to emulate a do-while loop?

I need to emulate a do-while loop in a Python program. Unfortunately, the following straightforward code does not work:

list_of_ints = [ 1, 2, 3 ] iterator = list_of_ints.__iter__() element = None  while True:   if element:     print element    try:     element = iterator.next()   except StopIteration:     break  print "done" 

Instead of "1,2,3,done", it prints the following output:

[stdout:]1 [stdout:]2 [stdout:]3 None['Traceback (most recent call last): ', '  File "test_python.py", line 8, in <module>     s = i.next() ', 'StopIteration '] 

What can I do in order to catch the 'stop iteration' exception and break a while loop properly?

An example of why such a thing may be needed is shown below as pseudocode.

State machine:

s = "" while True :   if state is STATE_CODE :     if "//" in s :       tokens.add( TOKEN_COMMENT, s.split( "//" )[1] )       state = STATE_COMMENT     else :       tokens.add( TOKEN_CODE, s )   if state is STATE_COMMENT :     if "//" in s :       tokens.append( TOKEN_COMMENT, s.split( "//" )[1] )     else       state = STATE_CODE       # Re-evaluate same line       continue   try :     s = i.next()   except StopIteration :     break 
like image 272
grigoryvp Avatar asked Apr 13 '09 06:04

grigoryvp


People also ask

How do you emulate a while loop in Python?

How to emulate a do while loop in Python. To create a do while loop in Python, you need to modify the while loop a bit in order to get similar behavior to a do while loop in other languages. As a refresher so far, a do while loop will run at least once. If the condition is met, then it will run again.

Can you simulate a for loop with a while loop?

You can simulate the FOR LOOP in SQL Server (Transact-SQL) using the WHILE LOOP.

Is there a do while loop in Python?

Python doesn't have do-while loop. But we can create a program like this. The do while loop is used to check condition after executing the statement. It is like while loop but it is executed at least once.


1 Answers

I am not sure what you are trying to do. You can implement a do-while loop like this:

while True:   stuff()   if fail_condition:     break 

Or:

stuff() while not fail_condition:   stuff() 

What are you doing trying to use a do while loop to print the stuff in the list? Why not just use:

for i in l:   print i print "done" 

Update:

So do you have a list of lines? And you want to keep iterating through it? How about:

for s in l:    while True:      stuff()      # use a "break" instead of s = i.next() 

Does that seem like something close to what you would want? With your code example, it would be:

for s in some_list:   while True:     if state is STATE_CODE:       if "//" in s:         tokens.add( TOKEN_COMMENT, s.split( "//" )[1] )         state = STATE_COMMENT       else :         tokens.add( TOKEN_CODE, s )     if state is STATE_COMMENT:       if "//" in s:         tokens.append( TOKEN_COMMENT, s.split( "//" )[1] )         break # get next s       else:         state = STATE_CODE         # re-evaluate same line         # continues automatically 
like image 187
Tom Avatar answered Sep 28 '22 13:09

Tom