自己写的和其他人写的比较了下,我的代码应该更简单易懂一些,所以把自己的答案放了出来。这里只放了答案,如果需要更多的说明,可以参考【华为机试Python3题解】HJ18识别有效的IP地址和掩码并进行分类统计
import re
A, B, C, D, E, errs, privates = 0, 0, 0, 0, 0, 0, 0
def getBin(string):
string_bin = ''
for i in string.split('.'):
string_bin += bin(int(i))[2:].rjust(8, '0')
return string_bin
try:
while True:
ip, mask = input().split('~')
mask_bin = getBin(mask)
if ip.split('.')[0] in ('0', '127'):
continue
elif mask in ('0.0.0.0', '255.255.255.255'):
errs += 1
continue
else:
if re.search('01', mask_bin):
errs += 1
continue
ip_bin = getBin(ip)
if re.search(r'\.\.', ip):
errs += 1
elif getBin('1.0.0.0') < ip_bin < getBin('126.255.255.255'):
A += 1
if getBin('10.0.0.0') < ip_bin < getBin('10.255.255.255'):
privates += 1
elif getBin('128.0.0.0') < ip_bin < getBin('191.255.255.255'):
B += 1
if getBin('172.16.0.0') < ip_bin < getBin('172.31.255.255'):
privates += 1
elif getBin('192.0.0.0') < ip_bin < getBin('223.255.255.255'):
C += 1
if getBin('192.168.0.0') < ip_bin < getBin('192.168.255.255'):
privates += 1
elif getBin('224.0.0.0') < ip_bin < getBin('239.255.255.255'):
D += 1
elif getBin('240.0.0.0') < ip_bin < getBin('255.255.255.255'):
E += 1
except (EOFError, ValueError):
pass
print(A, B, C, D, E, errs, privates)