微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

函数采用一串字母,从有效单词列表中输出单词列表,然后找到拼字游戏得分最高的单词

如何解决函数采用一串字母,从有效单词列表中输出单词列表,然后找到拼字游戏得分最高的单词

我一直在尝试构建一个函数,该函数接受一串字母,从有效单词列表中输出单词列表,然后从该列表中找到拼字游戏得分最高的单词

我设计了一个从字符串中输出所有可能单词的函数一个从单词列表中计算拼字游戏分数的函数以及一个输出最高分数的函数

但是,我正在努力:

  1. 将三者结合起来(计算可能得分最高的输出列表) 和
  2. 使用第二个单词生成函数返回包含所有可能单词的列表,目前,它在单独的列表中输出单词

计算拼字游戏分数的函数

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

,随心所欲。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。