O. Двоичная статистика!

У программистов особые отношения с двоичной системой счисления.
Продолжим тренировки в статистической обработке данных и проанализируем данные числа.
Напишите программу, которая для переданных чисел вычисляет:

  • количество разрядов;
  • количество единиц;
  • количество нулей.

Формат ввода

Вводится последовательность чисел, записанных через пробел.

Формат вывода:

Вывести список словарей с требуемой статистикой.

Примечание

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

Пример

Ввод

5 8 12

Вывод

[
    {
        "digits": 3,
        "units": 2,
        "zeros": 1
    },
    {
        "digits": 4,
        "units": 1,
        "zeros": 3
    },
    {
        "digits": 4,
        "units": 2,
        "zeros": 2
    }
]

Ввод

13 2 7

Вывод

[
    {
        "digits": 4,
        "units": 3,
        "zeros": 1
    },
    {
        "digits": 2,
        "units": 1,
        "zeros": 1
    },
    {
        "digits": 3,
        "units": 3,
        "zeros": 0
    }
]

Решение

Считываем строку и разбиваем ее на числа (токены).
С помощью знаний полученных из задания T. Математическая выгода переводим число в двоичную систему счисления.
Считаем получившиеся единицы и нули и увеличиваем счетчик в словаре.
По окончании перевода, заполняем поле количество цифр, записав туда сумму полученных нулей и единиц. Добавляем словарик в список.
По окончании цикла выводим словарь без форматирования.

Посмотреть код

Решение

Python
numbers = input().split()
total = []
result = dict()

for item in numbers:
    units = zeros = 0
    number = int(item)

    while number > 0:
        if number % 2:
            units += 1
        else:
            zeros += 1
        number = number // 2
    result['digits'] = zeros + units
    result['units'] = units
    result['zeros'] = zeros
    total.append(result.copy())

print(total)

Решение

Python
numbers = input().split()
total = []
result = dict()

for item in numbers:
    units = zeros = 0
    number = f'{int(item):b}'

    result['digits'] = len(number)
    result['units'] = number.count('1')
    result['zeros'] = number.count('0')
    total.append(result.copy())

print(total)
Подписаться
Уведомить о
guest
4 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Сергей
Сергей
22.05.2024 16:25

Добрый день, возможно в “Решение” стоит обратить внимание на то, что очень важно при записи словарей в список использовать функцию dict.copy(). Пояснить, что иначе в списке во всех его элементах будет одна и та же ссылка на “последнею версию” словаря.

Илья
Илья
18.07.2024 23:41

Подскажите, пожалуйста, такой вариант приемлем, когда словарь зануляется в начале цикла, или в практике программирования все же более универсальным является вариант через .copy()?
С точки зрения правильности кода
text = input()
number_list = text.split(‘ ‘)
itog = []
for numbers in number_list:
  number = int(numbers)
  count_digits = 0
  count_units = 0
  count_zeros = 0
  parts = {}
  while number >= 1:
    if number % 2 == 0:
      count_zeros += 1
    else:
      count_units += 1
    number //= 2
    count_digits += 1
  parts[“digits”] = count_digits
  parts[“units”] = count_units
  parts[“zeros”] = count_zeros
  itog.append(parts)
print(itog)

Последний раз редактировалось 4 месяцев назад Илья ем