我需要模擬Python程序中的do-while循環。不幸的是,下面簡單的代碼不起作用:模擬Python中的do-while循環?
l = [ 1, 2, 3 ]
i = l.__iter__()
s = None
while True :
if s :
print s
try :
s = i.next()
except StopIteration :
break
print "done"
而不是「1,2,3,做了」,它輸出以下:
[stdout:]1
[stdout:]2
[stdout:]3
None['Traceback (most recent call last):
', ' File "test_python.py", line 8, in <module>
s = i.next()
', 'StopIteration
']
我能爲了趕做'停止迭代'異常並且正常打破 循環?
下面以僞代碼的形式顯示了可能需要這種事情的一個例子。
狀態機:
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
S.Lott:對於狀態機,請參閱示例代碼 – grigoryvp 2009-04-13 15:19:11
嗯......這不是一個合適的「do-while」;這只是一個「永遠做不到」。 「True」和「Break」有什麼不對? – 2009-04-13 15:43:48
S.洛特:我很確定他的問題是關於*如何在python中實現。所以,我不希望他的代碼是完全正確的。而且,他非常接近於做......而他正在檢查「永遠」循環結束時的狀況,看看他是否應該突圍。這不是「永遠做不到」。 – Tom 2009-04-13 18:43:54