函数scoreList(Rack)接收一个字母列表。您还会获得一个全局变量词典:[" a"," am"," at"," apple"," bat"," bar"," babble"," can"," foo"," spam", " spammy"," zzyzva"]。
使用字母列表查找可以使用字典中的字母创建的所有可能单词。对于每个单词,也可以使用scrabbleScore找到该单词的分数。
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] ]
我可以使用由列表推导(map,filter,reduce等),if语句和for循环组成的表达式,但仅限于它们在列表推导的上下文中。
示例:
>>> 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]]
它们的呈现顺序无关紧要。它也必须保持列表而不是dic。会对这个问题有所帮助,或者如果你能让我更好地理解如何在这个问题中使用地图或过滤器。
我的代码到目前为止:
def scoreList(Rack):
result = [d for d in Dictionary if all(l in Rack for l in d)]
return result
我的输出:
>>> scoreList(["a", "s", "m", "t", "p"])
['a', 'am', 'at', 'spam']
正如您所看到的,我已经找到了如何输出单词而不是分数。我还没有想出如何使用地图,过滤器或任何其他列表推导。
答案 0 :(得分:0)
显然你反复提出同样的问题(根据你的问题评论)。所以我将尽可能彻底地回答这个问题
您似乎在名为Dictionary
的列表中有一个拼字游戏字典。我将从那一点开始前进:
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