Python 从for循环内的if开关返回

Python 从for循环内的if开关返回,python,Python,我正在尝试制作一个简单的游戏(针对raspberry pi Sense帽子),这个代码块检查一个像素是否被阻挡,这样玩家就不能在上面行走 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:

我正在尝试制作一个简单的游戏(针对raspberry pi Sense帽子),这个代码块检查一个像素是否被阻挡,这样玩家就不能在上面行走

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

这个代码产生了与我想要的相反的结果(我只能在地里行走)。切换
True
False
行很好,但是有人能解释一下原因吗?使用不在黑名单上的坐标
(0,5)
跟踪此代码,在我看来,它不应该正常工作,但它确实正常工作。

首先让我们简化一下:

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

当且仅当(x,y)在黑名单中时,它返回true。

您调用了函数
whitelist
,但代码在黑名单上循环,如果黑名单匹配,则返回
true
。如何使用此函数?底部的简化100%正确,尽管函数版本上的命名建议它应该是反向的(如果点不在
黑名单中,则返回
true
)。同样值得指出的是,如果黑名单
是在集合中定义的,而不是在列表中定义的,那么黑名单版本中的
点是O(1),从中添加/删除点也是如此。