Как найти количество значащих нулей питон

Eсть вот такой кусок кода
надо чтобы он при вводе числа в котором есть ноль, выдавал это кол-во нулей

def zero(value):
    x = 0
    if  value == '0':
        print(x)
        x = x + 1

F = input()

zero(F)

Не могу понять, что надо исправить

motpfofs's user avatar

motpfofs

1,2842 золотых знака9 серебряных знаков24 бронзовых знака

задан 1 дек 2020 в 10:49

Никита Пупкин's user avatar

3

def count_zeroes(n):
    return str(n).count('0')

ответ дан 1 дек 2020 в 10:53

USERNAME GOES HERE's user avatar

USERNAME GOES HEREUSERNAME GOES HERE

10.3k21 золотой знак25 серебряных знаков51 бронзовый знак

0

если надо работать только с числом:

num = -10203040506070809

count = 0
value = abs(num)

while value != 0:
    count += int(value % 10 == 0)
    value //= 10

print(count)

абсолютное значение берется, потому что -1 // 10 = -1 и цикл будет бесконечным для отрицательных чисел

если можно работать со строкой:

num = -10203040506070809

count = str(num).count('0')

print(count)

ответ дан 1 дек 2020 в 11:32

Zhihar's user avatar

ZhiharZhihar

36.9k4 золотых знака25 серебряных знаков67 бронзовых знаков

Если по честному работать с числом, то нужно делить:

def foo(n):
    if n < 0: 
        return foo(-n)
    i = 0
    while n:
        i += n % 10 == 0
        n //= 10
    return i

assert 3 == foo(10230240)

Для строки можно так:

def sfoo(sn):
    # if sn[0] == '-': return sfoo(sn[1:])
    # return sn.count('0')
    # len([*filterfalse(int, sn)])
    # return len([1 for d in sn if d == '0'])
    # return sum(d == '0' for d in sn)

    i = 0
    for d in sn:
        i += d == '0'

    return i

assert 3 == sfoo('10230240')

USERNAME GOES HERE's user avatar

ответ дан 1 дек 2020 в 11:03

vp_arth's user avatar

vp_arthvp_arth

27.1k2 золотых знака45 серебряных знаков76 бронзовых знаков

def f(n):
    return len(list(filter(lambda x: x == "0", str(n)))) 

ответ дан 1 дек 2020 в 11:11

Danis's user avatar

DanisDanis

19.1k5 золотых знаков20 серебряных знаков55 бронзовых знаков

1

I am trying to write a function that returns the number of trailing 0s in a string or integer. Here is what I am trying and it is not returning the correct values.

def trailing_zeros(longint):
    manipulandum = str(longint)
    x = 0
    i = 1
    for ch in manipulandum:
        if manipulandum[-i] == '0':
            x += x
            i += 1
        else:
            return x

Dharman's user avatar

Dharman

30.3k22 gold badges84 silver badges132 bronze badges

asked Dec 21, 2011 at 16:50

Friedrich Nietzsche's user avatar

3

For strings, it is probably the easiest to use rstrip():

In [2]: s = '23989800000'

In [3]: len(s) - len(s.rstrip('0'))
Out[3]: 5

answered Dec 21, 2011 at 16:53

NPE's user avatar

0

May be you can try doing this. This may be easier than counting each trailing ‘0’s

def trailing_zeros(longint):
    manipulandum = str(longint)
    return len(manipulandum)-len(manipulandum.rstrip('0'))

answered Dec 21, 2011 at 16:57

Abhijit's user avatar

AbhijitAbhijit

61.6k18 gold badges131 silver badges202 bronze badges

0

String-Methods a quite clearly answered – here is one with keeping the integer.
You can get it also with using modulo (%) with 10 in the loop, and then reduce your given number by dividing it by then in the next loop:

    def end_zeros(num: int):
        n = 0
        while num%10 == 0:
            n += 1
            num = num/10
            return n
        else:
            return 0

