达到条件时,while循环不会终止

时间:2019-07-16 15:33:18

标签: python while-loop

条件变为真后,我的while循环没有终止。我正在检查列表中的空格。如果空格等于1,则应从while循环终止。

config_index = 0
push_configs = ['  dns-server 8.8.8.8 ', ' ip dhcp pool WIRELESS', '  network 10.99.99.0 255.255.255.0', '  default-router 10.99.99.1 ', '  dns-server 8.8.8.8 ', '  ip dhcp pool HUMAN_RESOURCE ', '   network 10.88.88.0 255.255.255.0', '   default-router 10.88.88.1 ', '   dns-server 8.8.8.8 ']

whitespace = len(push_configs[config_index]) - len(push_configs[config_index].lstrip())
while(whitespace != 1):
    print whitespace
    push_configs.pop(config_index)
    config_index = config_index + 1
    whitespace = len(push_configs[config_index]) - len(push_configs[config_index].lstrip())
    print whitespace

结果

2
'  dns-server 8.8.8.8 '
2
2
'  network 10.99.99.0 255.255.255.0'
2
2
'  dns-server 8.8.8.8 '
3
3
'   network 10.88.88.0 255.255.255.0'
3
3
'   dns-server 8.8.8.8 '
Traceback (most recent call last):
  File "<stdin>", line 5, in <module>
IndexError: list index out of range
>>> push_configs
[' ip dhcp pool WIRELESS', '  default-router 10.99.99.1 ', '  ip dhcp pool HUMAN_RESOURCE ', '   default-router 10.88.88.1 ']

如您所见,它将继续遍历整个列表,直到达到“列表索引超出范围”为止。给定列表push_configs,一旦到达第二个元素,所需的结果将是从while循环终止。

3 个答案:

答案 0 :(得分:2)

有一些原因导致此问题。首先是您在遍历列表时对其进行变异。这就是为什么它不在列表的项目2(索引0)的空白处出现的原因。您增加索引并弹出使第2项变成第1项的第一个项目,然后检查没有条件终止的第2项(以前是第3项)。

您在config_index上也没有限制,允许它超出列表范围。

最好使用for循环

push_configs = ['  dns-server 8.8.8.8 ', ' ip dhcp pool WIRELESS', '  network 10.99.99.0 255.255.255.0', '  default-router 10.99.99.1 ', '  dns-server 8.8.8.8 ', '  ip dhcp pool HUMAN_RESOURCE ', '   network 10.88.88.0 255.255.255.0', '   default-router 10.88.88.1 ', '   dns-server 8.8.8.8 ']
for config in push_configs:
    white_space = len(config) - len(config.lstrip())
    if white_space == 1:
        break # breaks on element 2
    # do other stuff here

    print(config, white_space)

答案 1 :(得分:0)

您的问题是您要从列表中删除项目,但仍在增加索引。改为这样做:

push_configs = ['  dns-server 8.8.8.8 ', ' ip dhcp pool WIRELESS', '  network 10.99.99.0 255.255.255.0', '  default-router 10.99.99.1 ', '  dns-server 8.8.8.8 ', '  ip dhcp pool HUMAN_RESOURCE ', '   network 10.88.88.0 255.255.255.0', '   default-router 10.88.88.1 ', '   dns-server 8.8.8.8 ']

whitespace = len(push_configs[0]) - len(push_configs[0].lstrip())
while(whitespace != 1):
   print whitespace
   push_configs.pop(config_index)
   whitespace = len(push_configs[0]) - len(push_configs[0].lstrip())
   print whitespace

答案 2 :(得分:0)

我看到有两个问题:首先,您弹出并继续增加索引,其次,列表中可能没有元素只有1个空格。如果我误解了问题,请纠正我