繁体   English   中英

从文件中选择随机单词而不重复Python(集合)

[英]Choosing random words from a file without duplicates Python (sets)

我正在尝试创建一个程序,该程序从包含10个以上单词的文本文件中选择10个单词。 出于程序目的,从文本文件导入这10个单词时,我不能两次导入相同的单词! 目前,我正在为此使用一个集合,但是遇到语法错误。 我对集合有一定的了解,知道它们不能两次拥有相同的值。 到目前为止,我对如何解决此问题一无所知,将不胜感激。 谢谢!

相对代码:(FileSelection)=打开文件对话框

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

错误代码:

File "C:\Python34\lib\random.py", line 256, in choice
return seq[i]
`TypeError: 'set' object does not support indexing`

你可以只用random.sample2 / 3 ),所以你不必自己做。 您也不需要调用list bigblind答案的建议,因为random.sample可以将集合作为参数:

WordSet.update(random.sample(FileLines, 10))

这样,您可以使用以下方法替换该函数的整个主体:

try:
    WordSet.update(random.sample(FileLines, 10))
except ValueError:
    stkinter.messagebox.showinfo("ERROR", "The text file doesn't have enough words!")

我也忽略了您不需要的global声明。 仅在为变量分配新值时才有必要,但是您所需要做的就是调用其功能之一update

发生这种情况是因为random.choice试图像访问列表一样访问集合(或其他实现__getitem__结构)。 要解决此问题,请将您对random.choice的调用random.choice为:

random.choice(list(FileLines))

这会将设置转换为列表,然后再将其传递给random.choice

您可以只使用random.sample(the_list, 10)获得10个不同的元素,而不必反复尝试使用循环将其添加到集合中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM