以下python代码将导致打印n(14),因为for循环已完成.
for n in range(15):
if n == 100:
break
else:
print(n)
Run Code Online (Sandbox Code Playgroud)
但是,我想要的是与此相反.有没有办法做一个... else(或while ... else)循环,但只有在循环确实中断时才执行else代码?
非常简单的示例代码(仅用于演示,完全不使用):
repeat {
while (1 > 0) {
for (i in seq(1, 100)) {
break # usually tied to a condition
}
break
}
break
}
print("finished")
Run Code Online (Sandbox Code Playgroud)
我想从多个循环break中分离而不分别在每个循环中使用.根据关于python的类似问题,将我的循环包装到函数中似乎是一种可能的解决方案,即使用return()突破函数中的每个循环:
nestedLoop <- function() {
repeat {
while (1 > 0) {
for (i in seq(1, 100)) {
return()
}
}
}
}
nestedLoop()
print("finished")
Run Code Online (Sandbox Code Playgroud)
R中还有其他方法吗?也许类似于标记循环然后指定要中断的循环(如在Java中)?
必须有一种更好的方法来执行此操作...有什么想法吗?这是CS1的基本二十一点游戏。
2件困扰我的主要事情:
谢谢!任何帮助表示赞赏。
import random
import sys
# game, hand, deck
class Deck:
theDeck = []
card = 0
def createDeck(self):
for x in range(2, 15):
for y in range(1, 5):
self.theDeck.append(x)
def extractCard(self):
card = self.theDeck.pop(random.randrange(1, len(self.theDeck) - 1))
return card
class Game:
dealerTotal = [0, 0]
playerTotal = 0
deck = Deck()
deck.createDeck()
def reset(self):
self.dealerTotal = [0, 0]
self.playerTotal = 0
def dealerEnd(self):
if self.dealerTotal[0] == 21 or self.dealerTotal[1] == 21:
print("BLACKJACK! Game over.\n\nDEALER'S …Run Code Online (Sandbox Code Playgroud) 我知道这是非常低效和丑陋的代码,但如果我有三个for循环,嵌套在彼此内部如下:
for x in range(0, 10):
for y in range(x+1, 11):
for z in range(y+1, 11):
if ...
Run Code Online (Sandbox Code Playgroud)
我想打破两个内部循环,如果if语句为真,则继续执行外循环的下一次迭代.可以这样做吗?
我想知道如何从这样的循环出来:
for a in range(95):
for b in range(95):
for c in range(95):
for d in range(95):
...
do some computings
...
if condition:
task completed
Run Code Online (Sandbox Code Playgroud)
任务完成后,继续所有循环和计算.它们必须被打破,但我不知道 - "任务完成"之后的单个break语句将仅在for循环中结束,但它将再次被调用多次 - 所以我们什么也得不到.
在CI中会做a = b = c = d = 95,但在python中不起作用.当然我可以使用while循环,但后来我必须使用X + = 1语句,它看起来很糟糕.
有帮助吗?
关于循环:我使用它来使用暴力破解4-char密码.它不是一个真正的目的 - 仅用于测试.
好吧,最近,我遇到了一个有趣的问题.在潜在(实际上)无限递归序列中生成第n个值.这个特定的算法将在其成功的深度处至少10-15个堆栈引用.我的第一个想法是抛出看起来像这样的(C#)的SuccessException:
class SuccessException : Exception
{
public string Value
{ get; set; }
public SuccessException(string value)
: base()
{
Value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
然后做这样的事情:
try
{
Walk_r(tree);
}
catch (SuccessException ex)
{
result = ex.Value;
}
Run Code Online (Sandbox Code Playgroud)
然后我的思绪在这里徘徊,在那里我一遍又一遍地听到从未使用Exceptions进行流量控制.有没有借口?如果你要实现它,你将如何构建这样的东西呢?
break在大多数语言中中断for循环,但在嵌套循环的情况下,我从未遇到过第n次中断.
1.用任何语言都有这样的东西吗?
2.如果是这样,它的正确名称是什么?
如果没有,为什么?
NB.我不是在寻找解决方法.
关于第3点.我知道最接近的是goto,它不应该被使用,因为它会导致意大利面条代码(Python只在一个笑话模块中使用它),但这似乎是一个不同的问题,作为标记内部中断的布尔变量,捕获一个引发自定义错误或将块移动到一个函数以便与返回中断是更复杂的(在代码中的行号和变量方面).
(从理论的角度来看,这是一个好奇的问题,但如果它有帮助,我主要用Python,Matlab和JS编写代码.我知道Perl,Pascal和Basic,但我只知道C++的基础知识并且很少知道机器代码.)
这些循环集之间有什么区别?
for i in range(0,5):
print i,'i'
for x in range(0,4):
print x,'x'
break
Run Code Online (Sandbox Code Playgroud)
和
for i in range(0,5):
print i,'i'
for x in range(0,4):
print x,'x'
break
Run Code Online (Sandbox Code Playgroud)
break语句的范围是什么?
我正在解决Euler的项目,现在Triyn解决了9个任务。
我发现的解决方案是在3个嵌套循环中:
for ai in range(1, 100):
for bi in range(1, 100):
for ci in range(1,100):
if ai + bi + ci == 25 and ai * ai = ci:
break
Run Code Online (Sandbox Code Playgroud)
但是最后一次找到解决方案时,for循环仍在继续,我想破坏所有这些循环。 有可能吗?我想使用一些标志,但这是每个步骤的额外检查,并会使执行时间更长。
break ×6
python ×6
for-loop ×5
loops ×3
python-3.x ×2
algorithm ×1
blackjack ×1
continue ×1
control-flow ×1
exception ×1
goto ×1
if-statement ×1
methods ×1
nested-loops ×1
r ×1
while-loop ×1