2017-05-03 10 views
0

として設定されている場合でも、状態を停止しません:Booleanこのコードでは偽

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 ! 

プログラムの開発は、そのXを参照してくださいなぜ私は理解していない:私は次のような結果を得る

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) 

を。 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

ありがとう、それはworks.I実際に私の条件をループ内の関数(例えばASSESS_Tmin)でFalseに設定するとwhileループを壊す可能性があると思っていました。 – Akaaya

+0

私は最良の方法は、条件を検証し、ループ内でブレーク命令を使用することだと思う、別の方法は、例外を発生させ、上位のコンテキストでそれをキャッチすることです...しかし、私はこの場合に行うことをお勧めしません。もしあなたがPythonを学んでいるだけなら、多分あなたは休憩をとどめるべきです.... – DSLima90

+0

また、この答えが正しいと助けてくれたら、正しい答えとして受け入れることができますか? – DSLima90

関連する問題