题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
#判断255.255.0.1形式的字符串是否符合四位在0到255之间的数字且以.号分隔的格式。
def valid_ip(str_ip):
a = str_ip.split('.')
if len(a) != 4:
return False
try:
for i in a:
if (0 <= int(i) <= 255) and (not (((int(i) != 0) and (i.find('0') == 0)))) and (not ' ' in i):
pass
else:
return False
return True
except:
return False
#判断255.255.0.1形式的字符串是否符合掩码1在前0在后的格式。
def valid_yanma(str_yanma):
b = str_yanma.split('.')
str_yanma = ''
for i in b:
str_yanma += bin(int(i))[2:].rjust(8 ,'0')
a = str_yanma.rfind('1')
c = str_yanma.find('0')
if (a + 1 == c) and (a != -1) and (c != -1):
return True
return False
#计算192.168.0.1字符串形式的ip和掩码计算之后的0001整数。
def cal_ip(str_ip, str_yanma):
a = str_ip.split('.')
b = str_yanma.split('.')
c = ''
d = ''
for i in a:
c += bin(int(i))[2:].rjust(8, '0')
for i in b:
d += bin(int(i))[2:].rjust(8, '0')
a = int(c, 2)
b = int(d, 2)
return a & b
while True:
try:
yanma = input()
ip1 = input()
ip2 = input()
if valid_ip(yanma) and valid_ip(ip1) and valid_ip(ip2) and valid_yanma(yanma):
if cal_ip(ip1, yanma) == cal_ip(ip2, yanma):
print('0')
else:
print('2')
else:
print('1')
except:
break
查看14道真题和解析