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
Hint
我的想法:
我的代码:
# 定义一个集合用来装输入的多行数据
def add_data():
data = []
while True:
try:
a = input()
# 读取一行信息
if a == '':
break
# 如果a是空的则跳出循环
a = a.split('.',4)
# 将a按照.来切割为数组,数组中的元素为4个
data.append(a)
# 将数组装入集合中
except:
break
return data
def date_panduan(e1, e2, e3):
if 0 <= e1 <= 255:
if 0 <= e2 <= 255:
if 0 <= e3 <= 255:
return True
return False
def printf(date):
for e1 in date:
e = []
for i in range(0, 4):
e.append(int(e1[i]))
if 0 <= e[0] <= 127:
if date_panduan(e[1], e[2], e[3]):
print("A")
continue
elif 128 <= e[0] <= 191:
if date_panduan(e[1], e[2], e[3]):
print("B")
continue
elif 192 <= e[0] <= 223:
if date_panduan(e[1], e[2], e[3]):
print("C")
continue
elif 224 <= e[0] <= 239:
if date_panduan(e[1], e[2], e[3]):
print("D")
continue
elif 240 <= e[0] <= 255:
if date_panduan(e[1], e[2], e[3]):
print("E")
continue
print("NO")
if __name__ == '__main__':
date = add_data()
printf(date)