题解 | #识别有效的IP地址和掩码并进行分类统计#

识别有效的IP地址和掩码并进行分类统计

https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682



def check_mask(mask):
    # -1非法 1合法
    # 掩码
    if check_ip(mask) == -1:
        return -1
    if mask in ["255.255.255.255", "0.0.0.0"]:
        return -1

    mask_sp = mask.split('.')
    if len(mask_sp) !=4:
        return -1
    temp_s = ""
    for m in mask_sp:
        temp_s += bin(int(m))[2:].rjust(8,'0')  # "0b001" 去掉0b 补齐八位
    # 1111000
    if temp_s[temp_s.index('0'):].count('1') != 0:
        return -1

    return 1


def check_ip(ip):
    ip_sp = ip.split('.')
    if len(ip_sp) != 4 or '' in ip_sp:
        return -1
    for i in ip_sp:
        if int(i) < 0 or int(i) > 255:
            return -1

    return 1


error = 0
private = 0
kind_ct = [0, 0, 0, 0, 0]
while True:
    try:
        ip, mask = input().split('~')
        if ip.split('.')[0] in ['0','127']:
            continue
        elif check_ip(ip) == -1 or check_mask(mask) == -1:
            error += 1
        elif check_ip(ip) == 1 and check_mask(mask) == 1:
            ip_sp = list(map(int, ip.split('.')))
            if ip_sp[0] <= 126:
                kind_ct[0] += 1
            elif ip_sp[0] <= 191:
                kind_ct[1] += 1
            elif ip_sp[0] <= 223:
                kind_ct[2] += 1
            elif ip_sp[0] <= 239:
                kind_ct[3] += 1
            elif ip_sp[0] <= 255:
                kind_ct[4] += 1

            if ip_sp[0] == 10:
                private += 1
            elif ip_sp[0] == 172 and 16 <= ip_sp[1] <= 32:
                private += 1
            elif ip_sp[0] == 192 and ip_sp[1] == 168:
                private += 1

    except:
        break


out = kind_ct + [error] + [private]
for n in out:
    print(n, end=" ")

全部评论

相关推荐

牛至超人:把哈工大,再加大加粗,看见闪闪发光的哈工大字样,面试官直接流口水
投递字节跳动等公司6个岗位
点赞 评论 收藏
分享
11-28 16:00
已编辑
武汉理工大学 Java
想干测开的tomca...:这份简历是“短期项目硬堆中大型系统技术”的“技术炫技式造假模板”,槽点密集到能当反面教材: ### 1. 「项目时长」和「技术密度」严重脱节,造假痕迹焊死在简历上 两个项目时长分别是**3个月、2个月**,但堆了Spring AI、Elasticsearch、MinIO、Kafka、ShardingSphere、Docker、Sentinel等近20个中大型项目才用的技术——正常情况下,光把这些中间件的文档看完+环境搭好,3个月都不够,更别说实现“AI多轮对话、分库分表、RBAC权限、大模型调用”这些功能。 说白了:你这不是“做项目”,是把“后端技术栈清单”往项目里硬塞,明摆着“只调用了API,没碰过核心逻辑”。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务