while循环具有多个条件,直到满足一个条件,在python中

时间:2015-02-08 06:50:25

标签: python while-loop multiple-conditions

ORIGINAL:

我尝试使用while循环检查两个条件,并在满足一个条件时停止。 我确切的需求是这样的

while integer1 AND integer2 > 0:
  # perform calculation and print results at each instance of the loop

改述: 我需要创建一个循环,直到两个数字中的一个变为零,并且每个循环的迭代期间每个数字都会改变。

对不起,如果我原来的措辞令人困惑,希望这更有意义。

3 个答案:

答案 0 :(得分:1)

我想可以使用:

while all([x > 0 for x in a,b,c]):
    be_happy()

...换句话说,您可以使用列表推导表达式并对其进行测试all()

对于只有两个变量,这有点迟钝。我只是使用:

while a > 0 and b > 0:

...但是对于两个以上我建议所有人。您可以使用如图所示的列表推导,也可以使用生成器表达式:

while all((x>0 for x in (a,b,c))):

...如图所示,在这种情况下似乎有必要将元组括在(括号中),而在我之前的例子测试中它是不必要的。

我个人认为列表理解略微可读。但这可能比任何事情都更主观。

另请注意,您可以使用any()内置的相当明显的替代语义。

答案 1 :(得分:0)

当你使用它们作为条件时,除了0之外的整数假设为True,所以实际上你有,并注意and(不是AND)操作数适用于链2条件!:

while True and integer2 > 0: 

而你需要:

while integer1 > 0 and integer2 > 0:

但是如果你想创建一个循环,直到两个数字中的一个变为零,你需要并且你需要在循环中规定你的整数!

while integer1 > 0 and integer2 > 0:
   #do stuff
   #for example integer1 -=1
   #integer2 -=1  

答案 2 :(得分:0)

上面的答案看起来好像会解决你的问题,但为了解释为什么你的代码不起作用,AND表达式的两面都被视为单独的条件,将变为true或false。你不是说“当integer1和integer2都大于零时”,你说,“虽然integer1不是假,而integer2大于零”。请注意,这是两个不同的条件。

在右边,当integer2大于零时,

integer2 > 0
对于该情况,

将变为True。然而,在左边,

integer1

是整个条件,当它不为零时它将变为真。见Python Truth Value Testing