2016-09-23 67 views
0

乾杯,我的問題是,我不知道如何做一段時間的多個條件。我真的,爲什麼這不會工作,不明白這一點:蟒蛇隨機,而多個條件

import random 

a = 0 
b = 0 
c = 0 

while a < 190 and b < 140 and c < 110: # <-- This condition here 
    a = 0 
    b = 0 
    c = 0 

    for i in range(1, 465): 
     v = random.randint(1, 3) 

     if v == 1: 
      a = a + 1 
     elif v == 2: 
      b = b + 1 
     else: 
      c = c + 1 

    result = "" 
    result += "a: " + str(a) + "\n" 
    result += "b: " + str(b) + "\n" 
    result += "c: " + str(c) + "\n" 

    print (result) 

我想這個循環直到高於上述高於110 140和c 190和B,但在第一次運行後,每次停止。

有人可以幫我嗎?

回答

4

你可以改變的邏輯略有並使用一個無限循環,你再break出當符合您的條件的:

while True: 
    # do stuff 
    if a >= 190 and b >= 140 and c >=110: 
     break 

如果條件的任何得到滿足你的原來的邏輯終止。例如,這個循環退出,因爲a不再True一次迭代後:

a = True 
b = True 
while a and b: 
    a = False 

這個循環是無限的,因爲b總是True

a = True 
b = True 
while a or b: 
    a = False 

你可以使用or而不是and您最初的while循環,但我發現break邏輯更直觀。

+0

我希望我每次都用0開始算法,所以總計不可能超過465。那就是我爲什麼這樣做的原因。順便說一句,這個答案做到了。你能告訴我爲什麼while-condition不起作用嗎? –

+0

@PatrickMlr如果滿足這些條件中的任何一個,你的初始'while'循環將會退出。例如,如果'a = 191',那麼循環將終止 –

+0

因此,在Python或?真奇怪。 –

1

您正在重置循環體中的a,bc。 試試這個:

>>> count = 0 
>>> while a < 190 and b < 140 and c < 110 and count < 10: # <-- This condition here 
... count += 1 
... a = 0 
... b = 0 
... c = 0 
... print(count, a, b, c) 
... 
(1, 0, 0, 0) 
(2, 0, 0, 0) 
(3, 0, 0, 0) 
(4, 0, 0, 0) 
(5, 0, 0, 0) 
(6, 0, 0, 0) 
(7, 0, 0, 0) 
(8, 0, 0, 0) 
(9, 0, 0, 0) 
(10, 0, 0, 0) 
>>> 
0

其實你只顯示「A,B,C」 while循環迭代時,你在每個循環增加465倍。這意味着如果你的while循環工作4次,它會隨機增加a,b,c,465 * 4次。而你的價值對於這種增量來說太小了。作爲一種解決方案,如果您將它設置爲250,則可以減少465個數字,您會看到它將工作到c達到110以上並完成迭代。

for i in range(1, 250): 
    v = random.randint(1, 3) 

250 c達到114並結束迭代。這是因爲250/3〜83。當數字隨機分配時,c是最常見的限制。我認爲你想要這樣的事情;

import random 

a = 0 
b = 0 
c = 0 

while a < 190 and b < 140 and c < 110: # <-- This condition here 
    v = random.randint(1, 3) 
    if v == 1: 
     a = a + 1 
    elif v == 2: 
     b = b + 1 
    else: 
     c = c + 1 

    result = "" 
    result += "a: " + str(a) + "\n" 
    result += "b: " + str(b) + "\n" 
    result += "c: " + str(c) + "\n" 

    print (result) 

它會告訴你每一個增量一個一個,當一些要求在while循環中滿足時它會停止。