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

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

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

def checkip(ip):
    """判读是否为IP的函数"""
    if len(ip) != 4:
        return False
    flag = 0
    for sec in ip:
        if 0 <= int(sec) <= 255 and sec == str(int(sec)):
            flag += 1
    return flag == 4


def checksub(submask):
    '''进一步判断是否为掩码的函数'''
    tem = ''
    for sec in submask:
        tem += bin(int(sec))[2:].rjust(8, "0")
    if tem[0] == 0 or tem[-1] == 1:
        return False
    p = tem.find("0")
    if "1" in tem[p:]:
        return False
    return True


def check(ip1, ip2, submask):
    """判读两ip是否为同一子网的函数"""
    if not checkip(submask) or not checksub(submask) or not checkip(ip1) or not checkip(ip2):
        return 1
    lsub = []
    lip1, lip2 = [], []
    tmp1, tmp2 = '', ''
    for i in range(4):
        lsub.append(bin(int(submask[i]))[2:].rjust(8, "0"))
        lip1.append(bin(int(ip1[i]))[2:].rjust(8, "0"))
        lip2.append(bin(int(ip2[i]))[2:].rjust(8, "0"))
    for j in range(4):
        for k in range(8):
            tmp1 += str(int(lip1[j][k]) and int(lsub[j][k]))
            tmp2 += str(int(lip2[j][k]) and int(lsub[j][k]))
    if tmp1 == tmp2:
        return 0
    else:
        return 2


while True:
    try:
        submask = input().split(".")
        ip1 = input().split(".")
        ip2 = input().split(".")
        print(check(ip1, ip2, submask))
    except:
        break

全部评论

相关推荐

SHC2:关键问题是你这三段实习是三个不同的岗位…你这样子秋招就是只有一段实习的本科生..
点赞 评论 收藏
分享
ALEX_BLX:虽然说聊天记录不可信,不过这个趋势确实如此但我觉得也要想到一点就是卷后端的人里真正有“料”的人又有多少,我说的这个料都不是说一定要到大佬那种级别,而是就一个正常的水平。即使是现在也有很多人是跟风转码的,2-3个月速成后端技术栈的人数不胜数,但今时不同往日没可能靠速成进大厂了。这种情况就跟考研一样,你能上考场就已经打败一半的人了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务