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

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

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

def f1(lst_ip):
    """
    判断ip四个数字是否0~255
    :param ip: 列表,四个数字
    :return: 0 非法 1 通过
    """
    for i in lst_ip:
        if i >= 0 and i <= 255:
            continue
        else:
            return 0
    return 1


def f2(lst_mask):
    """
    判断是不是m个1接n个0
    :param lst_mask: 掩码四个数字组成的列表
    :return: 1 合法 0 非法
    """
    s = ""
    for i in lst_mask:
        d = bin(i)[2:]
        if len(d) < 8:
            n = 8 - len(d)
            s += "0" * n
        s += bin(i)[2:]
    for i in range(len(s)):
        if s[i] == "1":
            continue
        else:
            if int(s[i:]) == 0:
                return 1
            else:
                return 0


def f3(lst_mask, lst_ip1, lst_ip2):
    """
    判断两个ip与掩码与运算后是否相等
    :param lst_mask: mask列表,四个数字
    :param lst_ip1: ip1列表,四个数字
    :param lst_ip2: ip2列表,四个数字
    :return: 0 结果不同 1 结果相同
    """
    for i in range(len(lst_ip1)):
        a1 = lst_mask[i]
        a2 = lst_ip1[i]
        a3 = lst_ip2[i]
        r1 = a1 & a2
        r2 = a1 & a3
        if r1 != r2:
            return 0
    return 1


def f(mask, ip1, ip2):
    # 2. 通用判断: 是否都是4个部分
    if len(mask) == 4 and len(ip1) == 4 and len(ip2) == 4:
        pass
    else:
        return 1  # 长度非法

    # 3. 判断每段的值是否合法: 0~255
    for i in (mask, ip1, ip2):
        if not f1(i):
            return 1  # 长度非法
    # 4. 判断子网掩码是否合法: 换算为2进制后左1右0
    if not f2(mask):
        return 1  # 长度非法
    # 5. 2个ip进行与运算
    if f3(mask, ip1, ip2):
        return 0  # 结果相同属于同一子网
    else:
        return 2  # 结果不同不属于同一子网


while True:
    try:
        # 1. 把输入的值变为数值型列表
        mask = list(map(int, input().split(".")))
        ip1 = list(map(int, input().split(".")))
        ip2 = list(map(int, input().split(".")))
        r = f(mask, ip1, ip2)
        print(r)
    except:
        break

全部评论

相关推荐

07-02 10:44
门头沟学院 C++
码农索隆:太实诚了,告诉hr,你能实习至少6个月
点赞 评论 收藏
分享
自由水:笑死了,敢这么面试不敢让别人说
点赞 评论 收藏
分享
龙珠传说:nb,公务员解约不需要支付违约金吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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