找到拼字游戏单词的价值

时间:2013-11-26 17:26:49

标签: python loops recursion

我对任何更高级别的语言都没有什么经验。当我还是个孩子的时候,摆弄基本和dos-batch。

我试图在拼字游戏中找到单词的分值。这种递归结构似乎缓慢且低效。在程序结构/概念方面解决这个问题的更好方法是什么?

value_list = {'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}

word_index = 0
total = 0

def find_value(word):
     global word_index
     global total
     x = word[word_index]
     total = total + value_list[x]
     if len(word) > word_index + 1:
         word_index = word_index + 1
         find_value(word)

4 个答案:

答案 0 :(得分:5)

您将直接循环word并使用sum()

def find_value(word):
    return sum(value_list[char] for char in word)

这里不需要使用递归;以上也不需要全局变量。尽量避免全局状态,因为当您开始在多个位置使用函数时,这很容易导致难以调试的问题。

答案 1 :(得分:1)

首先,您可以使用list代替dict,而只需将此x中字母list的索引计为ord(x) - ord('a')

其次,不要使用global,这是一个糟糕的编程习惯。你应该在局部变量中累积你的值,然后从函数中return这个值。

第三,使用循环而不是递归,或者更好的是使用像sum这样的函数。

答案 2 :(得分:0)

def find_value(word):

    return sum(map(lambda x:value_list[x], list(word)))

return sum(map(lambda x:value_list[x], list(word)))

答案 3 :(得分:-1)

是的,函数调用很昂贵是Python。

Martijn Pieters的方法是初学者理解list-comprehensions的好例子。

如果您想要更简单易读的方式,请尝试以下方法:

sum(value_list.values())