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

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

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

import sys
res = [0 for i in range(7)]
"""
A 0
B 1
C 2
D 3
E 4
error_ip or error_mask 5
private ip :6
"""
def checkIP_Class(ip_list):
    if 1 <= ip_list[0] <= 126:
        res[0] += 1  # A
    if 128 <= ip_list[0] <= 191:
        res[1] += 1  # B
    if 192 <= ip_list[0] <= 223:
        res[2] += 1  # C
    if 224 <= ip_list[0] <= 239:
        res[3] += 1  # D
    if 240 <= ip_list[0] <= 255:
        res[4] += 1  # E
    # priveate ip_addr
    if (ip_list[0] == 10 and 0 <= ip_list[1] <= 255)\
        or (ip_list[0] == 172 and 16 <= ip_list[1] <= 31)\
        or (ip_list[0] == 192 and ip_list[1] == 168):
        res[6] += 1
# mask: list[int]
def checkMask(mask: list[int]):
    mask_value = (mask[0] << 24) + (mask[1] << 16) + (mask[2] << 8) + mask[3]
    # print(mask_value)
    mask_bin = bin(mask_value)[2:]
    # print(mask_bin)
    s0 = mask_bin.find("0")  # 返回最低位索引
    s1 = mask_bin.rfind("1")  # 返回最高位索引
    if s0 != -1 and s1 != -1 and s0 - s1 == 1:
        return True
    return False
for line in sys.stdin:
    ip, mask = line.strip().split("~")
    ip = [int(x) for x in ip.split(".") if x]
    mask = [int(x) for x in mask.split(".") if x]
    if ip[0]==0 or ip[0]==127:  #判断不计数的IP addr
        continue
    if len(ip) < 4 or len(mask) < 4:
        res[5] += 1
        continue
    if checkMask(mask):
        checkIP_Class(ip)
    else:
        res[5] += 1
print(*res)

全部评论

相关推荐

2025-12-29 20:37
已编辑
清华大学附属小学 Java
哇哇的菜鸡oc:1.为什么要写这么多内容呀 2.什么叫做简历 3.什么样的内容可以写到简历上 4.项目可以包装,但是要有理有据呀,不能乱包装呀,比如 跨境能达到日均120万订单的在国内都是能叫的上名字的,而且这些工作也基本上不太会交给一个实习生去做 建议友友可以去网上或者找同学的简历看看,他们的简历是怎么写的,去找找上面的那四个问题的答案吧,然后要记住的是Java是服务于业务的,而不是服务于微服务或者技术的
最后再改一次简历
点赞 评论 收藏
分享
想run的马里奥在学...:这个学历帮你扫平百分之80的障碍,投就完了,这会找不到就等3月暑期一样能找到
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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