Форум » Адресация в Интернете » 12467 PRO100 ЕГЭ 29.12.23 (kompege.ru) » Ответить

12467 PRO100 ЕГЭ 29.12.23 (kompege.ru)

Anna1915: В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Адрес сети равен 183.192.A.0, где А — некоторое допустимое для записи адреса сети число, а маска сети 255.255.252.0. Определите минимальное значение А, для которого для всех IP-адресов этой сети в двоичной записи IP-адреса суммарное количество единиц в правых двух байтах больше трёх. В ответе - 60, но при программном решении получается 61 [pre2] from ipaddress import * c=0 for A in range(256): ip=IPv4Address(f'183.192.{A}.0') net=IPv4Network(f'{ip}/255.255.252.0',0) if net.network_address<ip<net.broadcast_address: k=0 h=0 for ip in net: k+=1 right=f'{ip:b}'[16:] if right.count('1')>3: h+=1 if k==h: print(A) [/pre2] Но если без строки проверки if net.network_address<ip<net.broadcast_address: получаем 60 Вопрос почему так получилось и когда надо проверять и писать эту строку if net.network_address<ip<net.broadcast_address:?????

Ответов - 1

Ангелина_00: from ipaddress import ip_network for a in range(256): net = ip_network(f'183.192.{a}.0/255.255.252.0', strict=False) if all(f'{ad:b}'[16:].count('1') > 3 for ad in net): print(a) break



полная версия страницы