2016-01-12 35 views
0

我有以下循环:如果语句始终计算为真,即使是假的

for tile_id, tile in corner_tiles.items(): 
     for neighbour in tile["neighbours"]: 
      if not (neighbour in enemy_tiles) and tile["player"] == None: 
       return tile_id 

其中: tile是在

{'counters': <number of counters on tile or None>, 
'player': <player id of the player who holds the tile or None>, 
'neighbours': <list of ids of neighbouring tile> 
} 

corner_tilesenemy_tiles形式的字典是字典的形式{<tile_id> : <tile>, ... }

 

循环总是返回tile_id无论neighbourenemy_tiles与否,但不若tile["player"]None。我一直试图弄清楚这一点,但似乎无法找到我出错的地方。

编辑:

我也曾尝试:

for tile_id, tile in corner_tiles.items(): 
    if tile["player"] is None: 
     for neighbour in tile["neighbours"]: 
      if neighbour not in enemy_tiles: 
       return tile_id 

作用一样。

+3

如有疑问,请添加括号。 –

+2

尝试'如果邻居不在enemy_tiles中,并且tile [“player”]为None:' - 习惯性Python FTW。 – thefourtheye

+0

@thefourtheye我知道'None'比'== None'更加pythonic,但是为什么'=='不行? –

回答

0

大的压力之后,我发现我的背后错误的原因很简单,我踢我自己失踪的这...

什么我的循环是应该做的是确保所有neighbours不在enemy_tiles。当然,它几乎每次都评估为真,因为第一个neighbour检查不在enemy_tiles中的可能性要高得多,所以声明为真,tile_id仅在检查一个neighbour后返回。

相关问题