Without defining num as integer:

    def end_zeros(num):
        if num == 0:
            return 1
        elif num%10 == 0:
            n = 0
            while num%10 == 0:
                n += 1
                num = num/10
            return n
        else:
            return 0

answered May 16, 2021 at 19:45

Cabista's user avatar

1

Here are two examples of doing it:

  1. Using rstrip and walrus := operator. Please notice that it only works in Python 3.8 and above.

def end_zeros(num):
    return len(s := str(num)) - len(s.rstrip("0"))
  1. Using findall() regular expression (re) function:

from re import findall
    
def end_zeros(num):
    return len(findall("0*$", str(num))[0])

answered Jul 4, 2020 at 20:44

Vlad Bezden's user avatar

Vlad BezdenVlad Bezden

82.1k24 gold badges246 silver badges179 bronze badges

You could just:

  1. Take the length of the string value of what you’re checking
  2. Trim off trailing zeros from a copy of the string
  3. Take the length again, of the trimmed string
  4. Subtract the new length from the old length to get the number of zeroes trailing.

answered Dec 21, 2011 at 16:54

Sheridan Bulger's user avatar

if you want to count how many zeros at the end of your int:

   def end_zeros(num):
        new_num = str(num)
        count = len(new_num) - len(new_num.rstrip("0"))
        return count



    print(end_zeros(0))  # == 1
    print(end_zeros(1))  # == 0
    print(end_zeros(10))  # == 1
    print(end_zeros(101))  # == 0
    print(end_zeros(245))  # == 0
    print(end_zeros(100100))  # == 2

answered May 13, 2020 at 13:04

Kasem777's user avatar

Kasem777Kasem777

7077 silver badges10 bronze badges

You can use bitwise operators:

>>> def trailing_zeros(x):
...     return (x & -x).bit_length() - 1
... 
>>> trailing_zeros(0b0110110000)
4
>>> trailing_zeros(0b0)
-1

answered Dec 19, 2021 at 17:15

Be3y4uu_K0T's user avatar

Be3y4uu_K0TBe3y4uu_K0T

2784 silver badges9 bronze badges

3

I found two ways to achieve this, one is already mentioned above and the other is almost similar:

manipulandum.count('0') - manipulandum.rstrip('0').count('0')

But still, I’m looking for some better answer.

Shadow The Spring Wizard's user avatar

answered Feb 26, 2013 at 10:24

Kumar Varun's user avatar

0

The question asks to count the trailing zeros in a string or integer. For a string, len(s) - len(s.rstrip('0')) is fine. But for an integer, presumably you don’t want to convert it to a string first. In that case, use recursion:

def trailing_zeros(longint):
    assert(longint)
    return ~longint % 2 and trailing_zeros(longint/2) + 1

answered Nov 15, 2019 at 19:05

personal_cloud's user avatar

personal_cloudpersonal_cloud

3,8733 gold badges27 silver badges38 bronze badges

1

Here are two examples of doing it:

  1. Using rstrip and walrus := operator. Please notice that it only works in Python 3.8 and above.

    def end_zeros(num):
    return len(s := str(num)) – len(s.rstrip(“0”))

  2. Using re.findall() function:

    from re import findall

    def end_zeros(num):
    return len(findall(“0*$”, str(num))[0])

answered Jul 4, 2020 at 20:37

Vlad Bezden's user avatar

Vlad BezdenVlad Bezden

82.1k24 gold badges246 silver badges179 bronze badges

1

Характеристика задания

1. Тип ответа: запись числового значения.

2. Структура содержания задания: дано арифметическое выражение.

3. Уровень сложности задания: повышенный.

4. Примерное время выполнения: (3) минуты.

5. Количество баллов: (1).

6. Требуется специальное программное обеспечение: нет.

7. Задание проверяет умение работать с системами счисления, выполнять перевод десятичной записи числа в любую другую позиционную систему счисления. Проверяет знание признака делимости числа на основание системы счисления.

Пример задания (демоверсия (2022))

Значение арифметического выражения

3⋅438+2⋅423+420+3⋅45+2⋅44+1

