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

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

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

def ip_check(_ip_list):  # 无效ip跳过归类
    if len(_ip_list[0])==0:
        return True
    if int(_ip_list[0]) == 127 or int(_ip_list[0]) == 0:
#         print('无效ip')
        return False
    else:
        return True


def illegal_ip_check(_ip_list):  # 非法ip计入统计
    for i in _ip_list:
        if len(i) == 0:
#             print('非法ip')
            return True
#     print('有效法ip')
    return False


def illeagal_mask_check(_ip_list):  # 子网掩码非法计入统计
    temp_list = []
    for i in _ip_list:

            
        new_str=str(bin(int(i)))[2:]
        new_str =new_str.rjust(8)
        new_str=new_str.replace(' ','0')
#         print(new_str)
#         print(str(bin(int(i)))[2:])
        temp_list.append(new_str)
        
    temp_str = ''.join(temp_list)
#     print(temp_str)
    if temp_str[0] == '0':
#         print('无效掩码')
        return True

    if len(temp_str) == temp_str.count('1'):
#         print('无效掩码')
        return True
    elif temp_str[0] == '1':

        for i in range(len(temp_str)):
            if temp_str[i] == '0':
               
                for k in range(i, len(temp_str)):

                    while temp_str[k] != '0':

#                         print('无效掩码')

                        return True

#         print('有效掩码')
        return False
    return False

def abcde_type(_ip_list):

    num = int(_ip_list[0]) 
    if num >=1 and num <=126:
        return "A"
    if num >=128 and num <=191:
        return "B"
    if num >=192 and num <=223:
        return "C"
    if num >=224 and num <=239:
        return "D"
    if num >=240 and num <=255:
        return "E"

    
def p_type(_ip_list):

    num1 = int(_ip_list[0]) 
    num2 = int(_ip_list[1]) 
    
    if  num1 ==10:
#         print('私有')
        return True
    condition1 = num2>=16 and num2<31
    if num1==172 and condition1:
#         print('私有')
        return True
    if num1 ==192 and num2==168:
#         print('私有')
        return True
    
output_dict = {
            "A": 0,
            "B":0,
            "C":0,
            "D":0,
            "E":0,
            "Wrong":0,
            "P":0

        }
       
while True:
    try:
#         print('------------')
        input_str = input()
        ip, mask = input_str.split('~')
        ip_list = ip.split('.')
        mask_list = mask.split('.')
        
        if ip_check(ip_list):

            if illegal_ip_check(ip_list) or illeagal_mask_check(mask_list):
                output_dict['Wrong'] +=1
#                 print('Wrong')
                continue
#             print(abcde_type(ip_list))
            output_dict[abcde_type(ip_list)] +=1

            if p_type(ip_list):
                output_dict['P'] +=1
        else:
            continue
         
    except:
        break
# print(output_dict)
for i in output_dict.values():
            print(i,end=' ')

#华为机试#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务