2016-12-05 44 views
0

我正在爲遊戲hang子手編寫代碼。我陷入了我想幫助用戶獲得提示的部分。尋找單詞列表中最常見的字母

我需要創建一個函數,它接受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

@MooingRawr這就是這個網站是爲... – user312016

+0

你被允許使用'set'? – 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開始(小寫的「A」),你可以這樣做:

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 

得到計數的列表,你可以在任何給定的信:

print(new_list[ord(letter)]) 

爲了獲得最常見的字母(注意,如果多個字母具有最高的價值,只有第一個將被退回):

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

謝謝!它確實給了我一個長度爲26的列表,但現在當我想要找到這封信時,我該如何回去? – Adamso

+0

@Adamso你可以編輯你的問題,包括你想要什麼信,以及如何得到它?不清楚。我將添加如何獲得列表上的任何字母的計數到我的答案。 – Martinbaste

+0

當然。例如:對於列表:「葡萄,樹,番茄」它應該返回字母「e」。 – Adamso

1

您可以使用0123的組合和set以運行pattern中未包含的最常見的字母,請參閱下文。第一行記錄每個字母的出現次數,第二個記錄返回最常見的字母(之一)。

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

你可以試試:

>>> 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}