Уровень: Базовый
Условие задачи:
Сеть задана IP-адресом 172.16.168.0 и маской сети 255.255.248.0.
Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи IP-адреса не кратно 5?
Код решения:
Комментарии к коду:
- from ipaddress import *
Импортируем все функции и классы из модуля ipaddress, который позволяет работать с IP-адресами и сетями. - net = ip_network('172.16.168.0/255.255.248.0', 0)
Создаем объект сети на основе IP-адреса и маски подсети, заданной в формате CIDR. Здесь '0' указывает на использование маски по умолчанию. - cnt = 0
Инициализируем счётчик cnt равным 0. Этот счётчик будет использоваться для подсчета количества IP-адресов, удовлетворяющих заданному условию. - for ip in net:
Начинаем цикл, который перебирает все IP-адреса в заданной сети net. - s = f'{ip:b}'
Преобразуем текущий IP-адрес ip в двоичную строку и сохраняем её в переменной s. - if s.count('1') % 5 != 0:
Проверяем, если количество единиц в двоичном представлении IP-адреса не делится на 5 без остатка. - cnt += 1
Если условие выполняется, увеличиваем счётчик cnt на 1. - print(cnt)
Выводим значение счётчика cnt, которое теперь содержит количество IP-адресов, не удовлетворяющих условию (количество единиц в двоичном представлении которых не делится на 5).