Python. Решить задачу. Спасибо заранее

def end_zeros_or_numbers(num: int) -> int:
    pass

if __name__ == '__main__':
    print("Example:")
    print(end_zeros(0))

    # These "asserts" are used for self-checking and not for an auto-testing
    assert end_zeros(0) == 1
    assert end_zeros(1) == 0
    assert end_zeros(10) == 1
    assert end_zeros(101) == 0
    assert end_zeros(245) == 0
    assert end_zeros(100100) == 2
    print("Coding complete? Click 'Check' to earn cool rewards!")

Я пробую сам решить задачу, но эту я не понял, КАК решать.. Я читал статьи на хабре как правильно решать. Я объяснил мысленно, мысленно созданному мною субъекту. И как бы я понял суть задачи. Вот задача. На функцию подаются числа переменной длины. Необходимо написать функцию, которая напишет, сколько нулей встречается в числе, НО, функция должна вывести эти числа, при условии, что они следуют друг за другом подряд, если такого числа нет, то просто вывести, сколько нулей в числе. Например: 1000000, функция должна вывести, что в числе 6 нулей. Другой пример: 10979000000, фунеция должна вывести, что в числе 6 нулей, так как они идут подряд. Примечания: Если существует число, к примеру: 10009000000, то вывод должен быть тоже шесть нулей, так как этих нулей больше чем в [10009]. Также данная функция может выводить и другие числа, которые идут подряд друг за другом. Использование регулярных выражений запрещается. Ребят, я знаю, что многим просто будет лень это делать, вы можете не писать код, просто напишите словами. Спасибо заранее.


Ответы (2 шт):

Автор решения: Serhii Khortiuk
>>> from itertools import zip_longest
>>> translate_table = dict(zip_longest(map(str, range(1, 10)), ",", fillvalue=","))
>>> num = "100100012300"
>>> print(len(max(num.translate(str.maketrans(translate_table)).split(","))))
... 3
>>> num = "100100"
>>> print(len(max(num.translate(str.maketrans(translate_table)).split(","))))
... 2
→ Ссылка
Автор решения: gil9red

Попробуйте itertools.groupby. Им удобно группировать подряд идущие символы.

Пример:

import itertools


def end_zeros(num: int) -> int:
    size = 0

    for x, items in itertools.groupby(str(num)):
        if x == '0':
            size = max(size, len(list(items)))

    return size


if __name__ == '__main__':
    assert end_zeros(10979000000) == 6
    assert end_zeros(1000000) == 6
    assert end_zeros(10009) == 3
→ Ссылка