На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение



Не зарегистрирован
ссылка на сообщение  Отправлено: 19.02.24 19:54. Заголовок: Задание 13 (10580) kompege


Добрый день! Почему при вычислении двоичной записи маски с помощью f строки ответом будет число 13 и при этом очевидно что первые четыре нуля не считаются. Но ведь в ip адресе и адресе сети хранится 32 бита. Во втором случае будет ответ 299 и получается что там посчитаны первые 4 разрада ip-адреса.
 
ip_address = '10.48.96.0'
subnet_mask = '255.255.240.0'
network = IPv4Network(f'{ip_address}/{subnet_mask}')
count = 0
# перебираем все адреса в сетиfor ip in network:
binary_ip_2 = f'{ip:b}'
#binary_ip = bin(int(ip))[2:]

ones_count = binary_ip.count('1')
zero_count = binary_ip.count('0')
if ones_count > zero_count:
count += 1

print(f'Количество адресов с чётной суммой единиц: {count}')

Как объяснить детям почему мы берем и у 32-битного значения убираем первые 4 бита?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 4 [только новые]







Сообщение: 255
ссылка на сообщение  Отправлено: 20.02.24 04:36. Заголовок: Биты никуда не убир..


[quoteКак объяснить детям почему мы берем и у 32-битного значения убираем первые 4 бита?]`
Биты никуда не убираются. В вашем коде надо добавить "достраивание" двоичного кода до 32-битного состояния:
binary_ip = bin(int(ip))[2:].zfill(32)
Тогда программа даст верный ответ.


Вообще, я бы детям сначала показала, как решать эти задачи без библиотеки ipaddress, руками
Адрес сети адрес и маски выглядят так
['00001010', '00110000', '01100000', '00000000']
['11111111', '11111111', '11110000', '00000000']
Маска содержит 20 единиц, значит, адрес сети также хранится в первых 20 битах, последние 12 приходятся на адрес узла


 
from itertools import *
adres='10.48.96.0'; print( [ bin(int(ip))[2::].zfill(8) for ip in adres.split('.') ] )
adres='255.255.240.0'; print( [ bin(int(ip))[2::].zfill(8) for ip in adres.split('.') ] )
['00001010', '00110000', '01100000', '00000000']
['11111111', '11111111', '11110000', '00000000']
k=0
for c in product('01',repeat=12):
ad='00001010'+'00110000'+'0110'+''.join(c)
if ad.count('1')>ad.count('0'):
k+=1
print(k,ad)


Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 1
ссылка на сообщение  Отправлено: 20.02.24 18:58. Заголовок: Спасибо! Мне нужно к..


Спасибо! Мне нужно кое-что осознать и чувствую что вернсь с вопросом. То что Вы написали я знаю, но видимо что-то скрывается от моего знания и опыта, так как прирешении других заданий такой трудности не возникало. Потестирую.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 259
ссылка на сообщение  Отправлено: 20.02.24 19:51. Заголовок: Может быть, будет по..


Может быть, будет полезно следующее:
 
from ipaddress import *
for ip in IPv4Network(f'10.48.96.0/255.255.240.0'):
b_ip = f'{int(ip):b}'.zfill(32)
if b_ip.count('1')>b_ip.count('0'):
print(ip,f'{int(ip):b}', [bin(int(ip1))[2::] for ip1 in str(ip).split('.')],f'{int(ip):b}'.zfill(32),[bin(int(ip1))[2::].zfill(8) for ip1 in str(ip).split('.')])


программа выводит строки, в которых:
1) адрес узла сети
2) адрес в двоичной сс без дополнительных ведущих нулей для достраивания до 32 битов
3) адрес в двоичной сс без дополнительных ведущих нулей для достраивания до 32 битов , разделенный на отдельные байты - видно, что они не восьмибитные
4) адрес в двоичной сс с доп. ведущими нулями для достраивания до 32 битов
5) адрес в двоичной сс с доп. ведущими нулями для достраивания до 32 битов , разделенный на отдельные байты - видно, что они восьмибитные
ТАКИМ ОБРАЗОМ, для обработки ip-адреса надо обязательно добавить в него недостающие ведущие нули с помощью функции z.fill(32)

10.48.103.255 1010001100000110011111111111 ['1010', '110000', '1100111', '11111111'] 00001010001100000110011111111111 ['00001010', '00110000', '01100111', '11111111']
10.48.107.255 1010001100000110101111111111 ['1010', '110000', '1101011', '11111111'] 00001010001100000110101111111111 ['00001010', '00110000', '01101011', '11111111']
10.48.109.255 1010001100000110110111111111 ['1010', '110000', '1101101', '11111111'] 00001010001100000110110111111111 ['00001010', '00110000', '01101101', '11111111']
10.48.110.255 1010001100000110111011111111 ['1010', '110000', '1101110', '11111111'] 00001010001100000110111011111111 ['00001010', '00110000', '01101110', '11111111']
10.48.111.127 1010001100000110111101111111 ['1010', '110000', '1101111', '1111111'] 00001010001100000110111101111111 ['00001010', '00110000', '01101111', '01111111']
10.48.111.191 1010001100000110111110111111 ['1010', '110000', '1101111', '10111111'] 00001010001100000110111110111111 ['00001010', '00110000', '01101111', '10111111']
10.48.111.223 1010001100000110111111011111 ['1010', '110000', '1101111', '11011111'] 00001010001100000110111111011111 ['00001010', '00110000', '01101111', '11011111']
10.48.111.239 1010001100000110111111101111 ['1010', '110000', '1101111', '11101111'] 00001010001100000110111111101111 ['00001010', '00110000', '01101111', '11101111']
10.48.111.247 1010001100000110111111110111 ['1010', '110000', '1101111', '11110111'] 00001010001100000110111111110111 ['00001010', '00110000', '01101111', '11110111']
10.48.111.251 1010001100000110111111111011 ['1010', '110000', '1101111', '11111011'] 00001010001100000110111111111011 ['00001010', '00110000', '01101111', '11111011']
10.48.111.253 1010001100000110111111111101 ['1010', '110000', '1101111', '11111101'] 00001010001100000110111111111101 ['00001010', '00110000', '01101111', '11111101']
10.48.111.254 1010001100000110111111111110 ['1010', '110000', '1101111', '11111110'] 00001010001100000110111111111110 ['00001010', '00110000', '01101111', '11111110']
10.48.111.255 1010001100000110111111111111 ['1010', '110000', '1101111', '11111111'] 00001010001100000110111111111111 ['00001010', '00110000', '01101111', '11111111']

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 2
ссылка на сообщение  Отправлено: 22.02.24 19:14. Заголовок: Спасибо!..


Спасибо!

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 2118
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет