Problem
From 2018 IMOK Cayley Q1:
How many 6 digit numbers are there where the digits are increasing, divisible by 6, and has the digits 3, 4 and 5?
Note that an increasing number is one that is not strictly decreasing. Hence, 11123 is also an increasing number.
Attempt
Let’s start with a procedural code:
def count1():
    res = []
    for i in range(100000, 1000000):
        if i % 6 != 0:
            continue
        if not increasing(i):
            continue
        if not contains345(i):
            continue
        res.append(i)
    return res
def increasing(x):
    c = 0
    for y in str(x):
        if int(y) < c:
            return False
        c = int(y)
    return True
def contains345(x):
    for i in '345':
        if i not in str(x):
            return False
    return True
Filtering
Previously we saw how to combine map into the comprehension. Now we combine filter predicates.
def count1():
    return [i for i in range(100000, 1000000) if i % 6 == 0 and increasing(i) and contains345(i)]
Using all
If we try and rephrase the predicate increasing, we can get the following:
def increasing(x):
    xstr = str(x)
    return all([xstr[i] <= xstr[i+1] for i in range(len(xstr)-1)])
def contains3452(x): 
    return all([i in str(x) for i in '345'])
Conclusion
all, exists are useful as a methods of constructing predicates.