2017-05-03 77 views
0

對於此代碼:布爾不停止的情況,即使設定爲假

for crop in database: 
    print("The current crop is :", crop) 
    x.all_crop_parameters_match_the_PRA_ones = True  

    while x.all_crop_parameters_match_the_PRA_ones : 

     ASSESS_Tmin(crop, x, PRA) 

     print("x.all_crop_parameters_match_the_PRA_ones = ", x.all_crop_parameters_match_the_PRA_ones) 

     ASSESS_Water(crop, PRA, x) 

     print("x.all_crop_parameters_match_the_PRA_ones = ", x.all_crop_parameters_match_the_PRA_ones) 

     ASSESS_pH(crop, PRA, x) 

我得到如下結果:

The current crop is : FBRflx 
Checking minimum Temperatures... 
x.all_crop_parameters_match_the_PRA_ones = False 

Checking the Water Resources... 
Verifying if the Water Resources match with the Tmin supported by the crop... 
x.all_crop_parameters_match_the_PRA_ones = False 

The soil pH of this PRA matches to the crop requirements. 
This crop is edible for the current PRA ! 

我不明白爲什麼PROGRAMM看到X。 all_crop_parameters_match_the_PRA_ones爲False,仍然運行下一個功能,而不是斷開循環並切換到下一個裁剪。

x是一個包含我使用和修改的所有變量的類,它是我的代碼的幾個函數。它可能是一個錯誤,因爲布爾來自一個類?

+0

它只停止的下一個循環...你想讓它在的中途停止執行代碼裏面呢?你必須明確的「break」來打破它......你發佈的內容看起來像預期的行爲。 – DSLima90

回答

0

您發佈的內容與我預期的行爲類似。 while循環將會重新評估,只有當它執行它裏面的所有代碼的條件...

如果你想同時代碼在中路突破,嘗試把遊:

for crop in database: 
    print("The current crop is :", crop) 
    x.all_crop_parameters_match_the_PRA_ones = True  

    while x.all_crop_parameters_match_the_PRA_ones : 

     ASSESS_Tmin(crop, x, PRA) 

     print("x.all_crop_parameters_match_the_PRA_ones = ", x.all_crop_parameters_match_the_PRA_ones) 

     if not x.all_crop_parameters_match_the_PRA_ones: 
      break 

     ASSESS_Water(crop, PRA, x) 

     print("x.all_crop_parameters_match_the_PRA_ones = ", x.all_crop_parameters_match_the_PRA_ones) 

     if not x.all_crop_parameters_match_the_PRA_ones: 
      break 

     ASSESS_pH(crop, PRA, x) 

請注意,這是在時間x.all_crop_parameters_match_the_PRA_ones == True的時間內進行循環。如果你想只執行一次內部while的代碼,而不是在一個循環中,你可以試試:

for crop in database: 
    print("The current crop is :", crop) 
    x.all_crop_parameters_match_the_PRA_ones = True  

    ASSESS_Tmin(crop, x, PRA) 

    print("x.all_crop_parameters_match_the_PRA_ones = ", x.all_crop_parameters_match_the_PRA_ones) 

    if not x.all_crop_parameters_match_the_PRA_ones: 
     continue 

    ASSESS_Water(crop, PRA, x) 

    print("x.all_crop_parameters_match_the_PRA_ones = ", x.all_crop_parameters_match_the_PRA_ones) 

    if not x.all_crop_parameters_match_the_PRA_ones: 
     continue 

    ASSESS_pH(crop, PRA, x) 
+0

非常感謝,它的工作原理。我實際上認爲在循環內的函數(例如ASSESS_Tmin)中將我的條件設置爲False可能會更早地破壞while循環:如果我理解的很好,那麼這是不可能的? – Akaaya

+0

我認爲最好的方法是驗證條件並在循環中使用break指令,另一種方法是引發異常並在上下文中捕獲它......但這不是我在這種情況下推薦做的。如果你只是學習python,也許你應該堅持休息...... – DSLima90

+0

另外,如果這個答案是正確的,並幫助你,你可以接受它作爲正確的答案嗎? – DSLima90

相關問題