Eсть вот такой кусок кода
надо чтобы он при вводе числа в котором есть ноль, выдавал это кол-во нулей
def zero(value):
x = 0
if value == '0':
print(x)
x = x + 1
F = input()
zero(F)
Не могу понять, что надо исправить
motpfofs
1,2842 золотых знака9 серебряных знаков24 бронзовых знака
задан 1 дек 2020 в 10:49
3
def count_zeroes(n):
return str(n).count('0')
ответ дан 1 дек 2020 в 10:53
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
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')
ответ дан 1 дек 2020 в 11:03
vp_arthvp_arth
27.1k2 золотых знака45 серебряных знаков76 бронзовых знаков
def f(n):
return len(list(filter(lambda x: x == "0", str(n))))
ответ дан 1 дек 2020 в 11:11
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♦
30.3k22 gold badges84 silver badges132 bronze badges
asked Dec 21, 2011 at 16:50
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
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
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
1
Here are two examples of doing it:
- 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"))
- 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 BezdenVlad Bezden
82.1k24 gold badges246 silver badges179 bronze badges
You could just:
- Take the length of the string value of what you’re checking
- Trim off trailing zeros from a copy of the string
- Take the length again, of the trimmed string
- Subtract the new length from the old length to get the number of zeroes trailing.
answered Dec 21, 2011 at 16:54
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
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_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.
answered Feb 26, 2013 at 10:24
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_cloudpersonal_cloud
3,8733 gold badges27 silver badges38 bronze badges
1
Here are two examples of doing it:
-
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”)) -
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 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).
Напишем программу
Запишем выражение как переменную (x). (*) — умножение; (**) — возведение в степень |
|
Обозначим переменную (c), которая будет являться счётчиком нулей, и зададим её начальное значение, равное нулю | |
Запустим цикл с предусловием while (x > 0) (пока в нашем начальном числе есть цифры…) | |
Берём последнюю цифру числа (x) с помощью остатка от деления (%) | |
Если эта последняя цифра равна нулю, то увеличиваем счётчик на единицу | |
Теперь отрежем эту последнюю цифру от числа, т. к. мы её уже сравнили | |
Запишем вывод. Нам нужно узнать количество нулей, их мы считали в переменной (c) |
|
Запустим программу и увидим правильный ответ |
Ответ: (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
В обоих решениях есть ошибка, либо показана неполная их часть. Нужно определить переменную num_zeroes