2015-02-08 98 views
1

ORIGINAL:While循环与多个条件,直到一个条件满足,在python

我想有一个while循环,检查两个条件,如果一个条件满足时停止。 我的确切需求的东西是这样的

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

的改写: 我需要运行,直到两个数字中的一个变成零,而且每个数字将在每次循环过程中更改循环。

对不起,如果我原来的措辞混乱,希望这更有意义。

+1

“但关闭,如果满足一个条件” - 听起来像你正在寻找一个'或' - 而不是'和' – alfasin 2015-02-08 06:54:27

+0

该代码段不工作?问题是什么?如果它没有做你想做的事,也许你应该用文字(而不是代码)来表达你想要做的事情。就像,“循环继续,而第一个整数大于零,第二个整数大于零。” – whiterook6 2015-02-08 07:04:42

回答

0

除了0的整数假定为True由蟒蛇当您使用它们作为条件所以实际上你有,并注意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 
+0

或者表示它会继续下去,直到两者都是否定的,我不认为这是问题的问题,尽管由于措辞,我不确定。 – whiterook6 2015-02-08 07:00:43

+0

如果整数1变得小于整数2但是仍然高于0,那么会不会闭环? – Aedus 2015-02-08 07:01:03

+0

@ user3759953如果你想创建一个循环,直到两个数字中的一个变为零,你需要'和',并且你需要在循环中判定你的整数! – Kasramvd 2015-02-08 07:12:53

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()作为相当明显或可选的语义。

0

上面的答案看起来像他们会解决您的问题,但要解释为什么你的代码不工作,AND表达式的两边都被视为单独的条件,并将成为真或假。你不是说“虽然整数1和整数2都大于零”,你说,“而整数1不是假而整数2大于零”。请注意,这是两个单独的条件。

在右侧,当整数2大于零,

integer2 > 0 

会变成真正的为条件。然而,在左边,

integer1 

是整个条件,并且当它不是零时它将变为真。请参阅Python Truth Value Testing

相关问题