Turn число в строку и подсчитать количество '0'
символов:
def count_zeros(number):
return str(number).count('0')
Демо:
>>> def count_zeros(number):
... return str(number).count('0')
...
>>> count_zeros(49690101904335902069)
5
Или не превращая его в строку:
def count_zeros(number):
count = 0
while number > 9:
count += int(number % 10 == 0)
number //= 10
return count
последний подход - лот slower howe версия:
>>> import random
>>> import timeit
>>> test_numbers = [random.randrange(10 ** 6) for _ in xrange(1000)]
>>> def count_zeros_str(number):
... return str(number).count('0')
...
>>> def count_zeros_division(number):
... count = 0
... while number > 9:
... count += int(number % 10 == 0)
... number //= 10
... return count
...
>>> timeit.timeit('[c(n) for n in test_numbers]',
... 'from __main__ import test_numbers, count_zeros_str as c', number=5000)
2.4459421634674072
>>> timeit.timeit('[c(n) for n in test_numbers]',
... 'from __main__ import test_numbers, count_zeros_division as c', number=5000)
7.91981315612793
Чтобы совместить это с кодом, просто добавить функцию, и вызов отдельно; вы можете передать в результате digit()
непосредственно или сохранить результат первого, а затем передать его в:
print(count_zeros(digit(n)))
или отдельно (который позволяет показать получившийся случайное число тоже):
result = digit(n)
zeros = count_zeros(result)
print('result', result, 'contains', zeros, 'zeros.')
У вас есть ошибка за один раз в генерации цифр; используйте 'range_end' в randint(); конечное значение * включено *. –