如果您想在变量foo!= 5时做某事,例如初始值为5。
有人知道这样做更干净吗? 一种方法是:
def try1():
foo = 5
aux = False
while (foo != 5) or (aux == False):
aux = True
foo = (random.randint(1,100) // (foo +1)) +1
print(foo)
答案 0 :(得分:3)
使用无限循环,如果条件在主体的末端为真,则该循环显式中断。
def try1():
foo = 5
while True:
foo = (random.randint(1,100) // (foo +1)) +1
print(foo)
if foo == 5:
break
答案 1 :(得分:1)
如果您正在寻找重复直到结构,那么Python中就没有这种结构。但是,您可以通过创建迭代器来获得类似的结果。然后,您可以在for _ in ...
语句中使用该迭代器来获取所需的行为。
def repeatUntil(condition):
yield
while not condition(): yield
foo = 5
for _ in repeatUntil(lambda:foo==5):
foo = (random.randint(1,100) // (foo +1)) +1
print(foo)
或者,如果您想表达延续条件而不是停止条件,则请重复repeatWhile()。 (在两种情况下,条件都将在循环结束时进行测试)
def repeatWhile(condition):
yield
while condition(): yield
foo = 5
for _ in repeatWhile(lambda:foo!=5):
foo = (random.randint(1,100) // (foo +1)) +1
print(foo)
请注意,此方法将提供对continue
的正确处理,而while True: ... if foo==5: break
则需要额外的代码(和额外的注意)。
例如:
foo = 5
while True:
foo = (random.randint(1,100) // (foo +1)) +1
if someCondition == True: continue # loop will not stop even if foo == 5
print(foo)
if foo == 5: break
[UPDATE] 如果您更喜欢使用while语句而不希望使用lambda:
,则可以创建一个loopUntilTrue()
函数来管理强制一般先通过:
def loopUntilTrue(): # used in while not loop(...):
firstTime = [True]
def loop(condition):
return (not firstTime or firstTime.clear()) and condition
return loop
foo = 5
reached = loopUntilTrue()
while not reached(foo==5):
foo = (random.randint(1,100) // (foo +1)) +1
print(foo)
请注意,您需要为每个while语句初始化loopUntilTrue()
的新实例。这也意味着您必须在使用此方法的嵌套while循环中使用不同的变量名(用于reached
)
您可以在退出条件下执行相同的操作:
def loopUntilFalse(): # used in while loop(...):
firstTime = [True]
def loop(condition):
return (firstTime and not firstTime.clear()) or condition
return loop
foo = 5
outcome = loopUntilFalse()
while outcome(foo!=5):
foo = (random.randint(1,100) // (foo +1)) +1
print(foo)
答案 2 :(得分:0)
另一种干净的方法是在循环之前对语句进行一次评估。
def try1():
foo = 5
foo = (random.randint(1,100) // (foo +1)) +1
print(foo)
while foo != 5:
foo = (random.randint(1,100) // (foo +1)) +1
print(foo)
这样,一次生成foo,然后进入循环。