2013-11-12 3 views
1

Есть ли способ проверить несколько переменных в одном диапазоне (x1, y1, x2, y2 в диапазоне ...)? Я хотел бы код, чтобы быть короче после ifТест для переменных с одинаковым диапазоном

mouv="7647" 
x1,y1,x2,y2=int(mouv[0]),int(mouv[1]),int(mouv[2]),int(mouv[3]) 
if len(mouv)==4 and x1 in range(8) and y1 in range(8) and x2 in range(8) and y2 in range(8): 
    print("code ok") 

ответ

2

Вот способ использования all:

mouv = "7647" 
# I cleaned this up too 
x1,y1,x2,y2 = map(int, mouv[:4]) 
if len(mouv)==4 and all(z in range(8) for z in (x1, y1, x2, y2)): 
    print("code ok") 

Обратите внимание, что если ваш диапазон огромен, вы должны использовать математические операторы языка Python вместо этого:

if len(mouv)==4 and all(-1 < z < 8 for z in (x1, y1, x2, y2)): 

С большими диапазонами, использование математических операторов происходит быстрее, чем выполнение x in range(n). Однако с небольшими диапазонами разница незначительна.

2

Использование all:

if len(muov) == 4 and all(int(x) in range(8) for x in mouv) 

Или если range огромен то лучше использовать прикованных операторы сравнения, как range создает список в памяти и медленно по сравнению с простым математическим сравнением:

if len(muov) == 4 and all(0 <= int(x) < 8 for x in mouv) 
+1

I есть предложение. 'if len (muov) == 4 и все (int (x) в диапазоне (8) для x в muov)'. Это избавит вас от вызова 'map' – Kevin

+0

@Kevin Да, это лучше, решение обновлено. –

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