0

私は Python を学んでいますが、以下のコード スニペットのフラグで何が起こっているのか理解できませんでした。if スイートでフラグを false に更新したので、else から false が出力されることを期待していますが、出力は true を示しています。誰かがここで何が起こっているのかを理解するのを手伝ってくれませんか.

objects=[1,2,3,4,5]
found_obj = None
for obj in objects:
    flag = True
    if obj == 3:
        found_obj = obj
        print("found the required object ",found_obj)
        flag= False

else:
    print ('Status flag ::', flag)

以下は、このコードを実行したときに得られる出力です

found the required object  3
Status flag :: True
4

3 に答える 3

3

flag = Trueすべての反復の最初に設定すると、obj が 5 に等しい最後の反復でtrue割り当てられた場所が出力されます。true

flag = Truefor ループから移動して修正することをお勧めします。

flag = True
for obj in objects:
    if obj == 3:
        found_obj = obj
        print("found the required object ",found_obj)
        flag= False
        break  # no need to continue search
于 2015-01-04T16:33:28.697 に答える
0

break-ing がオプションでない場合、これは修正されたコードです。

objects=[1,2,3,4,5]
found_obj = None
flag = True # flag is set once, before the loop
for obj in objects:
    # this sets the flag to True *on each iteration*, we only want it once!
    # flag = True 
    if obj == 3:
        found_obj = obj
        print("found the required object ",found_obj)
        flag= False
else:
    print ('Status flag ::', flag)

これは、オブジェクトのリストにある証言する単一の「証人」にのみ関心があるため、私が「 witness 」という名前で知っているループ構造のわずかなバリエーションです。この証人 (要素 3) を見つけたら。3

于 2015-01-04T16:33:37.170 に答える