题解 | #判断两个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

全部评论

相关推荐

牛大宝儿236:还没入职就PUA,[发火我之前遇到一个月给500块钱的
点赞 评论 收藏
分享
05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务