【问题标题】:How to update a list when using for loops in python在python中使用for循环时如何更新列表
【发布时间】:2020-06-07 12:16:46
【问题描述】:

我正在制作一个旨在使用函数解决单词搜索的程序。我从函数 find_horizo​​ntal 得到的输出 是:

['********RRIRAI', 'FUNCTIONRRIRAI', 'RAIOONFRCCPWON', 'PTCSNOBEUITOLO', 'BNCACIANTOSLIH', 'RBYOLILYNREFBT', 'HYYNOGESTIBRIY', 'AATTSIONCMCENP', 'UORTENRRCBFVAU', 'CEBEECVWIERORI', '*********TOPYF', 'PROCESSORTOPYF', 'OH********HSOS', 'OHCOMPUTERHSOS', 'YCYPRESREOSMRW', 'OATHBRMVTHHCTR', 'PGORWOOUIPSCHP']

问题是它已经将行添加到列表 Outpuz 一次,找到的单词被划掉,然后第二次在它被划掉之前。我想要的输出是:

['********RRIRAI', 'RAIOONFRCCPWON', 'PTCSNOBEUITOLO', 'BNCACIANTOSLIH', 'RBYOLILYNREFBT', 'HYYNOGESTIBRIY', 'AATTSIONCMCENP', 'UORTENRRCBFVAU', 'CEBEECVWIERORI', '*********TOPYF', 'OH********HSOS', 'YCYPRESREOSMRW', 'OATHBRMVTHHCTR', 'PGORWOOUIPSCHP']

这是我的完整代码:

if __name__ == '__main__':
    Puzzle = ["FUNCTIONRRIRAI",
              "RAIOONFRCCPWON",
              "PTCSNOBEUITOLO",
              "BNCACIANTOSLIH",
              "RBYOLILYNREFBT",
              "HYYNOGESTIBRIY",
              "AATTSIONCMCENP",
              "UORTENRRCBFVAU",
              "CEBEECVWIERORI",
              "PROCESSORTOPYF",
              "OHCOMPUTERHSOS",
              "YCYPRESREOSMRW",
              "OATHBRMVTHHCTR",
              "PGORWOOUIPSCHP"]


def load_words_to_find(file_name):
    word_list = []
    file = open(file_name, "r")
    for line in file.readlines():
        word_list.append(line)
    word_list = list(map(lambda s: s.strip(), word_list))
    return word_list


def find_horizontal(Puzzle, Words, ReplaceWith, Found):
    # Parameters :- List:Puzzle, List:Words, Character:ReplaceWith, List:Found
    # Return :- List:Outpuz, List:Found
    # Find all words which are horizontally in place (left to right and right to left), return the puzzle and list of found words
    add = True
    Outpuz = []
    for line in Puzzle:
        for word in Words:
            if word in line:
                Found.append(word)
                print("Found: ", word)
                Outpuz.append(line.replace(word,ReplaceWith*len(word)))
                add = False
        if not add:
            pass
        elif add:
            Outpuz.append(line)


        Outpuz.append(line)
    print(Outpuz)

    return Outpuz, Found


find_horizontal(Puzzle, load_words_to_find("words.txt"), "*", [])

【问题讨论】:

    标签: python list function for-loop append


    【解决方案1】:

    大约一年前我做过类似的事情。

    https://github.com/BenMcLean981/Python-Wordsearch

    我认为问题在于 Outpuz.append(line) 只是将拼图的每一行添加到输出。

    你的文件名是什么?发现了什么,Outpuz 应该是什么? Found 我猜是它在拼图中找到的单词列表。但那有什么结果呢?

    从这里改变它:

    if word in line:
        Found.append(word)
        print("Found: ", word)
        Outpuz.append(line.replace(word,ReplaceWith*len(word)))
        add = False
    if not add:
        pass
    elif add:
        Outpuz.append(line)
    Outpuz.append(line
    
    
    Outpuz.append(line)
    

    到这里:

    if word in line:
        Found.append(word)
        print("Found: ", word)
        Outpuz.append(line.replace(word,ReplaceWith*len(word)))
        #Adds the line if it has the change
    else:
        Outpuz.append(line) #Adds the line if it doesnt have the change.
    

    【讨论】:

    • 我不确定你的文件名是什么意思,你能澄清一下吗?您对 found 是正确的,并且 Outpuz 应该是更新的单词搜索(它用于大学家庭作业,我的老师设计了代码来为他自己标记它,所以我无法更改返回名称,所以我假设它是更新的单词搜索)
    • 查看我的编辑,堆栈溢出的新手,所以不确定我是否正确使用它。
    • 我更改了我的代码,所以现在如果找到它会将其添加到 Outpuz 但如果未找到(如果单词不在行/其他中)添加该行但它仍然添加该行甚至找到时:
    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    相关资源
    最近更新 更多