Problem D: IP地址合法性和网络类别检查
Problem Description
IP地址就是给每个连接在互联网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围是唯一的32位的标识符。
“分类的IP地址”就是将IP地址划分为若干个固定类,每一类地址都由两个固定长度的字段组成,其中第一个字段是网络号net-id,它标志主机(或路由器)所连接到的网络,第二个字段是主机号host-id,它标志该主机(或路由器)。
一个网络号在整个互联网范围内必须是唯一的,一台主机号在它前面的网络号所指明的网络范围内必须是唯一的,因此,一个IP地址在整个互联网范围内是唯一的。
IP地址分为五类,即A、B、C、D、E。其中A类、B类和C类地址为基本地址。
“分类的IP地址”就是将IP地址划分为若干个固定类,每一类地址都由两个固定长度的字段组成,其中第一个字段是网络号net-id,它标志主机(或路由器)所连接到的网络,第二个字段是主机号host-id,它标志该主机(或路由器)。
一个网络号在整个互联网范围内必须是唯一的,一台主机号在它前面的网络号所指明的网络范围内必须是唯一的,因此,一个IP地址在整个互联网范围内是唯一的。
IP地址分为五类,即A、B、C、D、E。其中A类、B类和C类地址为基本地址。
对主机或路由器来说,IP地址都是32位的二进制。为了提高IP地址的可读性,把32位的IP地址分成4个字节,每个字节用一个十进制数(0-255)来表示,而且在这些十进制数之间加一个点。叫做点分十进制记法。
现在给你若干个IP地址,编写程序判定这些IP地址的合法性,如果是合法的还需判断它的网络类别。
Input Description
输入数据有多组,每组一行,为一个点分十进制表示的IP地址。
Output Description
对每组输入数据,如果不是合法的IP地址,输出"NO";是合法的IP地址,输出所属的网络类别。每组输入数据输出一行。
Sample Input
127.0.0.1
192.168.0.1
200.256.6.2
Sample Output
A
C
NO
ac代码
1 def Islegal(a): 2 ip = list(map(int,a)) 3 flag = 0 #标志是否合法 4 if 0<=ip[0]<=255: 5 if 0<=ip[1]<=255: 6 if 0 <= ip[2] <= 255: 7 if 0 <= ip[3] <= 255: 8 flag = 1 9 if flag==0: 10 print("NO") 11 return 12 if ip[0]<=127: 13 print("A") 14 return 15 if 128<=ip[0]<=191: 16 print("B") 17 return 18 if 192<=ip[0]<=223: 19 print("C") 20 return 21 if 224<=ip[0]<=239: 22 print("D") 23 return 24 if 240 <= ip[0] <= 255: 25 print("E") 26 return 27 28 def func(): 29 while True: 30 #EOFError的作用就是执行到文件末尾然后抛出异常 31 #try...except捕捉到异常然后执行break语句终止循环 32 try: 33 a = input() 34 a = a.split('.',3) 35 Islegal(a) 36 except EOFError: 37 break 38 39 40 if __name__ == '__main__': 41 func()