题解 | #识别有效的IP地址和掩码并进行分类统计#
识别有效的IP地址和掩码并进行分类统计
https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682
jiance = [0] * 256
for jian in range(256):
jiance[jian] = str(jian)
def hefa(a):
global jiance
for sb in a:
if sb not in jiance:
return False
return True
def panduan(a):
if a[0] == "1" and a[-1] == "0":
k = 1
for i in range(len(a) - 1):
if a[i + 1] == "0" and a[i] == "1":
k = k + 1
elif a[i + 1] == "1" and a[i] == "0":
k = k + 10
if k == 2:
return True
else:
return False
else:
return False
c = [0] * 7
while True:
try:
i = input()
ip = i.split("~")[0]
zw = i.split("~")[1]
q = ip.split(".")
p = zw.split(".")
s = p
p = list(map(lambda x: "0" * (8 - len(bin(int(x))[2:])) + bin(int(x))[2:], p))
p = "".join(p)
if hefa(q) and hefa(s):
if int(q[0]) == 127 or int(q[0]) == 0:
pass
elif panduan(p):
if int(q[0]) >= 1 and int(q[0]) <= 126:
c[0] += 1
if q[0] == "10":
c[6] += 1
elif int(q[0]) >= 128 and int(q[0]) <= 191:
c[1] += 1
if q[0] == "172":
if int(q[1]) >= 16 and int(q[1]) <= 31:
c[6] += 1
elif int(q[0]) >= 192 and int(q[0]) <= 223:
c[2] += 1
if q[0] == "192":
if q[1] == "168":
c[6] += 1
elif int(q[0]) >= 224 and int(q[0]) <= 239:
c[3] += 1
elif int(q[0]) >= 240 and int(q[0]) <= 255:
c[4] += 1
elif int(q[0]) == 127 or int(q[0]) == 0:
c[5] -= 1
elif not panduan(p):
c[5] += 1
else:
c[5] += 1
except:
break
print(" ".join(list(map(str, c))))
将子网掩码转化成二进制以后是需要在前面补零补满8位的,一直没注意到这点卡了好久。。。
