2016-08-28 16 views
-2

私は単純なゲーム(ラズベリーパイセンスHAT用)を作ろうとしています。このコードブロックは、ピクセルがブロックされているかどうかを調べて、 。forループ内のifスイッチから戻る

def whitelist(x,y): 
    for e in range(len(blacklist)): 
     item = blacklist[e] 
     cur_x = item[0] 
     cur_y = item[1] 
     if x == cur_x and y == cur_y: 
      return True 
    return False 

このコードは、私が望むものとは逆の結果をもたらします(私は地面の中を歩くことしかできません)。 TrueFalseの回線を切り替えると問題はありませんが、理由を説明してください。ブラックリストに載っていない座標(0,5)のこのコードに従えば、それは正しく動作するはずですが、そうでないようです。

+1

あなたは関数 'whitelist'を呼び出しましたが、コードは* blacklist *をループし、ブラックリストがマッチしたら' True'を返します。どのようにこの機能を使用していますか? –

答えて

1

まず者は、それを簡単にしましょう:

def whitelist(x,y): 
    for cur_x, cur_y in blacklist: 
     if x == cur_x and y == cur_y: 
      return True 
    return False 

がさらに簡素:

(x, y) in blacklist 

それは場合はtrueを返し、(x、y)がブラックリストにある場合にのみ。

+0

機能バージョンの命名はそれが逆でなければならないことを示唆していますが、最下位の簡略化では100%が正しいことを示しています(ポイントが 'blacklist'では*ではない場合はtrueを返します)。ブラックリストのポイントを指摘する価値は、 'blacklist'がリストではなくセットに定義されている場合、それを追加/削除する場合と同様にO(1)です。 – aruisdante

関連する問題