2016-10-09 3 views
-2

Die Funktion scoreList (Rack) nimmt eine Liste von Buchstaben auf. Du erhältst auch eine globale Variable: ["a", "am", "at", "apple", "bat", "bar", "babble", "kann", "foo", "spam", "spammy", "zzyzva"].Alle Kombinationen einer Liste finden

Verwenden Sie eine Liste von Buchstaben, um alle möglichen Wörter zu finden, die mit den Buchstaben im Wörterbuch erstellt werden können. Suchen Sie für jedes Wort, das erstellt werden kann, mithilfe von scrabbleScore auch die Bewertung dieses Worts.

scrabbleScore =

[ ["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] ] 

I Ausdrücke aus der Liste Comprehensions verwenden (Karte, Filter, reduzieren, etc.), wenn Anweisungen und für Schleifen, sondern nur, wenn sie im Zusammenhang mit einer Liste ist Verständnis.

Beispiel:

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

Die Reihenfolge, in der sie dargestellt werden, keine Rolle spielt. Es muss auch eine Liste bleiben und kein Dic. Ich würde gerne etwas Hilfe bei diesem Problem oder wenn Sie mir ein besseres Verständnis für die Verwendung von Karte oder Filter in diesem Problem geben könnten.

My-Code so weit:

def scoreList(Rack): 
result = [d for d in Dictionary if all(l in Rack for l in d)] 
return result 

Meine Leistung:

>>> scoreList(["a", "s", "m", "t", "p"]) 
    ['a', 'am', 'at', 'spam'] 

Wie Sie ich habe herausgefunden, sehen kann, wie die Worte ausgegeben, aber nicht die Partitur. Ich habe auch nicht herausgefunden, wie man die Verwendung von Karten, Filtern oder anderen Listenkompressen implementiert.

+7

Warum stellen Sie die gleiche Frage immer wieder nach dem Löschen des vorherigen Beitrags? Du hast es vor ein paar Minuten gepostet und wenn ich gestern nicht falsch liege. –

+0

Sorry, ich hatte etwas recherchiert und versucht, einen anderen Weg zu finden, aber das ist der einzige Weg, wie ich es schaffen könnte. –

+0

Sie sollten den Beitrag nicht löschen, wenn Sie die Antwort erhalten, denn soweit ich mich in Ihrem gestrigen Beitrag erinnere, haben 3-4 Benutzer Ihre Anfrage (einschließlich mir) gelöst und anstatt sie für ihre Antwort und Zeit anzuerkennen, haben Sie den Beitrag gelöscht das ist überhaupt nicht fair. Denkst du, dass ich wieder Zeit verschwenden werde, um auf dein Problem zu reagieren? Es wird auch niemand anders sein, wenn sie sich an dich erinnern. –

Antwort

0

Offenbar stellen Sie die gleiche Frage wiederholt (nach einem Kommentar zu Ihrer Frage). Also werde ich das so gründlich wie möglich beantworten

Sie scheinen ein Scrabble-Wörterbuch in einer Liste namens Dictionary zu haben. Ich gehe von diesem Punkt aus weiter:

import itertools 

def scoreList(rack): 
    points = dict([ ["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] ]) 

    validWords = set(Dictionary) 
    answer = [] 
    for l in range(1, len(rack)): 
     for word in itertools.permutations(rack, l): 
      if not word in validWords: continue 
      answer.append(word, sum(points[char] for char in word)) 
    return answer 
+0

Ich benutzte nur Dictionary als einen Namen, die Liste muss eine Liste bleiben. –

+0

Sie können 'Dictionary' als Liste lassen, und das würde immer noch funktionieren – inspectorG4dget

Verwandte Themen