Python 从具有特定字符的列表中随机选择

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

所以,我有一个文本文件(全是单词)放在一个列表中。我希望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_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))]