Problem D: IP地址合法性和网络类别检查

Problem Description

IP地址就是给每个连接在互联网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围是唯一的32位的标识符。
“分类的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()

 

 

 

posted @ 2023-04-24 16:29  hangsingplus  Views(32)  Comments(0Edit  收藏  举报