我需要在Python程序中模拟do-while循环.不幸的是,以下简单的代码不起作用:
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"
Run Code Online (Sandbox Code Playgroud)
而不是"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
']
Run Code Online (Sandbox Code Playgroud)
我能做些什么来捕获'stop iteration'异常并正确地打破while循环?
以下将伪代码示为可能需要这样的事物的示例.
状态机:
s = ""
while True :
if state is STATE_CODE :
if "//" in s :
tokens.add( TOKEN_COMMENT, s.split( "//" )[1] )
state = …
Run Code Online (Sandbox Code Playgroud) 当代码流是这样的:
if(check())
{
...
...
if(check())
{
...
...
if(check())
{
...
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
我一般都看到这个工作,以避免上面的凌乱的代码流:
do {
if(!check()) break;
...
...
if(!check()) break;
...
...
if(!check()) break;
...
...
} while(0);
Run Code Online (Sandbox Code Playgroud)
有哪些更好的方法可以避免这种解决方案/黑客攻击,从而使其成为更高级别(行业级别)的代码?
任何开箱即用的建议都是受欢迎的!
我已经用Java编程了好几年了,但我刚刚回到学校获得正式学位.我很惊讶地发现,在我上一次任务中,我使用了如下所示的循环而丢失了分数.
do{
//get some input.
//if the input meets my conditions, break;
//Otherwise ask again.
} while(true)
Run Code Online (Sandbox Code Playgroud)
现在我的测试我只是扫描一些控制台输入,但我被告知这种循环是不鼓励的,因为使用break
类似于goto
,我们只是不这样做.
我完全理解goto
和它的Java堂兄的陷阱break:label
,我很有意识不使用它们.我也意识到一个更完整的程序会提供一些其他的逃避手段,例如刚刚结束程序,但这不是我教授引用的原因,所以......
怎么了do-while(true)
?
在Bash中模拟do-while循环的最佳方法是什么?
我可以在进入while
循环之前检查条件,然后继续重新检查循环中的条件,但这是重复的代码.有更干净的方式吗?
我的脚本的伪代码:
while [ current_time <= $cutoff ]; do
check_if_file_present
#do other stuff
done
Run Code Online (Sandbox Code Playgroud)
check_if_file_present
如果在$cutoff
时间之后启动,这将不会执行,并且会执行.
do while
SQL Server 2008中是否有实现循环的方法?
我已经编程了一段时间(2年的工作+ 4.5年的学位+ 1年的大学预科课程),而且我从未使用过do-while循环而不是被迫参加编程入门课程.如果我从未遇到过如此根本的事情,我会越来越感觉我编程错了.
可能是因为我没有遇到正确的情况吗?
有哪些例子需要使用do-while而不是一段时间?
(我的学校教育几乎都是用C/C++编写的,我的工作是在C#中,所以如果有另一种语言绝对有意义,因为do-whiles的工作方式不同,那么这些问题并不适用.)
澄清......我知道a while
和a 之间的区别do-while
.在检查退出条件然后执行任务时.do-while
执行任务然后检查退出条件.
在浏览JavaJ版本的ForkJoinPool的代码时(我从Java 7中进行了一些有趣的更改),我遇到了这个构造(这里):
do {} while (!blocker.isReleasable() &&
!blocker.block());
Run Code Online (Sandbox Code Playgroud)
我正在努力为什么你会这样写,而不是只是
while (!blocker.isReleasable() &&
!blocker.block());
Run Code Online (Sandbox Code Playgroud)
它只是一个语义/可读性选择,因为你可以读取第一个结构do "nothing" while "conditions"
吗?或者我还缺少一些额外的好处?
我想知道如何编写do-while-style循环?
我发现这篇文章:
您可以使用repeat {}并检查使用if()的条件,并使用"break"控制字退出循环.
我不确定它究竟意味着什么.如果你了解它和/或你有不同的解决方案,有人可以详细说明吗?
如何做这样的代码groovy
?
do {
x.doIt()
} while (!x.isFinished())
Run Code Online (Sandbox Code Playgroud)
因为groovy中没有do ... while
语法.
目前还没有'do ... while()'语法.
由于含糊不清,我们还没有增加对Groovy的支持
参考文献:
以下语法有效:
while (int i = get_data())
{
}
Run Code Online (Sandbox Code Playgroud)
但以下不是:
do
{
} while (int i = get_data());
Run Code Online (Sandbox Code Playgroud)
我们可以通过标准草案N4140
第6.4节了解原因:
1 [...]
condition: expression attribute-specifier-seqopt decl-specifier-seq declarator = initializer-clause attribute-specifier-seqopt decl-specifier-seq declarator braced-init-list2条件规则既适用于选择陈述,也适用于
for
和while
陈述(6.5).[...]
和第6.5节
1迭代语句指定循环.
iteration-statement:while
( condition ) statementdo
statementwhile
( expression ) ;
相反,你被迫做一些丑陋的事情:
int i = get_data();
do
{
} while ((i = get_data())); // double parentheses sic
Run Code Online (Sandbox Code Playgroud)
这是什么理由?
do-while ×10
while-loop ×5
loops ×4
c++ ×3
java ×2
bash ×1
c ×1
c# ×1
declaration ×1
groovy ×1
python ×1
r ×1
repeat ×1
sql-server ×1