【问题标题】:importing random words from a file without duplicates Python从文件中导入随机单词而不重复Python
【发布时间】:2016-04-07 12:08:14
【问题描述】:

我正在尝试创建一个程序,该程序从包含 10 多个单词的文本文件中选择 10 个单词。在从文本文件中导入这 10 个单词时,为了程序的目的,我不能两次导入相同的单词!目前我正在为此使用一个列表,但是似乎出现了相同的单词。我对集合有一些了解,并且知道它们不能两次保持相同的值。到目前为止,我对如何解决这个问题一无所知,任何帮助将不胜感激。谢谢!

请在下面找到相关代码! -(p.s.FileSelection基本上是打开文件对话框)

def GameStage03_E():
    global WordList
    if WrdCount >= 10:
        WordList = []
        for n in range(0,10):
            FileLines = open(FileSelection).read().splitlines()
            RandWrd = random.choice(FileLines)
            WordList.append(RandWrd)
        SelectButton.destroy()
        GameStage01Button.destroy()
        GameStage04_E()
    elif WrdCount <= 10:
        tkinter.messagebox.showinfo("ERROR", " Insufficient Amount Of Words Within Your Text File! ")

【问题讨论】:

    标签: python list random set text-files


    【解决方案1】:

    WordList 设为set:

    WordList = set()
    

    然后update 设置而不是附加:

    WordList.update(set([RandWrd]))
    

    当然,WordList 对于一个系列来说是个坏名字。

    还有一些其他问题:

    • 不要对变量和函数使用大写名称(遵循PEP8
    • 如果在循环中两次绘制相同的单词会发生什么?如果单词可能出现多次,则无法保证 WordList 在循环完成后将包含 10 个项目。

    后者可以通过将循环更改为:

        while len(WordList) < 10:
            FileLines = open(FileSelection).read().splitlines()
            RandWrd = random.choice(FileLines)
            WordList.update(set([RandWrd]))
    

    不过,您必须考虑到根本不存在 10 个不同的词。

    即使这样,循环仍然会非常低效,因为您可能会一遍又一遍地使用random.choice(FileLines) 绘制相同的单词。但也许你可以以此为基础。

    【讨论】:

    • 是的,我知道这会是个问题……只是想可能有办法解决它……有没有办法限制一组单词的数量?
    • 为什么不在每次迭代中检查集合的长度,超过限制就中断?
    • 对于一切的热爱,你能告诉我怎么做吗?我认为这种反应让我坠入爱河 XD 我不能感谢你足够的人!
    【解决方案2】:

    我不确定我是否理解你的意思,但是呵呵, 第 3 行:“如果 wrdcount”。 .你在哪里给 wrdcount 一个值? 也许你打算按照下面的路线做点什么?:

    wordset = {}
    wrdcount = len(wordset)
    while wrdcount < 10:
        # do some work to update the setcode here
        # when end-of-file break
    

    【讨论】:

    • wrdcount 是前一个变量 g
    • hmm,但是您的函数没有“全局 wrdcount”,因此在函数内部 wrdcount 没有任何值。此外,当您需要 10 个值时,可以使用“while”直到获得 10 个值?
    • wrdcount 不是这里的问题
    猜你喜欢
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 2018-03-26
    • 2011-06-19
    相关资源
    最近更新 更多