题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
import sys def check_mask(mask): # 不能是0.0.0.0 或者 255.255.255.255 if mask.count('0') == 4 or mask.count('255') == 4: return False # 不能小于0 或 大于255 for i in mask: if int(i) < 0 or int(i) > 255: return False # 不能有不连续的1 或者 0 (不行:111001, 可以:111000) s = '' for i in mask: s += bin(int(i))[2:].zfill(8) index_0 = s.index('0') #.index('0') 返回第一次出现‘0’的index if len(s[:index_0]) != s[:index_0].count('1'): #一堆1不带0 return False if len(s[index_0:]) != s[index_0:].count('0'): #一堆0不带1 return False return True def check_ip(ip): if '' in ip: # 192..224.255 return False if len(ip) != 4: # 192.224.225 return False for i in ip: #范围 2-255 if int(i) < 0 or int(i) > 255: return False return True def binary(l): # 返回列表的二进制结果 s = '' for i in l: s += bin(int(i))[2:].zfill(8) return s def check_same(s_mask, s_ip1, s_ip2): # 检查是否在同一子网 for i in range(32): if (int(s_mask[i]) and int(s_ip1[i])) != (int(s_mask[i]) and int(s_ip2[i])): return False return True while 1: try: mask = input().split('.') ip1 = input().split('.') ip2 = input().split('.') if check_mask(mask) and check_ip(ip1) and check_ip(ip2): str_mask = binary(mask) str_ip1 = binary(ip1) str_ip2 = binary(ip2) if check_same(str_mask,str_ip1,str_ip2): print(0) #相同 else: print(2) #不同 else: print(1) #非法 except: break