题解 | #识别有效的IP地址和掩码并进行分类统计#
识别有效的IP地址和掩码并进行分类统计
https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682
import sys
a = []
b0 = []
numbers = 0
while True:
    line = sys.stdin.readline().strip()
    if line == '':
        break
    a.append(line)
    parts = line.split("~")
    numbers = [part for part in parts[0].split('.')]
    numbers.extend([part for part in parts[1].split('.')])
    b0.append(numbers)
num = len(a)
num_2=len(b0[0])
b = [[-1 for _ in range(0, num, 1)] for _ in range(0, 8, 1)]
rank = [[0 for _ in range(0, 2, 1)] for _ in range(0, num, 1)]
for i in range(0, num, 1):
    for j in range(0, 8, 1):
        try:
            b[j][i] = int(b0[i][j])
        except:
            pass
for i in range(0, num, 1):
    count=0
    if b[0][i] >= 1 and b[0][i] <= 126:
        rank[i][0] = 1
    if b[0][i] >= 128 and b[0][i] <= 191:
        rank[i][0] = 2
    if b[0][i] >= 192 and b[0][i] <= 223:
        rank[i][0] = 3
    if b[0][i] >= 224 and b[0][i] <= 239:
        rank[i][0] = 4
    if b[0][i] >= 240 and b[0][i] <= 255:
        rank[i][0] = 5
    if b[0][i] == 0 or b[0][i] == 127:
        rank[i][0] = 6
        rank[i][1] = 6
    if b[0][i] == 10 or (b[0][i] == 172 and b[1][i] >= 16 and b[1][i] <= 31) or (b[0][i] == 192 and b[1][i] >= 168 and b[1][i] <= 192):
        rank[i][1] = 7
    '''
    if (b[4][i] == 255) and (b[5][i] == 255) and (b[6][i] in [255]) and (b[7][i] == 0):
        rank[i][1] = 1
    if (b[4][i] == 255) and (b[5][i] in [255]) and (b[6][i] == 0) and (b[7][i] == 0):
        rank[i][1] = 1
    if (b[4][i] in [255]) and (b[5][i] == 0) and (b[6][i] == 0) and (b[7][i] == 0):
        rank[i][1] = 1
    '''
    if (b[4][i] == 255) and (b[5][i] == 255) and (b[6][i] == 255) and (b[7][i] in [254, 252, 248, 240, 224, 192, 128]):
        count=count+1
        if rank[i][1] == 7:
            rank[i][0] = rank[i][0]+0.5
            rank[i][1] = 1
        else:
            rank[i][1] = 1
    if (b[4][i] == 255) and (b[5][i] == 255) and (b[6][i] in [255, 254, 252, 248, 240, 224, 192, 128]) and (b[7][i] == 0):
        count=count+1
        if rank[i][1] == 7:
            rank[i][0] = rank[i][0]+0.5
            rank[i][1] = 1
        else:
            rank[i][1] = 1
    if (b[4][i] == 255) and (b[5][i] in [255, 254, 252, 248, 240, 224, 192, 128]) and (b[6][i] == 0) and (b[7][i] == 0):
        count=count+1
        if rank[i][1] == 7:
            rank[i][0] = rank[i][0]+0.5
            rank[i][1] = 1
        else:
            rank[i][1] = 1
    if (b[4][i] in [255, 254, 252, 248, 240, 224, 192, 128]) and (b[5][i] == 0) and (b[6][i] == 0) and (b[7][i] == 0):
        count=count+1
        if rank[i][1] == 7:
            rank[i][0] = rank[i][0]+0.5
            rank[i][1] = 1
        else:
            rank[i][1] = 1
    if count==0:
        if rank[i][1] == 7:
            rank[i][1] = 0
for i in range(0, num, 1):
    for j in range(0, 8, 1):
        if (b[j][i]==-1 or b[j][i]<0 or b[j][i]>255) and j<4:
            rank[i][0]=0
        if (b[j][i]==-1 or b[j][i]<0 or b[j][i]>255) and j>=4:
            rank[i][1]=0
count_1 = 0
count_2 = 0
count_3 = 0
count_4 = 0
count_5 = 0
count_6 = 0
count_7 = 0
for i in range(0, num, 1):
    if rank[i][0] < 2 and rank[i][0] >= 1 and rank[i][1] == 1:
        count_1 = count_1 + 1
    if rank[i][0] < 3 and rank[i][0] >= 2 and rank[i][1] == 1:
        count_2 = count_2 + 1
    if rank[i][0] < 4 and rank[i][0] >= 3 and rank[i][1] == 1:
        count_3 = count_3 + 1
    if rank[i][0] == 4 and rank[i][1] == 1:
        count_4 = count_4 + 1
    if rank[i][0] == 5 and rank[i][1] == 1:
        count_5 = count_5 + 1
    if rank[i][0] == 0 or rank[i][1] == 0:
        count_6 = count_6 + 1
    if (rank[i][0]-int(rank[i][0])) == 0.5:
        count_7 = count_7 + 1
print(count_1, count_2, count_3, count_4, count_5, count_6, count_7)
 查看11道真题和解析
查看11道真题和解析