检查元组是否在范围内

时间:2014-11-03 14:38:42

标签: python python-3.x comparison-operators

在我的关卡编辑程序中,我有以下代码,用于删除已移出可播放区域的游戏片段:

x, y = theobj.pos
if x not in range(0,79):
    level.remove_obj(theobj)
if y not in range(0,29):
    level.remove_obj(theobj)

有没有什么有效的方法可以简化为单个if语句?我已经考虑使用列表推导来生成所有有效位置元组的列表,但这看起来有点臃肿。

1 个答案:

答案 0 :(得分:3)

您可以使用:

if not (0 <= x <= 78 and 0 <= y <= 28):
    level.remove_obj(theobj)

这使用chained comparisons来测试xy的两个边界。

我不在这里创建range()个对象;您正在为每个测试创建一个新对象。

演示:

>>> x, y = 10, 10
>>> (0 <= x <= 78 and 0 <= y <= 28)
True
>>> x, y = 10, 42
>>> (0 <= x <= 78 and 0 <= y <= 28)
False
>>> x, y = 81, 10
>>> (0 <= x <= 78 and 0 <= y <= 28)
False