Python for循环,两个if语句都需要执行

时间:2018-09-18 08:15:31

标签: python django for-loop

我编辑了问题,以便更轻松地理解问题。

我有一个django表,其中包含IP地址,并且必须实时显示当前允许或不允许的地址,并且根据状态,如果允许,则将其状态更改为不允许,反之亦然。

对于该功能,我有一个复选框列,该复选框在选中该行时会收集行列值(例如ip地址,id等),并使用提交按钮发布这些值(发布请求)。基本上,我需要执行telnet命令,通过使用复选框来允许/不允许IP。

在views.py中,我使用以下命令收集复选框的ID: pks = request.POST.getlist(“复选框”)。

然后我获得列表中行列的值。

selected_objects = Model.objects.filter(pk__in=pks)
result = [selected_objects.get(pk=item).column name for item in pks]
result2=...

之后,我运行telnet脚本。 在这里,我将路由器配置作为列表,与表中的ip地址进行比较(如果为loop-prefix_list-router configuration / liste-selected表ips中的if语句)。 同样在这里,我有tn.write命令,我正在尝试放置这些列表值。示例:

tn.write(b"no ip prefix-list LISTNAME seq " + result[y].encode('ascii') + b" permit " +result1[y].encode('ascii') + b"\n")

这里是for循环的发挥,因为我必须遍历这些列表(y是索引):

for y in range(len(result)):
    if [item for item in liste if item in prefix_list]:
        tn.write(b"no ip prefix-list LISTNAME seq " + result[y].encode('ascii') + b" permit " +result1[y].encode('ascii') + b"\n")
        time.sleep(1)
    if [item for item in liste if item not in prefix_list]:
        tn.write(b"ip prefix-list LISTNAME seq " + result[y].encode('ascii') + b" permit " +result1[y].encode('ascii') + b"\n")
        time.sleep(1)   

到目前为止,除了我允许一个IP地址而不允许另一个IP地址(当我仅允许或仅不允许脚本运行)时,其他所有内容都可以正常工作。

我绝不是专家,所以随时让我知道我做错了什么或可以做得更好。

2 个答案:

答案 0 :(得分:1)

  

如果其中一个if语句为true,它将忽略第二个if语句

您所描述的不是正确的,您将其与if elif(else if)构造相混淆。

示例:

x = 3
if x<5:
    print("<5")
elif x<10:
    print("<10")

vs

x = 3
if x<5:
    print("<5")
if x<10:
    print("<10")

在第一个示例中,由于<5条件为true,因此仅打印if,因此elif未被测试。在第二个示例中,如果条件是独立评估的,则有两个单独的条件。因此,由于同时满足两个条件,它将同时打印<5<10

答案 1 :(得分:0)

我找到了解决问题的方法。通过进行两次比较和两次for循环来解决此问题。