猿问

在Python中模拟do-while循环?

在Python中模拟do-while循环?

我需要在Python程序中模拟do-while循环。不幸的是,以下简单的代码不起作用:

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

而不是“1,2,3,完成”,它打印以下输出:

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

我能做些什么来捕获'stop iteration'异常并正确地打破while循环?

以下将伪代码示为可能需要这样的事物的示例。

状态机:

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


繁星淼淼
浏览 1551回答 3
3回答

开心每一天1111

我不确定你要做什么。您可以像这样实现do-while循环:while&nbsp;True: &nbsp;&nbsp;stuff() &nbsp;&nbsp;if&nbsp;fail_condition: &nbsp;&nbsp;&nbsp;&nbsp;break要么:stuff()while&nbsp;not&nbsp;fail_condition: &nbsp;&nbsp;stuff()你在尝试使用do while循环打印列表中的东西是做什么的?为什么不使用:for&nbsp;i&nbsp;in&nbsp;l: &nbsp;&nbsp;print&nbsp;iprint&nbsp;"done"更新:你有一个行列表吗?你想继续迭代吗?怎么样:for&nbsp;s&nbsp;in&nbsp;l:&nbsp; &nbsp;&nbsp;while&nbsp;True:&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;stuff()&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;use&nbsp;a&nbsp;"break"&nbsp;instead&nbsp;of&nbsp;s&nbsp;=&nbsp;i.next()这看起来像你想要的东西吗?使用您的代码示例,它将是:for&nbsp;s&nbsp;in&nbsp;some_list: &nbsp;&nbsp;while&nbsp;True: &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;state&nbsp;is&nbsp;STATE_CODE: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;"//"&nbsp;in&nbsp;s: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokens.add(&nbsp;TOKEN_COMMENT,&nbsp;s.split(&nbsp;"//"&nbsp;)[1]&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state&nbsp;=&nbsp;STATE_COMMENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokens.add(&nbsp;TOKEN_CODE,&nbsp;s&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;state&nbsp;is&nbsp;STATE_COMMENT: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;"//"&nbsp;in&nbsp;s: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokens.append(&nbsp;TOKEN_COMMENT,&nbsp;s.split(&nbsp;"//"&nbsp;)[1]&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break&nbsp;#&nbsp;get&nbsp;next&nbsp;s &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state&nbsp;=&nbsp;STATE_CODE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;re-evaluate&nbsp;same&nbsp;line &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;continues&nbsp;automatically

慕妹3242003

这是一个模拟do-while循环的非常简单的方法:condition&nbsp;=&nbsp;Truewhile&nbsp;condition: &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;loop&nbsp;body&nbsp;here &nbsp;&nbsp;&nbsp;&nbsp;condition&nbsp;=&nbsp;test_loop_condition()#&nbsp;end&nbsp;of&nbsp;loopdo-while循环的关键特性是循环体总是至少执行一次,并且在循环体的底部评估条件。这里显示的控制结构完成了这两个,不需要异常或break语句。它确实引入了一个额外的布尔变量。

慕仙森

我下面的代码可能是一个有用的实施,强调的主要区别DO-而&nbsp;VS&nbsp;而据我所知。所以在这种情况下,你总是至少经历一次循环。first_pass&nbsp;=&nbsp;Truewhile&nbsp;first_pass&nbsp;or&nbsp;condition: &nbsp;&nbsp;&nbsp;&nbsp;first_pass&nbsp;=&nbsp;False &nbsp;&nbsp;&nbsp;&nbsp;do_stuff()
随时随地看视频慕课网APP

相关分类

Python
我要回答