def end_zeros(int):
c = str(int)
d = c.split()
count = 0
for i in d[len(d):0:-1]:
if i == 0:
count = count + 1
else:
break
return (count)
печать (end_zeros (312124000400000))
#Выводит '0', а должно быть 5
Строка никогда не может равняться числу 0.
Почему ты звонишь в сплит? Кроме того, не используйте int
в качестве имени переменной: оно затеняет очень распространенную встроенную функцию. Кроме того, нарезка вашего списка имеет одну ошибку: второй индекс должен быть равен -1, чтобы посетить все элементы.
Вы должны указать аргумент в функции split
. Хотя это только удалит нули, чтобы вы не могли его подсчитать. Проверьте следующее:
n = 31210024000400000
s = str(n)
print(s.split("0")) #['3121', '', '24', '', '', '4', '', '', '', '', '']
Преобразуйте число в строку и подсчитайте нули в обратном порядке и прервите, когда появится первое ненулевое значение.
cntr=0
for ch in s[::-1]:
if ch == '0':
cntr+=1
else:
break
print(cntr)
Это также будет считать нули в середине числа...
@JiříBaum Извините, я отредактировал код
Сделайте это вместо этого:
def end_zeros(n):
d = str(n)
count = 0
for i in d[len(d):0:-1]:
if i == '0':
count += 1
else:
break
return count
Вам не нужно разбивать строку. И вы не можете сравнивать 0 с «0».
Редактировать: for i in d[::-1]:
тоже работает.
Я думаю, вам не нужна длина и 0 в срезе, вы можете просто использовать for i in d[::-1]:
В вашем ответе ошибка...
@FLAK-ZOSO Я не смог найти ошибку. Можете ли вы уточнить?
Извините, виноват, ошибки нет, я в этом убедился из-за того обрыва, найдя ненулевое значение.
Просто чтобы завершить ответы, вы можете использовать rstrip()
вместе с len()
здесь:
def end_zeros(n):
c = str(n)
return len(c) - len(c.rstrip('0'))
print(end_zeros('312124000400000')) # 5
Используя itertools.takewhile()
:
from itertools import takewhile
def end_zeros(n):
return sum(1 for _ in takewhile(lambda x: x == '0', reversed(str(n))))
Или, используя только встроенные функции (next()
и enumerate()
): Найдите индекс первого ненулевого символа перевернутой строки.
def end_zeros(n):
c = str(n)
return next((i for i, x in enumerate(reversed(c)) if x != '0'), len(c))
Манипуляции со строками кажутся довольно причудливым подходом к чему-то, что по сути является арифметикой. Я предлагаю:
def end_zeros(n):
c = 0
m = 10
while m <= n and n % m == 0:
c += 1
m *= 10
return c
print(end_zeros(312124000400000))
Выход:
5
Примечание:
Остается вопрос, каким должен быть ответ, если н равно нулю. Возможно, явный тест на нуль, возвращающий 1
i - это строка, поэтому вы должны сравнивать ее с «0», а не с 0. Измените if i == 0: на if i == «0»: