Problem E: 计算网络地址

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版权协议,转载请附上原文出处链接和本声明。