【发布时间】:2017-02-28 14:31:19
【问题描述】:
我编写了一个脚本来下拉 aws 标签列表,然后读取最后一个八位字节并告诉我哪个是最高 IP。例如。这是返回的标签列表:
['vlslabmc, 172.16.0.13/24', 'vlslabmc,172.16.0.5/24', 'vlslabmc,172.16.0.3/24', 'vlslabmc,172.16.0.12/24', 'vlslabmc,172.16.0.16/24', 'vlslabmc,172.16.0.6/24', 'vlslabmc,172.16.0.1/24', 'vlslabmc,172.16.0.11/24', 'vlslabmc,172.16.0.15/24', 'vlslabmc,172.16.0.17/24', 'vlslabmc,172.16.0.4/24', 'vlslabmc,172.16.0.7/24', 'vlslabmc,172.16.0.10/24', 'vlslabmc,172.16.0.9/24', 'vlslabmc,172.16.0.8/24', 'vlslabmc,172.16.0.2/24', 'vlslabmc,172.16.0.14/24']
这是我从 tagLis 中锻炼最大 IP 的代码(注意最大的是 17, 172.16.0.17)
21 def findLargestIP():
22 for i in tagList:
23 #remove all the spacing in the tags
24 ec2Tags = i.strip()
25 #seperate any multiple tags
26 ec2SingleTag = ec2Tags.split(',')
27 #find the last octect of the ip address
28 fullIPTag = ec2SingleTag[1].split('.')
29 #remove the CIDR from ip to get the last octect
30 lastIPsTag = fullIPTag[3].split('/')
31 lastOctect = lastIPsTag[0]
32 ipList.append(lastOctect)
33 largestIP = int(ipList[0])
34 for latestIP in ipList:
35 if int(latestIP) > largestIP:
36 largestIP = latestIP
37 return largestIP
我不知道为什么.. 但是当我打印最大 IP 的值时,它总是打印出 16。我已经完成了它应该工作的代码 (我避免使用 max 函数,因为我是只是学习编码)
非常感谢任何帮助。
谢谢
编辑下面的答案和一个问题
好的,多亏了 cmarie 的提示,我得到了它的工作,问题主要是
33 largestIP = int(ipList[0])
这是之前运行的代码,在列表 append 中添加了打印语句:
'13']
['13', '5']
['13', '5', '3']
['13', '5', '3', '12']
['13', '5', '3', '12', '16']
16
['13', '5', '3', '12', '16', '6']
16
['13', '5', '3', '12', '16', '6', '1']
16
['13', '5', '3', '12', '16', '6', '1', '11']
16
... ...
['13', '5', '3', '12', '16', '6', '1', '11', '15', '17', '4', '7', '10', '9', '8', '2']
16
['13', '5', '3', '12', '16', '6', '1', '11', '15', '17', '4', '7', '10', '9', '8', '2', '14']
16
基本上发生的事情是在这个循环中:
33 largestIP = int(ipList[0])
34 for latestIP in ipList:
35 if int(latestIP) > largestIP:
36 largestIP = latestIP
循环在第一个最大的整数处停止。在这种情况下是 16。*我不知道为什么会这样,但确实如此
这是工作代码:
19 def findLargestIP():
20 ipList =[]
21 for i in tagList:
22 #remove all the spacing in the tags
23 ec2Tags = i.strip()
24 #seperate any multiple tags
25 ec2SingleTag = ec2Tags.split(',')
26 #find the last octect of the ip address
27 fullIPTag = ec2SingleTag[1].split('.')
28 #remove the CIDR from ip to get the last octect
29 lastIPsTag = fullIPTag[3].split('/')
30 lastOctect = lastIPsTag[0]
31 ipList.append(int(lastOctect))
32 print ipList
33 largestIP = 0
34 for latestIP in ipList:
35 if latestIP > largestIP:
36 largestIP = latestIP
37 print latestIP
38 print largestIP
39 return largestIP
结果:
[13, 5, 3, 12, 16]
13
16
[13, 5, 3, 12, 16, 6]
13
16
[13, 5, 3, 12, 16, 6, 1]
13
16
[13, 5, 3, 12, 16, 6, 1, 11]
13
16
[13, 5, 3, 12, 16, 6, 1, 11, 15]
13
16
[13, 5, 3, 12, 16, 6, 1, 11, 15, 17]
13
16
17
注意它找到了 17。
【问题讨论】: