Короткая запись нескольких условий в 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
→ Ссылка