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

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

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

def fun1():
    while True:
        try:
            a = input().split('.') #子网掩码
            ip1 =input().split('.') #ip地址1
            ip2 =input().split('.') #ip地址2
            str1 = ''
            str2 = ''
            l1 = [] # 存储 ip1与掩网子码与运算的数据
            l2 =[] # 存储 ip2与掩网子码与运算的数据
            # for x in a:
            #     if int(x)==0 or int(x)==255:
            #         pass
            #     else:
            #         print('1')
            #         return
            for x in ip1:
                if not  0<=int(x)<=255:
                    print('1')
                    return

            for x in ip2:
                if not  0<=int(x)<=255:
                    print('1')
                    return

            #把子网掩码,ip1,ip2转化为32位二进制
            a = [bin(int(x))[2:].rjust(8,'0') for x in a]
            a = ''.join(a)

            #判断子网掩码合法性
            index_0 = a.find('0')
            str4 = '1'.rjust(index_0, '1')
            str5 = '0'.ljust(32 - index_0, '0')
            str6 = str4 + str5
            if a == str6:
                pass
            else:
                print('1')
                return
            ip1 =[bin(int(x))[2:].rjust(8,'0') for x in ip1]
            ip1 = ''.join(ip1)
            ip2 =[bin(int(x))[2:].rjust(8,'0') for x in ip2]
            ip2 = ''.join(ip2)
            #ip1和子网掩码运算
            for i in range(len(a)):
                if int(ip1[i]) + int(a[i]) == 2:
                    str1 += '1'
                else:
                    str1 += '0'
            #ip2和子网掩码运算
            for i in range(len(a)):
                if int(ip2[i]) + int(a[i]) == 2:
                    str2 += '1'
                else:
                    str2 += '0'
            # 把 l1的数转化为10进制
            l1.append(str1[0:8])
            l1.append(str1[8:16])
            l1.append(str1[16:24])
            l1.append(str1[24:32])
            l1 = [str(int(x,2)) for x in l1]
            # 把 l2的数转化为10进制
            l2.append(str2[0:8])
            l2.append(str2[8:16])
            l2.append(str2[16:24])
            l2.append(str2[24:32])
            l2 = [str(int(x,2)) for x in l2]

            if '.'.join(l1) =='.'.join(l2):
                print('0')
            else:
                print('2')
        except:
            return

if __name__ == '__main__':
    fun1()

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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