как проверить числа из интервала (а;b) на чeредование четных и нечетных цифр?

517 просмотра
0
0 Комментариев

a = int(input("a="))
b = int(input("b="))
k = 0
i = a
while i < b:
    z = i
    if i > 0:
       p = 0
       while z != 0:
          p = z % 10
          z = z//10
          if p % 2 == 0:
             m = z % 10
             z = z // 10
             if m % 2 != 0:
                k += 1
                print(i)
             else:
                break
 
    i += 1
print(k)

интервал

a=1234
b=1245
(1235,1236,1237,1238,1239,1240,1241,1242,1243,1244)

числа в которых чередуются четные и нечетные цифры:

1236,1238
количество: 2


Добавить комментарий

2 Answers

Python Опубликовано 12.12.2018
0

Если преобразовать число в строку, то можно достаточно просто проверить число на чередование четных и нечетных цифр — заменяем каждую цифру на 1 если она четная или на 0 в противном случае. Далее проверяем строку на наличие повторяющихся единиц или нулей:

def chk(n):
    s = ''.join([str(int(int(x)%2==0)) for x in str(abs(n))])
    return ('00' not in s and '11' not in s)

потом просто просуммировать:

print(sum(chk(x) for x in range(a+1, b)))

напечатает:

2


функция для проверки на чередование четных и нечетных цифр в числе, написанная «в лоб» (без преобразования числа в строку):

def chk(n):
    n = abs(n)
    prev = None
    while (n > 0):
        n,b = divmod(n, 10)
        if prev is not None:
            if prev == (b % 2 == 0):
                return False
        prev = (b % 2 == 0)
    return True


при помощи регулярных выражений:

import re
 
def chk(n):
    return re.search(r'(?:[02468]{2,}|[13579]{2,})', str(abs(n))) is None

Добавить комментарий
0

Чтобы узнать чередуются ли чётные/нечётные цифры в числе, можно адаптировать простое рекурсивное решение (см. объяснение):

def interleaved_digits(n):
    def f(n, parity):
        return (n == 0) or (parity != (n & 1) and f(n // 10, not parity))
    return f(n // 10, n & 1)

Пример:

>>> [*filter(interleaved_digits, range(1234, 1245))]
[1234, 1236, 1238]
>>> len(_)
3

[/apcode]

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up