Python

Как в Python задать условие

Условие: найти кол-во 6-значных чисел, кратных 5, в которых каждая цифра встречается 1 раз и никакие две четные и нечетные не стоят рядом
def yes(x):
~~digits = list(str(x))
~~if sum([digits.count(i) for i in digits]) == 6 and x % 5 == 0:
~~~~цифра = list(map(int, digits))
~~~~for i in range(5):
~~~~~~if (цифра [i] + цифра [i + 1]) % 2 == 0:
~~~~~~~~return 0
~~~~return 1
~~return 0
quantity = 0
for k in range(100000, 1000000, 5):
~~if yes(k): quantity += 1
print(quantity)
input()
# В первом ответе получаются ответы 1 и 1296. Второй ответ какой-то странный. А у меня получается тоже 1296. (•‿•)
Роман К.
Роман К.
29 440
Лучший ответ
def count(used = set(), digits = {0, 5}, level = 0):
~~if level > 5: return 1
~~result = 0
~~for i in (digits if level != 5 else digits - {0}) - used:
~~~~result += count(used | {i}, {0, 2, 4, 6, 8} if i % 2 else {1, 3, 5, 7, 9}, level + 1)
~~return result
print(count())

Число кратно 5, если последняя цифра числа 0 или 5.
Если текущая цифра числа чётная, значит стоящая от неё слева нечётная и наоборот.
Допустимый набор значений текущей цифры - digits
Цифры, которые уже встречались в числе - used
Номер позиции текущей цифры (начиная с 0) - level

А можно просто пройтись по всем числам, преобразовать число в список цифр и проверить, что все цифры разные и стоят в нужном порядке:

cnt = 0
for i in range(100000, 1000000, 5):
~~s = list(map(int, str(i)))
~~cnt += len(set(s)) == 6 and sum([(s[j] + s[j + 1]) % 2 for j in range(5)]) == 5
print(cnt)
Олег Олегович Маркин Жесть, и это 1 часть ЕГЭ.
вот как то так
А.
Азамат .
53 642
Олег Олегович Маркин И сколько чисел вывел?