题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
while True: try: s1 = input().split('.') s2 = input().split('.') s3 = input().split('.') s4 = '' for i in s1: s4 += bin(int(i))[2:] s4 = s4.lstrip('1') #把子网掩码第一个0前面的1全去掉了,后面不能有1了,当然第一个数也不能有0 for i in range(len(s1)): s1[i] = int(s1[i]) s2[i] = int(s2[i]) s3[i] = int(s3[i]) if s1[0] != 255 or'1' in s4 or max(s1+s2+s3) > 255 or min(s1+s2+s3) < 0: print(1) else: a = [] b = [] for i in range(len(s2)): a.append(s1[i]&s2[i]) b.append(s1[i]&s3[i]) #十进制默认可以&运算,应该自动转2进制运算完再返回十进制的 if a == b: print(0) else: print(2) except: break
这个题有两个可以说的点:1. 判别子网掩码和ip地址是否合法
(1子网掩码)我用的方法是把第一个0前面的1全部去掉看看后面是否有1,有的话子网掩码就不合法其实,但是第一个数的二进制也不能有0,即第一个数还是得是255
(2 ip地址)我借鉴别人的把三个list合成长list然后看里面有没有不合法(>255 or <0)的数
2. 十进制直接&运算