找个工作要会这个要会那个,真尼玛难…
从头开始吧,python以前没学过但是很看好,以后用的人越来越多,毕竟太容易上手了,咱也不能落伍了,拿华为机试题练手吧!
题目:
请解析IP地址和对应的掩码,进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。
所有的IP地址划分为 A,B,C,D,E五类
A类地址1.0.0.0~126.255.255.255;
B类地址128.0.0.0~191.255.255.255;
C类地址192.0.0.0~223.255.255.255;
D类地址224.0.0.0~239.255.255.255;
E类地址240.0.0.0~255.255.255.255
私网IP范围是:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
多行字符串。每行一个IP地址和掩码,用~隔开。
统计A、B、C、D、E、错误IP地址或错误掩码、私有IP的个数,之间以空格隔开。
#!/usr/bin/python # -*- coding: utf-8 -* import sys A=0 B=0 C=0 D=0 E=0 error=0 privateIp=0 lastcode=[‘254‘,‘252‘,‘248‘,‘240‘,‘224‘,‘192‘,‘128‘,‘0‘] def CheckIp(ip): if len(ip) !=4 or ‘‘ in ip: return False else: for i in range(4): if int(ip[i]) < 0 or int(ip[i]) > 255: return False else: return True def CheckMask(mask): if len(mask)!=4: return False else: if mask[0]==‘255‘: if mask[1]==‘255‘: if mask[2]==‘255‘: if mask[3] in lastcode: return True else: return False elif mask[2] in lastcode and mask[3]==‘0‘: return True else: return False elif mask[1] in lastcode and mask[2]==mask[3]==‘0‘: return True else: return False elif mask[0] in lastcode and mask[1]==mask[2]==mask[3]==‘0‘: return True else: return False while True: Input= sys.stdin.readline().strip() if Input == ‘‘: break ipList=Input.split(‘~‘)[0] maskList=Input.split(‘~‘)[1] ip=ipList.split(‘.‘) mask=maskList.split(‘.‘) if CheckIp(ip) and CheckMask(mask): if 1<=int(ip[0])<=126: A+=1 if 128<=int(ip[0])<=191: B+=1 if 192<=int(ip[0])<=223: C+=1 if 224<=int(ip[0])<=239: D+=1 if 240<=int(ip[0])<=255: E+=1 if int(ip[0])==10 or (int(ip[0])==172 and 16<=int(ip[1])<=31) or (int(ip[0])==192 and int(ip[1])==168): privateIp+=1 else: error+=1 print(Input) print(‘{} {} {} {} {} {} {}‘.format(A,B,C,D,E,privateIp,error))
总结:
新手上路,所以走了很多弯路,python函数、循环均没有{}大括号进行组织,所以如果你是像我一样习惯用c#或Java,那刚开始大概率我尼玛了,因为代码没对齐可能得出的结果会截然不同,所以多注意下吧,其他没什么了,反正感觉只要懂点英文都能写了…
原文:https://www.cnblogs.com/Alwaysblue/p/12173475.html