У программистов особые отношения с двоичной системой счисления.
Продолжим тренировки в статистической обработке данных и проанализируем данные числа.
Напишите программу, которая для переданных чисел вычисляет:
- количество разрядов;
- количество единиц;
- количество нулей.
Формат ввода
Вводится последовательность чисел, записанных через пробел.
Формат вывода:
Вывести список словарей с требуемой статистикой.
Примечание
Вывод в примерах отформатирован только для визуальной наглядности.
Все пробельные символы при проверке игнорируются.
Порядок словарей обязан совпадать с порядком переданных чисел.
Порядок ключей в словаре не имеет значения.
Пример
Ввод
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. Математическая выгода переводим число в двоичную систему счисления.
Считаем получившиеся единицы и нули и увеличиваем счетчик в словаре.
По окончании перевода, заполняем поле количество цифр, записав туда сумму полученных нулей и единиц. Добавляем словарик в список.
По окончании цикла выводим словарь без форматирования.
Посмотреть код
Решение
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)
Решение
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)