【问题标题】:Python for looping to while loopingPython for 循环到 while 循环
【发布时间】:2012-09-19 21:01:30
【问题描述】:

我需要一些帮助才能将以下代码转换为更易于管理的代码。 我很确定我需要修改它以包含一些 while 语句。但是在最后一天左右一直把我的头撞到墙上。我想我已经接近了......

for LevelItemList[1] in LevelUrlList[1]:
if LevelItemList[1][1] == "Folder":
    printFolderHeader(1,LevelItemList[1][0])
    LevelUrlList[2] = parseHTML (LevelItemList[1][2])

    for LevelItemList[2] in LevelUrlList[2]:
        if LevelItemList[2][1] == "Folder":
            printFolderHeader(2,LevelItemList[2][0])
            LevelUrlList[3] = parseHTML (LevelItemList[2][2])

            for LevelItemList[3] in LevelUrlList[3]:
                if LevelItemList[3][1] == "Folder":
                    printFolderHeader(3,LevelItemList[3][0])
                    LevelUrlList[4] = parseHTML (LevelItemList[3][2])

                    for LevelItemList[4] in LevelUrlList[4]:
                        if LevelItemList[4][1] == "Folder":
                            printFolderHeader(4,LevelItemList[4][0])
                            LevelUrlList[5] = parseHTML (LevelItemList[4][2])

                            for LevelItemList[5] in LevelUrlList[5]:
                                if LevelItemList[5][1] == "Folder":
                                    printFolderHeader(5,LevelItemList[5][0])
                                    LevelUrlList[6] = parseHTML (LevelItemList[5][2])

                                    for LevelItemList[6] in LevelUrlList[6]:
                                        printPage(6,LevelItemList[6][0])

                                    printFolderFooter(5,LevelItemList[5][0])

                                else:
                                    printPage(5,LevelItemList[5][0])
                            printFolderFooter(4,LevelItemList[4][0])                                
                        else:   
                            printPage(4,LevelItemList[4][0])
                    printFolderFooter(3,LevelItemList[3][0])

                else:
                    printPage(3,LevelItemList[3][0])
            printFolderFooter(2,LevelItemList[2][0])

        else:
            printPage(2,LevelItemList[2][0])
    printFolderFooter(1,LevelItemList[1][0])

else:
    printPage(1,LevelItemList[1][0])

【问题讨论】:

  • 或者递归...看起来你正在遍历一个目录树。
  • 递归看起来像我要走的路。
  • 如果这段代码有效,它可能更适合codereview.stackexchange,但我想我们会等着看其他人是否同意......
  • 是什么让您认为将for 语句转换为while 语句会有所帮助?如果我们知道这一点,那可能会给我们一个线索,让我们知道该看什么。
  • 上面的代码确实有效。不知道 codereview.stackexchange。目前,每个“级别”都有很多代码重复。随着越来越多的条件增加重复,变得越来越大。因此试图简化它,以便 If 案例只启动一次并且只迭代 X 次。

标签: python loops if-statement while-loop


【解决方案1】:

我没有完整的代码上下文,但我认为您可以将其简化为以下内容:

def printTheList(LevelItemList, index):
    for item in LevelItemList:
        if item[1] == "Folder":
            printFolderHeader(index,item[0])
            printTheList(parseHTML (item[2]), index + 1) # note the + 1
            printFolderFooter(index,item[0])
        else:
            printPage(index,item[0])

# and the initial call looks like this.
printTheList(LevelUrlList[1], 1)

此代码假设您实际上不需要像在代码中那样将值分配给 LevelUrlList 和 LevelItemList。如果您以后确实需要该数据,我建议传入不同的数据结构来保存结果值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 2014-08-21
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多