牛客识别有效的掩码并且分类统计(python)

import sys

ips = []
while True:
    line = sys.stdin.readline().strip()
    if line == '':
        break
    ips.append((line.split('~')[0], line.split('~')[1]))
A = B = C = D = E = 0
error_ip = 0
key = 0
for ip in ips:
    ip_l = ip[0].split('.')
    # 忽略ip
    if ip_l[0] == '0' or ip_l[0] == '127':
        continue
    # 验证ip非法
    if '' in ip_l:
        error_ip += 1
        continue
    else:
        if any([int(i) < 0 or int(i) > 255 for i in ip_l]):
            error_ip += 1
            continue
    # 验证子网掩码是否非法
    ip_k = ''
    for j in ip[1].split('.'):
        b = str(bin(int(j))).lstrip('0b')
        if len(b) < 8:
            b = '0' * (8 - len(b)) + b
        ip_k += b
    if ip_k.lstrip('1').lstrip('0') != '' or all([i == '1' for i in ip_k]) or all([i == '0' for i in ip_k]):
        error_ip += 1
        continue
    # 分类
    if int(ip_l[0]) >= 1 and int(ip_l[0]) <= 126:
        A += 1
    elif int(ip_l[0]) >= 128 and int(ip_l[0]) <= 191:
        B += 1
    elif int(ip_l[0]) >= 192 and int(ip_l[0]) <= 223:
        C += 1
    elif int(ip_l[0]) >= 224 and int(ip_l[0]) <= 239:
        D += 1
    elif int(ip_l[0]) >= 240 and int(ip_l[0]) <= 255:
        E += 1
    # 私有ip
    if ip_l[0] == '10' or (ip_l[0] == '172' and int(ip_l[1]) in range(16, 33)) \
            or (ip_l[0] == '192' and int(ip_l[1]) == 168):
        key += 1
print(A, B, C, D, E, error_ip, key)

原题链接:

https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682?tpId=37&tqId=21240&rp=1&ru=%2Fexam%2Foj%2Fta&qru=%2Fexam%2Foj%2Fta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26tpId%3D37%26type%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值