Python 从具有特定字符的列表中随机选择
所以,我有一个文本文件(全是单词)放在一个列表中。我希望Python2.7从列表中随机选择一个单词,但要以特定字符开头 列表代码:Python 从具有特定字符的列表中随机选择,python,python-2.7,Python,Python 2.7,所以,我有一个文本文件(全是单词)放在一个列表中。我希望Python2.7从列表中随机选择一个单词,但要以特定字符开头 列表代码: d=[] with open("dic.txt", "r") as x: d=[line.strip() for line in x] 这是一个叫Shiritori的游戏。用户从说任何英语单词开始,即dog。然后,程序必须选择另一个以最后一个字符开头的单词,在本例中为“g” 游戏代码: game_user='-1' game_user=raw_inpu
d=[]
with open("dic.txt", "r") as x:
d=[line.strip() for line in x]
这是一个叫Shiritori的游戏。用户从说任何英语单词开始,即dog。然后,程序必须选择另一个以最后一个字符开头的单词,在本例中为“g”
游戏代码:
game_user='-1'
game_user=raw_input("em, lets go with ")
a1=len(game_user)
我需要一个程序,随机选择一个以该字符开头的单词。以便获得以用户输入的最后一个字母开头的所有值的新列表:
choices = [x in d if x[0] == game_user[-1]]
然后,您可以通过以下方式选择一个单词:
newWord = random.choice(choices)
因为你的游戏特别依赖于一个有固定起始字母的随机单词,所以我建议你首先将所有单词分类到字典中,以起始字母为键。然后,您可以随机查找以给定字母开头的任何单词:
d=[]
lookup = {}
with open("dic.txt", "r") as x:
d=[line.strip() for line in x]
for word in d:
if word[0] in lookup:
lookup[word[0]].append(word)
else:
lookup[word[0]] = [ word ]
现在您有了一个dict
“lookup”,它将所有单词按字母排序。
当您需要一个以前一个单词的最后一个字母开头的单词时,您可以在列表中随机选择一个元素:
import random
random_word = random.choice(lookup[ game_user[-1] ])
显然,您需要将
c='a'
替换为原始输入(“em,让我们一起去”)
您可能会更好地利用更高级的数据结构,但这里有一个例子:
words_dict = {}
for row in d:
# Gives us the first letter
myletter = row[0]
if myletter not in words_dict:
words_dict[myletter] = []
words_dict[myletter].append(row)
创建所有字母及其对应单词的词典后,您可以访问任何特定的单词集,如:
words_dict['a']
这将为您提供列表中以a开头的所有单词。然后你可以采取:
# This could be any letter here..
someletter = 'a'
newword = words_dict[someletter][random.randint(0,len(words_dict[someletter]-1))]
让我知道这是否合理?您的代码在哪里?你的问题是什么?如果你想得到单词而不是索引,你可能不想使用enumerate。因为+1仅限于字典的访问时间,而不需要在每次玩新一轮时生成新列表
# This could be any letter here..
someletter = 'a'
newword = words_dict[someletter][random.randint(0,len(words_dict[someletter]-1))]