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

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

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

import sys
#判断ip是否合法,判断每段是否在0-255之间
def check_ip(ip):
    ips = list(map(int,ip.split('.')))
    if len(ips) < 4:
        return False
    for i in ips:
        if i < 0 or i > 255:
            return False
    return True

#判断掩码是否合法
#先判断是否每段在0-255之间
def check_mask(mask):
    if not check_ip(mask):
        return False
    masks = list(map(int, mask.split('.')))
    mask_str = ""
    for m in masks:
        #转成二进制形式的字符串,注意左边要用0补够8位
        mask_str += bin(m)[2:].rjust(8,'0')
    index = mask_str.index('0')
#     print(mask_str)
#     print(index)
    #如果0后面还有1,就是非法
    if -1 != index:
        if '1' in mask_str[index:]:
            return False
    return True

def convert_int(ipstr):
    ips = list(map(int, ipstr.split('.')))
    ipnum = 0
    for ip in ips:
        ipnum = ip + (ipnum << 8)
    return ipnum

#判断是否同一子网
#ip分别与掩码与,再对比
def check_ziwang(mask, ip1, ip2):
    mm = convert_int(mask)
    ipnum1 = convert_int(ip1)
    ipnum2 = convert_int(ip2)
#     print(mm & ipnum1)
#     print(mm & ipnum2)
    return (mm & ipnum1) == (mm & ipnum2)

while True:
    try:
        mask = input()
        ip1 = input()
        ip2 = input()
        if not check_ip(ip1) or not check_ip(ip2) or not check_mask(mask):
            print("1")
        elif check_ziwang(mask, ip1, ip2):
            print("0")
        else:
            print("2")
    except:
#         print(sys.exc_info())
        break
















全部评论

相关推荐

头像
11-27 14:28
长沙理工大学
刷算法真的是提升代码能力最快的方法吗?&nbsp;刷算法真的是提升代码能力最快的方法吗?
牛牛不会牛泪:看你想提升什么,代码能力太宽泛了,是想提升算法能力还是工程能力? 工程能力做项目找实习,算法也分数据结构算法题和深度学习之类算法
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务