2016-12-05 10 views
0

私はハングマンゲームのコードを書いています。私はユーザーがヒントを得るのを手伝ってくれる部分に立ち往生しています。単語リストの中で最も一般的な文字を見つける

word listと現在のpattern(例: "___ e_")を受け取り、単語リストにmost common letterを返す関数を作成する必要があります。

私は各単語の文字数を数え、その文字リストの最大値を返す必要があることを知っていますが、実際にこれを実行する方法はあまりよく分かりません。

私はこのコードを書くことで開始しました:

def choose_letter(words, pattern): 
    new_list = [0] * 26 
    for i in range(0, 26): 
     for n in range(0, len(num_list)): 
      if i == num_list[n]: 
       new_list[i] += 1 

    return new_list 

が、私は実際に文字にそれを比較する方法を知らないので、私は動けなくなります。

私は進歩に役立ついくつかのアドバイスや指導を聞きたいと思います。

*我々はあなたが(メソッド・カウントを使用することができ、まだ辞書について

+0

が、このサイトはあなたが 'set'を使用することを許可されているため... – user312016

+0

ある何ですか? – Jaco

+0

はい私たちは今週それについて学びましたので、私はそうだと思っています – Adamso

答えて

2

あなたもコレクションからカウンターを使用することができます

from collections import Counter 
Counter('abracadabra').most_common(3) 


output: 
[('a', 5), ('r', 2), ('b', 2)] 
+0

Shivkumarに感謝しますが、カウンターを使うことはできません。カウンターを使わずにこれを解決する別の方法はありますか? – Adamso

0

明らかな答えは、文字をキーとして辞書を使用することです。また、ord(char)を使用して文字から整数を取得し、その整数をリストのインデックスとして使用することもできます。 あなたのリストの長さは26で、文字のインデックスが(「」小文字用)97から開始するので、あなたのような何かを行うことができますすることができます、リスト上の任意の文字のカウントを取得するには

def choose_letter(words, pattern): 
    new_list = [0] * 26 
    for word in words: 
     word = word.lower() 
     for letter in word: 
      index = ord(letter) -97 
      new_list[index] += 1 
    return new_list 

を:あなたが0123を組み合わせて使用​​することができます

chr(new_list.index(max(new_list))) 
+0

ありがとう!それは私に26の長さのリストを与えましたが、今私はどのように私が戻ってくるのですか? – Adamso

+0

@Adamsoあなたはどのレターを希望するのか、それを入手する方法を含むあなたの質問を編集できますか?それは明らかではない。私はリスト上の任意の文字の数を私の答えにする方法を追加します。 – Martinbaste

+0

例えば:リストの場合: "grape、tree、tomato"これは文字 "e"を返すべきです。 – Adamso

1

print(new_list[ord(letter)]) 

は、最も一般的な文字(複数の文字が最も高い値を持っている場合、最初のものだけが返されることに注意)を取得するにはとsetは、patternに含まれていない最も頻繁な文字を実行します。以下を参照してください。最初の行は各文字のオカレンス数をカウントし、2番目のステートメントは最も頻繁な文字を返します。

def choose_letter(words, pattern): 
    frequencies = [(letter, words.count(letter)) for letter in set(words) if letter not in pattern and letter!=' '] 
    most_frequent_letter = max(frequencies, key=lambda x: x[1])[0] 
    return most_frequent_letter 


word = 'hangman is great fun' 
pattern = '____a_____' 
print choose_letter(word,pattern) 
0

あなたは試すことができます:それ@MooingRawr

>>> data = "Harsha Biyani" 
>>> d = {} 
>>> letters = set(data) 
>>> for letter in letters : 
    d[letter] = data.count(letter) 


>>> key, value = max(d.items(), key=lambda x:x[1]) #in python 3 
>>> key, value = max(d.iteritems(), key=lambda x:x[1]) # in python 2 
>>> key 
'a' 
>>> value 
3 
>>> d 
{'y': 1, 'H': 1, 'h': 1, ' ': 1, 'n': 1, 'B': 1, 's': 1, 'a': 3, 'i': 2, 'r': 1} 
関連する問題