2017-06-23 12 views
1

私はリストに入れたテキストファイル(単語がいっぱいです)を持っています。私はPython 2.7にリストから単語をランダムに選択したいが、それは特定の文字で始めることが望ましい。特定の文字のリストからランダムに選択

リストコード:

d=[] 

with open("dic.txt", "r") as x: 
    d=[line.strip() for line in x] 

それはしりとりと呼ばれるゲームのためです。ユーザーは、英語の単語、つまり犬を言うことから始まります。プログラムは最後の文字(この場合は 'g')で始まる別の単語を選択する必要があります。ゲーム

コード:

game_user='-1' 

game_user=raw_input("em, lets go with ") 

a1=len(game_user) 

私はランダムに、その文字で始まる単語を選択するプログラムを必要とします。

newWord = random.choice(choices) 
+0

あなたのコードはどこですか?あなたの質問は何ですか? –

答えて

1

あなたのゲームは、開始文字が固定されたランダムな単語に特に依存しています。最初のすべての単語を、開始文字をキーとして辞書に並べ替えることをお勧めします。その後、あなたはランダムに与えられた文字で始まる任意の単語を検索することができます

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] ]) 
+0

索引ではなく単語を取得したい場合は、おそらく列挙型を使用したくないでしょう。 – Meloman

+0

@Meloman Good catch –

2

ので:次に

choices = [x in d if x[0] == game_user[-1]] 

、あなたがすることによって単語を選択することができます。ユーザー入力の最後の文字で始まるすべての値の新しいリストを取得するために

+0

+1これは、新しいラウンドが実行されるたびに新しいリストを生成する必要がなく、辞書のアクセス時間にのみ制限されます –

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' 

を明らかに、あなたはraw_input("em, lets go with ")

0

c = '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) 

辞書を作成した後oすべての文字とそれに対応する言葉fは、あなたがそのように似た単語のいずれかの特定のセットにアクセスすることができます。

words_dict['a'] 

あなたのリストの中で始まるすべての単語を与えるだろうどの。次に、あなたは取ることができます:

# This could be any letter here.. 
someletter = 'a' 
newword = words_dict[someletter][random.randint(0,len(words_dict[someletter]-1))] 

それは意味があるかどうか教えてください。

関連する問題