записали в системе счисления с основанием (16). Сколько значащих нулей содержится в этой записи?

Как решать задание?

Задание можно посчитать вручную, но быстрее и надёжнее будет написать программу на Python.

Вспомнить общие сведения о системах счисления можно тут. 

Правила перевода из одной системы счисления в другую тут.

Вспомнить арифметические действия в позиционных системах счисления можно тут.

Основное, что нужно помнить при решении задания (14) — как отделить цифру от любого числа в любой системе счисления.

Например, для того чтобы отбросить последнюю цифру от числа (956), нужно разделить число (956) на (10) — основание системы счисления; получим (6).

На Python: (956)%(10) (=) (6).

А чтобы убрать последнюю цифру числа, а первые две оставить, воспользуемся целочисленным делением: (956//10=95).

Напишем программу

Скриншот 04-07-2022 235603.jpg

Запишем выражение как переменную (x).

(*) — умножение;

(**) — возведение в степень

Скриншот 04-07-2022 235615.jpg Обозначим переменную (c), которая будет являться счётчиком нулей, и зададим её начальное значение, равное нулю
Скриншот 04-07-2022 235650.jpg Запустим цикл с предусловием while (x > 0) (пока в нашем начальном числе есть цифры…)
Скриншот 04-07-2022 235703.jpg Берём последнюю цифру числа (x) с помощью остатка от деления (%)
Скриншот 04-07-2022 235714.jpg Если эта последняя цифра равна нулю, то увеличиваем счётчик на единицу
Скриншот 04-07-2022 235731.jpg Теперь отрежем эту последнюю цифру от числа, т. к. мы её уже сравнили
Скриншот 04-07-2022 235823.jpg

Запишем вывод.

Нам нужно узнать количество нулей, их мы считали в переменной (c)

Скриншот 04-07-2022 235842.jpg Запустим программу и увидим правильный ответ

Ответ: (15).

Напишите функцию, которая будет принимать число n и возвращать количество нулей, стоящих в конце факториала этого числа.

Формула факториала: n! = 1 * 2 * 3 * ... * n

Подсказка: не нужно вычислять факториал. Постарайтесь найти другой способ определения количества нулей.

Примеры

trailing_zeros(0) ➞ 0
# 0! = 1
# Нулей нет

trailing_zeros(6) ➞ 1
# 6! = 120
# 1 нуль в конце

trailing_zeros(1000) ➞ 249
# 1000! имеет 249 нулей в конце

Вариант решения

"""
1. Никакой факториал не будет иметь меньше нулей, чем факториал меньшего числа.

2. Каждое умножение на 5 добавляет 0 к факториалу. Поэтому сперва мы вычислим, какой наибольший множитель 5 меньше `n` (`n // 5`) и добавим к счетчику столько нулей.

3. Каждое умножение на 25 добавляет два нуля, так что далее мы мы добавим к счетчику столько нулей, сколько получится от целочисленного деления n на 25.

4. Продолжаем в том же духе для всех чисел, кратных 5 и меньших (или равных) n.
"""

def trailing_zeros(n):
    pow_of_5 = 5
    zeros = 0
    
    while n >= pow_of_5:
        zeros += n // pow_of_5
        pow_of_5 *= 5
        
    return zeros

Skip to content

Задача «Количество нулей»

Условие

Дано N чисел: сначала вводится число N, затем вводится ровно N целых чисел.

Подсчитайте количество нулей среди введенных чисел и выведите это количество. Вам нужно подсчитать количество чисел, равных нулю, а не количество цифр.

Решение задачи от разработчиков на Python:

Другие интересные реализации задачи:

Смотреть видео — Задача «Количество нулей» решение на Python

Делитесь с друзьями ссылкой на ответ и задавайте вопросы в комментариях! 👇

Related Posts

Посмотреть все комментарии
Marchello

В обоих решениях есть ошибка, либо показана неполная их часть. Нужно определить переменную num_zeroes

wpDiscuz

1

Оставьте комментарий! Напишите, что думаете по поводу статьи.x

Добавить комментарий