Python中使用random.choice避免循环内重复输出单词的问题求助
解决随机选单词不重复的问题
你的问题核心是每次循环都从原列表重新生成筛选后的列表,且没有记录已输出过的单词,所以会重复输出。之前用list.remove()没效果,大概率是因为你在循环里每次都重新创建了临时的filtered_list,移除的是临时列表里的元素,原列表根本没被修改。
给你两种可行的修改方案:
方案一:用集合记录已使用单词(推荐,不修改原列表)
这种方式会保留原始单词列表,同时用集合快速记录已输出的单词,适合后续还需要用到原列表的场景:
import random # 原始单词列表 word_list = ["hello", "carls", "theme", "threw", "folks", "dime", "blondie", "ocean"] # 用集合存已输出的单词,查询效率远高于列表 used_words = set() while True: user_input = input("请输入要匹配的字符:") # 筛选条件:包含输入字符(不区分大小写)+ 未被使用过 filtered_list = [word for word in word_list if user_input.upper() in word.upper() and word not in used_words] if filtered_list: selected_word = random.choice(filtered_list) print(selected_word) # 将选中的单词加入已用集合,避免重复 used_words.add(selected_word) else: print(f"没有包含'{user_input}'的单词,或者符合条件的单词都已经用完了")
方案二:直接从原列表移除已选单词
如果不需要保留原始单词列表,可以直接从原列表里删掉已输出的单词,后续筛选自然不会再出现:
import random word_list = ["hello", "carls", "theme", "threw", "folks", "dime", "blondie", "ocean"] while True: user_input = input("请输入要匹配的字符:") filtered_list = [word for word in word_list if user_input.upper() in word.upper()] if filtered_list: selected_word = random.choice(filtered_list) print(selected_word) # 从原列表移除已选单词,下次筛选自动排除 word_list.remove(selected_word) else: print(f"没有包含'{user_input}'的单词,或者符合条件的单词都已经用完了")
内容的提问来源于stack exchange,提问作者sees
相关产品推荐
相关产品推荐

