Problem Description
子网掩码为32位的二进制数,对应IP地址中网络号和子网号的位设置为1,对应IP地址中主机号的位设置为0。
只要把IP地址和子网掩码进行逐位的“与”运算(and),就可以得出网络地址。
已知IP地址和子网掩码,请你编写程序计算出对应的网络地址。
Input Description
输入数据有多组,每组一行。为点分十进制表示的IP地址和子网掩码,IP地址和子网掩码之间以空格分隔。
Output Description
对每组输入数据,使用点分十进制表示输出计算出的网络地址,占一行。
Sample Input
141.14.72.24 255.255.192.0
141.14.72.24 255.255.224.0
Sample Output
141.14.64.0
141.14.64.0
Hint
我的想法:
我的代码:
def input_data():
data_01 = []
data_02 = []
while True:
try:
a = input()
# a是集合里面有两个元素
if a == '':
break
a = a.split(' ')
b1 = a[0].split('.', 4)
b2 = a[1].split('.', 4)
data_01.append(b1)
data_02.append(b2)
except:
break
return data_01, data_02
# 十进制转换为二进制集合
def shi_er(e):
m1 = bin(e)
list_m = list(m1)
list_m = list_m[2:]
length = list_m.__len__()
while length < 8:
list_m.insert(0, 0)
length = length + 1
return list_m
# and运算
def and_yun_suan(data1, data2):
# 获取二进制列表
data1 = shi_er(data1)
data2 = shi_er(data2)
# 现在data1和data2是二进制列表
num = []
for i in range(0, 8):
if int(data1[i]) == 1 and int(data2[i]) == 1:
num.append(1)
else:
num.append(0)
n = ''
for i in range(0, 8):
n = n + str(num[i])
n = int(n, 2)
return n
# 进行计算
def ji_suan(data_1, data_2):
for i in range(0, 4):
data_1[i] = int(data_1[i])
data_2[i] = int(data_2[i])
# 十进制-----二进制
data = []
for i in range(0, 4):
num = and_yun_suan(data_1[i], data_2[i])
data.append(num)
return data
if __name__ == '__main__':
data_01, data_02 = input_data()
len = len(data_01)
data = []
for i in range(0, len):
# 将两个集合传入ji_suan中
data.append(ji_suan(data_01[i], data_02[i]))
len = len - 1
for e in data:
print(f"{e[0]}.{e[1]}.{e[2]}.{e[3]}")
版权声明:本文为QQ3503814312原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。