Короткая запись нескольких условий в if
if a >= 1 and a <= 100 and b >= 1 and b <= 100 and c >= 1 and c <= 100 and d >= 1 and d <= 100
Есть ли какой-то способ сделать эту запись более короткой?
upd.
if 1 <= a <= 100 and 1 <= b <= 100 and 1 <= c <= 100 and 1 <= d <= 100
Немного укоротил таким образом, но вопрос еще открыт, есть ли способ сделать код еще короче? Очень мозолит глаза.
Ответы (3 шт):
Автор решения: zaborschicov
→ Ссылка
Вот неплохой вариант
if all(1 <= i <= 100 for i in (a, b, c, d))
Мне кажется вполне себе красиво и коротко)
Автор решения: SergFSM
→ Ссылка
можно взять на вооружение еще такой способ:
import numpy as np
a,b,c,d = 10,20,30,40
x = np.array([a,b,c,d])
np.logical_and(1<=x, x<=100).all() # True
для данного примера это конечно не самый короткий вариант записи, но зато когда условий много, этот способ может быть полезен.
например, если надо проверить являются ли значения всех переменных >=1, <=100, и при этом одновременно являются кратными 4 и кратными 10:
a,b,c,d = 30,40,60,80
x = np.array([a,b,c,d])
np.logical_and((1<=x, x<=100),(x%4==0,x%10==0)).all() # False
Автор решения: vadim vaduxa
→ Ссылка
Если условие проверяется неоднократно, или оно сложное, то проще создать функцию и проверять вызывая ее
from itertools import zip_longest
check = lambda v, *z: all((q==w for q, w in zip_longest(v, z, fillvalue=z[-1])) if isinstance(z[0], int) else (x<=v<=y for v, (x, y) in zip_longest(v, z, fillvalue=z[-1])))
a, b, c, d = 80, 90, 100, 100
if check([a, b, c, d], [1, 100]): # True
pass # if a >= 1 and a <= 100 and b >= 1 and b <= 100 and c >= 1 and c <= 100 and d >= 1 and d <= 100
if check([a, b, c, d], [1, 100], [101, 200], [1, 100], [10, 120]): # False
pass # if a >= 1 and a <= 100 and b >= 101 and b <= 200 and c >= 1 and c <= 100 and d >= 10 and d <= 120
if check([a, b, c, d], 80, 90, 100): # True
pass # if a == 80 and b == 90 and c == 100 and d == 100
if check([a, b, c, d], 80): # False
pass # if a == 80 and b == 80 and c == 80 and d == 80