所以,我有一个文本文件(充满文字)我放入一个列表。我希望Python 2.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)
我需要一个能够随机选择以该字符开头的单词的程序。
答案 0 :(得分:2)
因为你的游戏特别依赖于带有固定起始字母的随机单词,所以我建议先将所有单词排序成一个以起始字母为键的字典。然后,您可以随机查找以给定字母开头的任何单词:
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
'查找'你的所有单词都按字母排序。
当您需要一个以前一个单词的最后一个字母开头的单词时,您可以随机选择列表中的元素:
import random
random_word = random.choice(lookup[ game_user[-1] ])
答案 1 :(得分:1)
为了获得以用户输入的最后一个字母开头的所有值的新列表:
choices = [x in d if x[0] == game_user[-1]]
然后,您可以通过以下方式选择一个单词:
newWord = random.choice(choices)
答案 2 :(得分:0)
>>> import random
>>> with open('/usr/share/dict/words') as f:
... words = f.read().splitlines()
...
>>> c = 'a'
>>> random.choice([w for w in words if w.startswith(c)])
'anthologizing'
显然,您需要将c = 'a'
替换为raw_input("em, lets go with ")
答案 3 :(得分:0)
您可以更好地利用更高级的数据结构,但这里有一个镜头:
get_object_or_404(Profile, fk_user=self.request.user)
在创建所有字母及其对应单词的字典后,您可以访问任何特定字词集,如下所示:
CurrentUserDefault
这将为您提供以列表中的a开头的所有单词。然后你可以采取:
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)
让我知道这是否有意义?