题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
import re
zto2525 = r'(\d|1?\d\d|2[0-4]\d|25[0-5])' #0-255的匹配
pattern = r'^' + zto2525 + r'\.' + zto2525 + r'\.' + zto2525 + r'\.' + zto2525 + r'$'#匹配有效掩码和IP地址的格式
pattern_yanma = r'^(1+0+|1+|0+)$' #匹配掩码是否为全1或全0或先1后0组成
#判断掩码是否为全1或全0或先1后0组成
def is_1_0(yanma):
lst = yanma.split('.')
res = ''
for l in lst:
res += str(bin(int(l)))[2:].rjust(8, '0')
if re.match(pattern_yanma, res):
return True
else:
return False
# 处理两个IP地址和掩码的与操作 如果一样则返回True
def handle(yanma, IP1, IP2):
lst_yanma = yanma.split('.')
lst_IP1 = IP1.split('.')
lst_IP2 = IP2.split('.')
res1 = ''
res2 = ''
for i in range(len(lst_yanma)):
res1 += str(int(lst_IP1[i]) & int(lst_yanma[i]))
res2 += str(int(lst_IP2[i]) & int(lst_yanma[i]))
if res1 == res2:
return True
else:
return False
while True:
try:
yanma = input().strip()
IP1 = input().strip()
IP2 = input().strip()
# 判断掩码或IP格式是否非法:
if re.match(pattern, yanma) and re.match(pattern, IP1) and re.match(pattern, IP2) and is_1_0(yanma):
if handle(yanma, IP1, IP2):
print('0')
else:
print('2')
else:
print('1')
except:
break
SHEIN公司福利 816人发布