2014-11-03 5 views
0

В моей программе редактирования уровня, я следующий код, который удаляет части игры, которые переместились из области воспроизведения:Проверяется кортеж находится в диапазоне

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? Я рассмотрел возможность использования списка, чтобы создать список всех допустимых кортежей позиции, но это кажется немного раздутым.

ответ

3

Вы могли бы использовать:

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

Это использует chained comparisons для проверки против двух границ для обоих x и y.

Я не создавал бы здесь 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 
+0

Это намного лучше - хотя я до сих пор распаковать кортеж. – Schilcote

+0

@Schilcote: вам все равно придется распаковывать или встроить. 'if not (0 <= theobj.pos [0] <= 78 и 0 <= theobj.pos [1] <= 28):' не так уж плохо. –

+0

или используйте лямбда –

Смежные вопросы