2016-10-08 4 views
1

Ich habe eine Funktion wordScore (Wort, ScoreList). Das Wort ist eine Zeichenfolge, die nur aus Buchstaben besteht und scoreList ist eine Liste den Wert der einzelnen Buchstaben des Alphabets enthalten:Finden Sie den Wert jedes Buchstabens in einem Wort mit Karte und reduzieren

scoreList = [ ["a", 1], ["b", 3], ["c", 3], ["d", 2], ["e", 1], 
      ["f", 4], ["g", 2], ["h", 4], ["i", 1], ["j", 8], 
      ["k", 5], ["l", 1], ["m", 3], ["n", 1], ["o", 1], ["p", 3], 
      ["q", 10], ["r", 1], ["s", 1], ["t", 1], ["u", 1], ["v", 4], 
      ["w", 4], ["x", 8], ["y", 4], ["z", 10] ] 

Ich habe das Gesamtergebnis eines Wortes zu finden und es dann zurück Karte unterhalten und reduzieren . Beispiel:

Ich glaube, dass ich nicht in der Lage, dieses Problem zu tun, weil ich nicht sicher bin, welche Karte tut. Ich würde wirklich etwas Hilfe schätzen.

Zweites Problem: So, jetzt bin ich eine Liste von Buchstaben angegeben, die (listOfwords sagen lässt = ["a", "am", "at", "apple", "bat", "bar", "babble", "can", "foo", "spam", "spammy", "zzyzva"]) Wenn ich Eingabe eine Liste von Buchstaben in scoreList (Rack) (wie scoreList(["a", "s", "m", "t", "p"]) dann ausgeben soll alle möglichen Wörter, die kann . mit den Buchstaben gemacht werden, die in listOfwords sind also im Grunde würde es sein:

>>> scoreList(["a", "s", "m", "t", "p"]) 
[['a', 1], ['am', 4], ['at', 2], ['spam', 8]] 
>>> scoreList(["a", "s", "m", "o", "f", "o"]) 
[['a', 1], ['am', 4], ['foo', 6]] 

Dies ist mein Code so weit:

def scoreList(Rack): 
    test = [x for x in Dictionary if all(y in Rack for y in x)] 
    return test 

Allerdings, wenn ich laufen diese es gibt mir nur die Worte, die kann mit den Buchstaben gemacht werden und ich bin nicht sicher, wie man die Kerbe für jedes Wort erhält. Könnte ich wordScore verwenden? Es gelten auch die gleichen Einschränkungen.

+0

können Sie 'scoreList' in eine dict verwandeln? wie zum Beispiel: '{ 'a': 1, 'b': 3, 'c': 3, 'd': 2, 'e': 1, 'f': 4, 'g' : 2, 'h': 4, 'i': 1, 'j': 8, 'k': 5, 'l': 1, 'm': 3, 'n': 1, 'o': 1, 'p': 3, 'q': 10, 'r': 1, 's': 1, 'T': 1, 'u': 1 , 'v': 4, 'w': 4, 'x': 8, 'y': 4, 'z': 10} ' – Hadrien

+0

Leider nein es muss eine Liste bleiben. Wenn ich könnte, wäre es viel einfacher. –

Antwort

0

Map erstellt eine Sequenz, die durch eine Funktion zu jedem Einzelteil in einer Folge der Anwendung:

>>> map(lambda x: x + 1, [1, 2, 3]) 
[2, 3, 4] 

So Ihr Problem zu lösen:

Wenn Sie dict, Schleife über alle Buchstaben im Wort und Karte verwenden können, es zu seinem Ergebnis. Zusammengefasst dann alle Buchstaben punkten mit reduzieren: durch die Anzahl der Vorkommen von Buchstaben im Wort

def wordScore(word, score_list): 
    score_dict = dict(score_list) 
    letter_scores = map(lambda letter: score_dict[letter], word) 
    return reduce(lambda x, y: x + y, letter_scores) 

Wenn Sie nicht können, Schleife über alle Buchstaben in der Liste Partitur und jede Punktzahl multiplizieren, dann alle Buchstaben Partituren Summe mit reduzieren:

def wordScore(word, score_list): 
    letter_scores = map(
     lambda letter_score: word.count(letter_score[0]) * letter_score[1], 
     score_list 
    ) 
    return reduce(lambda x, y: x + y, letter_scores) 

lesen map documentation in python 2.7

+0

Vielen Dank, es hat funktioniert! –

+0

Hey Mann danke nochmal für deine Hilfe. Ich habe mich gefragt, ob du mir mit einem zweiten Problem helfen kannst. Ich habe den ursprünglichen Beitrag mit den Details bearbeitet. –

Verwandte Themen