Как посчитать колличество нулей в конце числовой переменной?
num = 234500
zero_count = str(num)[::-1]
count = 0
for i in (range(0, len(zero_count))):
while zero_count[i] != '1':
count = count + 1
print(count)
Ответы (2 шт):
Автор решения: Сергей
→ Ссылка
Два варианта, чтобы уйти от бесконечного цикла. Коррекции пояснены в коде комментариями.
Вариант 1 (оптимальный из двух):
num = 100100
zero_count = str(num)[::-1]
count = 0
# Не нужен тут цикл for, а вместо i сам count и используем
while zero_count[count] == '0':
count = count + 1
print(count)
Вариант 2 (коррекция в изначальном цикле for):
num = 100100
zero_count = str(num)[::-1]
count = 0
for i in (range(0, len(zero_count))):
# Здесь нужен не бесконечный while, а if, если уж for использован
if zero_count[i] == '0':
count = count + 1
# А здесь прервать нужно, если условие не выполнено
else:
break
print(count)
Автор решения: Stanislav Volodarskiy
→ Ссылка
Можно обойтись без строк. Проверяем сколько раз число делится на 10 без остатка:
def zero_count(n):
c = 0
while n > 0:
n, d = divmod(n, 10)
if d != 0:
return c
c += 1
return 1
print(zero_count(0))
print(zero_count(1))
print(zero_count(10))
print(zero_count(100100))
$ python zero_count.py 1 0 1 2
Если доводить вариант со строками до ума:
def zero_count(n):
for i, d in enumerate(reversed(str(n))):
if d != '0':
return i
return 1
Регулярное выражение для подсчёта нулей в конце строки:
import re
def zero_count(n):
return len(re.search('0*$', str(n))[0])
P.S. Все варианты хороши для не слишком длинных чисел. Но если у вас действительно большое число и в нём много нулей, то есть способы лучше...