问题描述
我一直在尝试构建一个函数,该函数接受一串字母,从有效单词列表中输出单词列表,然后从该列表中找到拼字游戏得分最高的单词
我设计了一个从字符串中输出所有可能单词的函数、一个从单词列表中计算拼字游戏分数的函数以及一个输出最高分数的函数
但是,我正在努力:
计算拼字游戏分数的函数
def scrabble_score(word):
total = 0 # Create score var
for i in word: # Loop through given word
total += score[i.lower()] #Lookup in dict,add total
return totaldef charCount(word):
dict = {}
for i in word:
dict[i] = dict.get(i,0) + 1
return dict
def possible_words(lwords,charSet):
for word in lwords:
flag = 1
chars = charCount(word)
for key in chars:
if key not in charSet:
flag = 0
elif charSet.count(key) != chars[key]:
flag = 0 #for word in word_list:
if flag == 1:
#word_value_dict = {}
firstList = []
#word_value_dict[word] = get_word_value(word,letter_values)
firstList.append(word)
#return word_value_dict
print(scrabble_score(word),(word))
print(firstList)if __name__ == "__main__":
input = ['goo','bat','me','eat','goal','boy','run']
charSet = ['e','o','b','a','m','g','l','b']
possible_words(input,charSet)
从列表中找出得分最高的词的功能
def score(word):
dic = {"a": 1,"c": 3,"b": 3,"e": 1,"d": 2,"g": 2,"f": 4,"i": 1,"h": 4,"k": 5,"j": 8,"m": 3,"l": 1,"o": 1,"n": 1,"q": 10,"p": 3,"s": 1,"r": 1,"u": 1,"t": 1,"w": 4,"v": 4,"y": 4,"x": 8,"z": 10}
total = 0
for char in word:
total += dic.get(char.upper(),0)
return total
#return highest score
def best(lista):
return max(lista,key=score)best(['goo','run'])
电流输出:
4 me
['me']
5 goal
['goal']
期望输出:所有可能单词的列表
['me','goal']
OR 一个字典(或类似结构),以可能的词作为键,分数作为值
{'me':4,'goal':5]
AND 得分最高的单词
'goal':5
我需要一种方法从第一个函数返回一个列表,并将两者结合起来以找到该列表中的最高分
保持真棒
解决方法
您的函数定义中存在一些错误。我已经复制了下面的更正版本,并在我修改的地方附上了评论:
def scrabble_score(word):
total = 0
for i in word:
total += score(i.lower()) # Changed square brackets to normal brackets
return total
def charCount(word):
dict = {}
for i in word:
dict[i] = dict.get(i,0) + 1
return dict
def score(word):
dic = {"a": 1,"c": 3,"b": 3,"e": 1,"d": 2,"g": 2,"f": 4,"i": 1,"h": 4,"k": 5,"j": 8,"m": 3,"l": 1,"o": 1,"n": 1,"q": 10,"p": 3,"s": 1,"r": 1,"u": 1,"t": 1,"w": 4,"v": 4,"y": 4,"x": 8,"z": 10}
total = 0
for char in word:
total += dic.get(char.lower(),0) # Change .upper() to .lower() or else it will return only zero
return total
def possible_words(lwords,charSet):
firstList = {} # Made this a dictionary instead of list
for word in lwords:
flag = 1
chars = charCount(word)
for key in chars:
if key not in charSet:
flag = 0
elif charSet.count(key) != chars[key]:
flag = 0
if flag == 1:
firstList[word] = scrabble_score(word) # Adding to the dictionary
print(firstList)
best(firstList)
def best(lista):
print("Best word is '{}' with score {}".format(max(lista,key=score),lista[max(lista,key=score)])) # Changed as per requirements
使用上述函数定义和以下输入:
input_words = ['goo','bat','me','eat','goal','boy','run']
charSet = ['e','o','b','a','m','g','l','b']
我对 possible_words(input_words,charSet)
的输出如下:
{'me': 4,'goal': 5}
Best word is 'goal' with score 5
,随心所欲。