题解 | #判断两个IP是否属于同一子网#

判断两个IP是否属于同一子网

http://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218

# 判断ip合法性
def hefaip(list):
    for i in list:
        if int(i) < 0 or int(i) > 255:
            return False
    return True
#判断掩码合法性
def hefamask(mask):
    a = change2(mask)
    if a[0] != '11111111' or a[3] != '00000000':
        return False
    else:
        return hefaip(mask)
#转二进制
def change2(list):
    new_list = []
    for i in list:
        a = bin(int(i,10))[2:]
        a = '0'*(8-len(a)) + a if len(a)<8 else a
        new_list.append(a)
    return new_list #元素为str
#AND运算
def newip2(mask,ip):
    newip2_list = []
    for i in range(4):
        list = []
        for j in range(8):
            a = '1' if mask[i][j] == '1' and ip[i][j] == '1' else '0'
            list.append(a)
        b = ''.join(list)
        newip2_list.append(b)
    return newip2_list

while True:
    try:
        mask = input().split('.')
        ip1 = input().split('.')
        ip2 = input().split('.')
    except:
        break
    else:
        # 二进制转换32位
        mask_2 = change2(mask)
        ip1_2 = change2(ip1)
        ip2_2 = change2(ip2)
        #判断合法ip
        if hefaip(ip1) and hefaip(ip2) and hefamask(mask):
            # ADN运算
            ip1_new = newip2(mask_2, ip1_2)
            ip2_new = newip2(mask_2, ip2_2)
            # 判断ip是否相同
            if ip1_new == ip2_new:
                print('0')
            else:
                print('2')
        else:
            print('1')
全部评论

相关推荐

07-02 13:52
武汉大学 golang
骗你的不露头也秒
牛客87776816...:😃查看图片
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-02 17:58
点赞 评论 收藏
分享
陆续:不可思议 竟然没那就话 那就我来吧 :你是我在牛客见到的最美的女孩
点赞 评论 收藏
分享
屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务