题解 | #识别有效的IP地址和掩码并进行分类统计#
识别有效的IP地址和掩码并进行分类统计
https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682
Type_Counter = {
'A' : 0,
'B' : 0,
'C' : 0,
'D' : 0,
'E' : 0,
'Private_IP' : 0,
'Error_IP_and_Mask' : 0
}
Wrong_IP = []
def Judge_Mask(mask):
if mask in Wrong_IP:
return False
if mask == [255, 255, 255, 255] or mask == [0, 0, 0, 0]:
return False
m = ''
for i in range(4):
m += bin(mask[i])[2:].zfill(8)
one_end_index = m.rfind('1')
zero_start_index = m.find('0')
if zero_start_index - one_end_index == 1:
return True
else:
return False
def Judge_IP(ip, mask):
if ip[0] in range(1, 127) and ip[1] in range(0, 256) and ip[2] in range(0, 256) and ip[3] in range(0, 256) and Judge_Mask(mask):
Type_Counter['A'] += 1
return True
elif ip[0] in range(128, 192) and ip[1] in range(0, 256) and ip[2] in range(0, 256) and ip[3] in range(0, 256) and Judge_Mask(mask):
Type_Counter['B'] += 1
return True
elif ip[0] in range(192, 224) and ip[1] in range(0, 256) and ip[2] in range(0, 256) and ip[3] in range(0, 256) and Judge_Mask(mask):
Type_Counter['C'] += 1
return True
elif ip[0] in range(224, 240) and ip[1] in range(0, 256) and ip[2] in range(0, 256) and ip[3] in range(0, 256) and Judge_Mask(mask):
Type_Counter['D'] += 1
return True
elif ip[0] in range(240, 256) and ip[1] in range(0, 256) and ip[2] in range(0, 256) and ip[3] in range(0, 256) and Judge_Mask(mask):
Type_Counter['E'] += 1
return True
elif ip[0] == 127 or ip[0] == 0:
return False
else:
Type_Counter['Error_IP_and_Mask'] += 1
Wrong_IP.append(ip)
return False
def Judge_PrivateIP(ip):
if IP in Wrong_IP:
return False
if ip[0] == 10 and ip[1] in range(0, 256) and ip[2] in range(0, 256) and ip[3] in range(0, 256):
Type_Counter['Private_IP'] += 1
return True
elif ip[0] == 172 and ip[1] in range(16, 32) and ip[2] in range(0, 256) and ip[3] in range(0, 256):
Type_Counter['Private_IP'] += 1
return True
elif ip[0] == 192 and ip[1] == 168 and ip[2] in range(0, 256) and ip[3] in range(0, 256):
Type_Counter['Private_IP'] += 1
return True
else:
return False
while 1:
try:
s = input()
if '..' in s or '...' in s:
Type_Counter['Error_IP_and_Mask'] += 1
else:
IP = list(map(int, s.split('~')[0].split('.')))
Mask = list(map(int, s.split('~')[1].split('.')))
Judge_IP(IP, Mask)
Judge_PrivateIP(IP)
except:
break
print(Type_Counter['A'], Type_Counter['B'], Type_Counter['C'], Type_Counter['D'], Type_Counter['E'], Type_Counter['Error_IP_and_Mask'], Type_Counter['Private_IP'])
思路不难,耐心、细心、恒心,相信自己!一定能行!