Узнать количество нулей в конце числа. Что не так с моим кодом? Каким бы ни был ввод, вывод всегда равен «0»

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

i - это строка, поэтому вы должны сравнивать ее с «0», а не с 0. Измените if i == 0: на if i == «0»:

Emmanuel 20.03.2022 07:47

Строка никогда не может равняться числу 0.

MisterMiyagi 20.03.2022 07:47

Почему ты звонишь в сплит? Кроме того, не используйте int в качестве имени переменной: оно затеняет очень распространенную встроенную функцию. Кроме того, нарезка вашего списка имеет одну ошибку: второй индекс должен быть равен -1, чтобы посетить все элементы.

kcsquared 20.03.2022 07:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
63
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы должны указать аргумент в функции 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 20.03.2022 07:58

@JiříBaum Извините, я отредактировал код

user18511682 20.03.2022 08:04
Ответ принят как подходящий

Сделайте это вместо этого:

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]:

Jiří Baum 20.03.2022 07:54

В вашем ответе ошибка...

FLAK-ZOSO 20.03.2022 07:54

@FLAK-ZOSO Я не смог найти ошибку. Можете ли вы уточнить?

Jhanzaib Humayun 20.03.2022 07:58

Извините, виноват, ошибки нет, я в этом убедился из-за того обрыва, найдя ненулевое значение.

FLAK-ZOSO 20.03.2022 08:00

Просто чтобы завершить ответы, вы можете использовать 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

Другие вопросы по теме