2015-12-07 201 views
5

我在退出以下while循環時遇到了問題。這是一個簡單的程序,如果隨機值大於5,則打印hello。程序運行良好,但是當我嘗試再次運行時,它會進入無限循環。如何退出while while循環?

from random import * 

    seed() 
    a = randint(0,10) 
    b = randint(0,10) 
    c = randint(0,10) 
    count = 0 

    while True: 
     if a > 5 : 
      print ("aHello") 
      count = count + 1 
     else : 
      a = randint(0,10) 
     if b > 5 : 
      print ("bHello") 
      count = count + 1 
     else : 
      b = randint(0,10) 
     if c > 5 : 
      print ("cHello") 
      count = count + 1 
     else : 
      c = randint(0,10) 

     if count == 20 : 
      count = 0 
      break 

    count = 0 
+1

您的目標是打印恰好20行的Hello行嗎? –

+1

你的邏輯是有缺陷的。考慮一個狀態 - count = 18,a = 6,b = 7,c = 9 - count將是21,你唯一的退出標準count = 20將永遠不會滿足你的無限for循環。你應該在每次增加計數後檢查計數值。 – OkezieE

+0

是的,我想要精確地打印20行你好 –

回答

1

以下代碼有幫助嗎?

while True: 
    if a > 5 : 
     print ("aHello") 
     count = count + 1 
     if count == 20 : 
      break 
    else : 
     a = randint(0,10) 
    if b > 5 : 
     print ("bHello") 
     count = count + 1 
     if count == 20 : 
      break 
    else : 
     b = randint(0,10) 
    if c > 5 : 
     print ("cHello") 
     count = count + 1 
     if count == 20 : 
      break 
    else : 
     c = randint(0,10) 

你必須每次遞增之後,檢查計數的值。

1

,因爲你增加一個迭代count 2〜3次,可跳過你的count == 20檢查

這裏有一個辦法讓整整20行。

from random import seed, randint 

seed() 
a = randint(0,10) 
b = randint(0,10) 
c = randint(0,10) 
count = iter(range(20)) 

while True: 
    try: 
     if a > 5: 
      next(count) 
      print ("aHello") 
     else: 
      a = randint(0,10) 
     if b > 5: 
      next(count) 
      print ("bHello") 
     else: 
      b = randint(0,10) 
     if c > 5: 
      next(count) 
      print ("cHello") 
     else: 
      c = randint(0,10) 
    except StopIteration: 
     break 

請注意,此代碼中仍有很多重複。將您的a,b,c變量存儲在list而不是作爲單獨的變量將允許代碼進一步簡化

+0

那麼我該如何避免這種情況呢? –

+0

@AbhayCn,你可以重複檢查你增加的每個地方的計數 –

8

您的while循環可能會將變量計數增加0,1,2或3.這可能會導致count從低於20的值去一個值超過20

例如,如果計數的值是18和發生以下情況:

a > 5, count += 1 
b > 5, count += 1 
c > 5, count += 1 

在這些操作之後,計的值將是18 + 3 = 21,這不是20.因此,條件值== 20永遠不會被滿足。

要修正這個錯誤,你可以替換行

if count == 20 

if count >= 20 

或只是改變while循環中的程序邏輯。

+0

但是如果我想要精確打印20行的Hello行呢? –

1

的「中斷」條件可能會失敗,如果變量的兩個或多個值ab,和c是大於5。在這種情況下,計數將遞增多於一次,計數將最終> 20,並該循環無法終止。你應該改變:

if count == 20 : 

if count >= 20: 
1

在迭代結束時,count可能大於20由於多次增量。所以我會更新最後一條if語句:

if count >= 20: 

感覺安全。

1

如果您的目標是在count>= 20時停止計數,那麼您應該在while循環中使用該條件,並且根本不需要中斷,因爲只有在循環結束時纔會中斷。

新while語句看起來像

while count < 20: 
    # increment count 

,然後while循環之外,你可以重新設置,如果你想再次使用它爲別的指望0