1、先判断掩码是否正确,主要是掩码数字字符、网络段与主机段,是否都符合要求。
2、再判断两个ip是否正确,主要是数字字符是否符合要。
3、最后两个ip地址与子网掩码分段二进制位与运算,判断是否在同一个网段。
import sys for line in sys.stdin:#建议采用循环输入或子函数 mask = list(map(int, line.split("."))) ip1 = list(map(int, input().split("."))) ip2 = list(map(int, input().split("."))) bima = ""#存储子网掩码的二进制形式 ermk = False#子网掩码的数字是否有误 for i in range(4):#判断子网掩码的数字是否符合要求,并分段把子网掩码转化为二进制形式 if mask[i] < 0 or mask[i] > 255: ermk = True print(1) break bm = bin(mask[i])[2:] bima += "0" * (8 - len(bm)) + bm if ermk: continue if "0" in bima.rstrip("0") or "1" in bima.lstrip("1"):#判断子网掩码的主机段和网络段是否符合要求 print(1) continue erip = False#ip地址的数字是否有误 for i in range(4): if ip1[i] < 0 or ip1[i] > 255 or ip2[i] < 0 or ip2[i] > 255: erip = True print(1) break if erip: continue iscn = True#与子网掩码分段位与运算,判断两个IP是否在同一个网段 for i in range(4): if ip1[i] & mask[i] != ip2[i] & mask[i]: iscn = False print(2) break if iscn: print(0)