2017-04-26 64 views
0

我試圖用我自己的方法解決a + b + c = 1000和a^2 + b^2 = c^2找到a,b,c的乘積。爲什麼有必要在這個例子中打破?

我確實最終找到了自己的方法,但它讓我對另一個關於這件事情是如何工作的問題。

a= 1 
b= 2 
c= 997 
product = 0 

while a < 333: 
    while c > b: 
     if a**2 + b**2 == c**2: 
      product = a * b * c 
      break 
     else: 
      c += -1 
      b += 1 
    else: 
     a += 1 
     b = a + 1 
     c = 1000 - a - b 
    if product > 0: 
     break 

print (product) 

我第一次嘗試並不包括

if product > 0: 
    break 

出於某種原因,我的代碼將無法完成,並一直運行下去。所以我決定在工作結束時添加它。太棒了。但是,我想知道爲什麼休息是必要的。

找到答案後,不首先打破停止循環?爲什麼有必要在相同的條件下進行第二次休息?即使沒有休息,當它變成> 333時,它是不是應該自然地結束?

我剛開始學習python昨天請幫我改進:)。

+0

你爲什麼在內部'while'之後有一個浮動'else'? ....相應的「if」在哪裏? – depperm

+1

因爲['while while](https://docs.python.org/3/reference/compound_stmts。html#the-while-statement)可以有一個'else'語句:「如果表達式爲假(可能是第一次被測試)else子句的套件(如果存在)被執行,並且循環終止」 –

回答

4

從文檔:

break終止最近的封閉循環,跳過可選的else子句

這意味着只有你的內心while循環被中斷,您的外部時循環將無休止地繼續下去。


關於你的問題:

即使沒有休息,是不是想結束時,自然成爲一個> 333?

的問題是,當你break從內循環中,else部分沒有得到執行,所以你a保持不變。在外循環的下一次運行,該解決方案再被發現,打破了內部循環,而不是遞增a ...

+0

這真的很有用:) –

+0

OMGGG現在我知道哪裏錯誤THX很多 –

+0

增加了爲什麼循環永遠不會達到'a> = 333'。 –

1
while c > b: 
     if a**2 + b**2 == c**2: 
      product = a * b * c 
      break 
     else: 
      c += -1 
      b += 1 

break中斷內部循環,就好像說:我們發現我們所需要的,停止計算更多值。。在退出內部循環後,外部循環while將繼續循環。如果在內循環內if的條件爲false,則從cb中扣除1。此扣除將繼續執行,直到滿足條件:a**2 + b**2 == c**2(true),因此break得到執行或內部while循環標頭中的條件變爲false。

if product > 0: 
    break 

顯然,每當product是大於0,打破外環。

+0

感謝您的詳細解答! –

相關問題