簡體   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