2015-02-08 291 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

相關問題