[英]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.sample
( 2 / 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.