ORIGINAL:
我尝试使用while循环检查两个条件,并在满足一个条件时停止。 我确切的需求是这样的
while integer1 AND integer2 > 0:
# perform calculation and print results at each instance of the loop
改述: 我需要创建一个循环,直到两个数字中的一个变为零,并且每个循环的迭代期间每个数字都会改变。
对不起,如果我原来的措辞令人困惑,希望这更有意义。
答案 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