题解 | #判断两个IP是否属于同一子网#
判断两个IP是否属于同一子网
http://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218
def fun1():
while True:
try:
a = input().split('.') #子网掩码
ip1 =input().split('.') #ip地址1
ip2 =input().split('.') #ip地址2
str1 = ''
str2 = ''
l1 = [] # 存储 ip1与掩网子码与运算的数据
l2 =[] # 存储 ip2与掩网子码与运算的数据
# for x in a:
# if int(x)==0 or int(x)==255:
# pass
# else:
# print('1')
# return
for x in ip1:
if not 0<=int(x)<=255:
print('1')
return
for x in ip2:
if not 0<=int(x)<=255:
print('1')
return
#把子网掩码,ip1,ip2转化为32位二进制
a = [bin(int(x))[2:].rjust(8,'0') for x in a]
a = ''.join(a)
#判断子网掩码合法性
index_0 = a.find('0')
str4 = '1'.rjust(index_0, '1')
str5 = '0'.ljust(32 - index_0, '0')
str6 = str4 + str5
if a == str6:
pass
else:
print('1')
return
ip1 =[bin(int(x))[2:].rjust(8,'0') for x in ip1]
ip1 = ''.join(ip1)
ip2 =[bin(int(x))[2:].rjust(8,'0') for x in ip2]
ip2 = ''.join(ip2)
#ip1和子网掩码运算
for i in range(len(a)):
if int(ip1[i]) + int(a[i]) == 2:
str1 += '1'
else:
str1 += '0'
#ip2和子网掩码运算
for i in range(len(a)):
if int(ip2[i]) + int(a[i]) == 2:
str2 += '1'
else:
str2 += '0'
# 把 l1的数转化为10进制
l1.append(str1[0:8])
l1.append(str1[8:16])
l1.append(str1[16:24])
l1.append(str1[24:32])
l1 = [str(int(x,2)) for x in l1]
# 把 l2的数转化为10进制
l2.append(str2[0:8])
l2.append(str2[8:16])
l2.append(str2[16:24])
l2.append(str2[24:32])
l2 = [str(int(x,2)) for x in l2]
if '.'.join(l1) =='.'.join(l2):
print('0')
else:
print('2')
except:
return
if __name__ == '__main__':
fun1()
	
   while True:
try:
a = input().split('.') #子网掩码
ip1 =input().split('.') #ip地址1
ip2 =input().split('.') #ip地址2
str1 = ''
str2 = ''
l1 = [] # 存储 ip1与掩网子码与运算的数据
l2 =[] # 存储 ip2与掩网子码与运算的数据
# for x in a:
# if int(x)==0 or int(x)==255:
# pass
# else:
# print('1')
# return
for x in ip1:
if not 0<=int(x)<=255:
print('1')
return
for x in ip2:
if not 0<=int(x)<=255:
print('1')
return
#把子网掩码,ip1,ip2转化为32位二进制
a = [bin(int(x))[2:].rjust(8,'0') for x in a]
a = ''.join(a)
#判断子网掩码合法性
index_0 = a.find('0')
str4 = '1'.rjust(index_0, '1')
str5 = '0'.ljust(32 - index_0, '0')
str6 = str4 + str5
if a == str6:
pass
else:
print('1')
return
ip1 =[bin(int(x))[2:].rjust(8,'0') for x in ip1]
ip1 = ''.join(ip1)
ip2 =[bin(int(x))[2:].rjust(8,'0') for x in ip2]
ip2 = ''.join(ip2)
#ip1和子网掩码运算
for i in range(len(a)):
if int(ip1[i]) + int(a[i]) == 2:
str1 += '1'
else:
str1 += '0'
#ip2和子网掩码运算
for i in range(len(a)):
if int(ip2[i]) + int(a[i]) == 2:
str2 += '1'
else:
str2 += '0'
# 把 l1的数转化为10进制
l1.append(str1[0:8])
l1.append(str1[8:16])
l1.append(str1[16:24])
l1.append(str1[24:32])
l1 = [str(int(x,2)) for x in l1]
# 把 l2的数转化为10进制
l2.append(str2[0:8])
l2.append(str2[8:16])
l2.append(str2[16:24])
l2.append(str2[24:32])
l2 = [str(int(x,2)) for x in l2]
if '.'.join(l1) =='.'.join(l2):
print('0')
else:
print('2')
except:
return
if __name__ == '__main__':
fun1()
 查看23道真题和解析
查看23道真题和解析

 投递蚂蚁集团等公司10个岗位
投递蚂蚁集团等公司10个岗位