如何修复python中的for循环输出

时间:2019-05-31 18:48:58

标签: python for-loop

我在测试实验室环境中有3个路由器,我试图到达这些路由器并使用for-loop发送一些命令,并以键入/列出它们的方式发送输出。

我有3台1841思科路由器并运行12.4 IOS:

    multi_ip_addr = ['192.168.1.1', '192.168.2.1', '192.168.3.1']
    for ips in multi_ip_addr:
        pass
    len_ip_addr = len(multi_ip_addr)
    for len_ip in range(len_ip_addr):
        device = {'ip': ips, 
        'username': 'admin', 
        'password': 'password'}
        print(device)

我的预期结果是:

{'ip': '192.168.1.1', 'username': 'admin', 'password': 'password'} {'ip': '192.168.2.1', 'username': 'admin', 'password': 'password'} {'ip': '192.168.3.1', 'username': 'admin', 'password': 'password'}

但是我得到的输出是

{'ip': '192.168.3.1', 'username': 'admin', 'password': 'password'} {'ip': '192.168.3.1', 'username': 'admin', 'password': 'password'} {'ip': '192.168.3.1', 'username': 'admin', 'password': 'password'}

4 个答案:

答案 0 :(得分:2)

multi_ip_addr = ['192.168.1.1', '192.168.2.1', '192.168.3.1']
for ips in multi_ip_addr:
    device = {'ip':ips, 'username':'admin', 'password':'password'}
    print(device)

答案 1 :(得分:2)

您需要从IP列表中删除该项目。为此,请使用for循环,而不是范围:

for ip in multi_ip_addr:
    device = {
        'ip': ip,
        'username': 'admin',
        'password': 'password'
    }
    print(device)

第一个for循环将在每个循环上覆盖ips的值,因此实际上在循环结束时,ips等于multi_ip_addr的最后一个值。

答案 2 :(得分:1)

for ips in multi_ip_addr:
    pass

在执行此循环时,ips接受multi_ip_addr中每个项目的值。循环结束时,ips保留最后一项的值。

在下一个循环中,您永远不会更改ips的值,因此每次都具有相同的值。

答案 3 :(得分:0)

Python使用缩进来确定上下文,因此,如果要为每个条目使用ips变量,则需要在for ips in multi_ip_addr上下文中进行操作(当前只有pass 。)如果您是我,我也可能将ips的名称更改为ip,只是为了使情况更清楚。

这是我重写循环的方法:

template_dict = {'ip' : None, 'username' : 'admin', 'password' : 'password'}
multi_ip_addr = ['192.168.1.1', '192.168.2.1', '192.168.3.1']

for ip in multi_ip_addr:
    print(template_dict.update({'ip' : ip})

与JS的比较:

使用range(len(multi_ip_addr))将为您提供一组索引值,但这对于您要完成的工作不是必需的。如果您熟悉JavaScript,则python中的默认for循环行为类似于使用for...of模式:

EX:

for (let i of <some_iterable>) {
    console.log(i);
}

等同于:

for i in <some_iterable>:
    print(i)