首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >for-循环使用if语句遍历列表,只有列表的最后位置运行if语句。

for-循环使用if语句遍历列表,只有列表的最后位置运行if语句。
EN

Stack Overflow用户
提问于 2019-02-25 04:58:31
回答 1查看 54关注 0票数 0

这是我的列表,所以models [0], names[0], mac_addresses[0]都需要计算我需要的mac地址

代码语言:javascript
复制
models = ["MR18","MR32", "MR18"]
names = ["David", "Bob", "Frank"]
mac_addresses = ["00:18:0A:2C:3D:5F", "00:18:0A:2d:3c:5F", "00:18:0A:2A:3B:5F"]

这些函数应该根据哪个if语句是True来运行。

代码语言:javascript
复制
def calc18(mac_address, name, mr):
    #Mac Address Breakdown
    print(name)
    mac_calc = mac_address[:2]
    mac_extractor_front = mac_address[2:6]
    mac_extractor_back = mac_address[8:]

    flag = True

    First_Pos_Hex = first_hex_calc(mac_calc, mr, flag)

    #Initial Mac Addresses
    list_2_4.append(mac_address)
    list_5.append(First_Pos_Hex + mac_extractor_front + mr_18_5ghz + mac_extractor_back)

    flag = False
    #First Time Calculation hex updated
    hex_updater = first_hex_calc(mac_calc, mr, flag)

    list_2_4.append(hex_updater + mac_extractor_front + mr_18_24ghz + mac_extractor_back)
    list_5.append(hex_updater + mac_extractor_front + mr_18_5ghz + mac_extractor_back)

    #Update self, after appending mac addresses    
    for i in range(15):
        counter = i + 1
        hex_updater = hex_calc(hex_updater, mr) 
        list_2_4.append(hex_updater + mac_extractor_front + mr_18_24ghz + mac_extractor_back)
        list_5.append(hex_updater + mac_extractor_front + mr_18_5ghz + mac_extractor_back)
        print(str(counter) + ") 2.4ghz: " + list_2_4[i] + "\t" + str(counter) + ") 5 Ghz: " + list_5[i] )

        for i in range(len(list_2_4)):
            writer(name, mac_address, list_2_4[i], list_5[i], i)


def calc32(mac_address, name):
    #Mac Address Breakdown
    mac_calc = mac_address[15:17]
    mac_extractor_front = mac_address[:6]
    mac_extractor_back = mac_address[8:15]


    #Initial Mac Addresses
    list_2_4.append(mac_extractor_front + mr_32_24ghz + mac_extractor_back + mac_calc)
    list_5.append(mac_extractor_front + mr_32_5ghz + mac_extractor_back + mac_calc)


    #Update self, after appending mac addresses    
    for i in range(15):
        counter = i + 1
        mac_calc = hex_calc(mac_calc, mr) 
        list_2_4.append(mac_extractor_front + mr_32_24ghz + mac_extractor_back + mac_calc)
        list_5.append(mac_extractor_front + mr_32_5ghz + mac_extractor_back + mac_calc)
        print(str(counter) + ") 2.4ghz: " + list_2_4[i] + "\t" + str(counter) + ") 5 Ghz: " + list_5[i] )
        writer(name, mac_address, list_2_4[i], list_5[i], i)

现在我有了这个for-循环应该迭代models中的每个位置,然后检查if语句并执行一个特定的函数。

因此,第一次迭代models[0]"MR18"存储在其中,然后检查if语句并执行calc18(),在calc18()函数完成执行后,返回到for-循环,并运行下一个具有"MR32“的迭代,然后再次检查if语句并执行calc32()。然后,当calc32()完成执行时,转移到models[2]

但是在我的例子中,当我运行代码时,代表"MR18“的MR18运行在if语句中,完全忽略了models[0]models[1]

代码语言:javascript
复制
for num, mod in enumerate(models):
    print(mod)
    if mod == "MR18":
        print("I have entered")
        calc18(mac_addresses[num], names[num], mod)
    if mod == "MR32":
        print("I have entered 32")
        calc32(mac_addresses[num], names[num])

如果这仍然令人困惑,请告诉我,我不确定是否允许图片,如果允许,我可以画一个直观的例子:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-25 06:11:03

由于您的代码不能在我的系统上运行,所以我运行了一个更简单的代码版本,以说明您的代码确实应该遍历模型的每个元素。

代码语言:javascript
复制
models = ["MR18","MR32", "MR18"]
names = ["David", "Bob", "Frank"]
mac_addresses = ["00:18:0A:2C:3D:5F", "00:18:0A:2d:3c:5F", "00:18:0A:2A:3B:5F"]

def calc18(mac_address, name, mr):
    print("calc18 running")
    print(mac_address)
    print(name)
    print(mr)
def calc32(mac_address, name):
    print("calc32 running")
    print(mac_address)
    print(name)

for num, mod in enumerate(models):
    print(num)
    print(mod)
    if mod == "MR18":
        print("I have entered")
        calc18(mac_addresses[num], names[num], mod)
    if mod == "MR32":
        print("I have entered 32")
        calc32(mac_addresses[num], names[num])

生产:

代码语言:javascript
复制
0
MR18
I have entered
calc18 running
00:18:0A:2C:3D:5F
David
MR18
1
MR32
I have entered 32
calc32 running
00:18:0A:2d:3c:5F
Bob
2
MR18
I have entered
calc18 running
00:18:0A:2A:3B:5F
Frank
MR18

代码确实会遍历列表的每个元素。问题不应该出现在for循环中。

我在您的代码中看到了作者,您可能正在编写其中的一个文件。请检查它是设置为覆盖模式还是追加模式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54859712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档