Python 查找拼字的值
我对任何高级语言都没有什么经验。当我还是个孩子的时候,我就在摆弄basic和dos批处理 我想在拼字游戏中找出一个单词的关键值。这种递归结构似乎速度慢且效率低。在项目结构/概念方面,解决这个问题的更好方法是什么Python 查找拼字的值,python,loops,recursion,Python,Loops,Recursion,我对任何高级语言都没有什么经验。当我还是个孩子的时候,我就在摆弄basic和dos批处理 我想在拼字游戏中找出一个单词的关键值。这种递归结构似乎速度慢且效率低。在项目结构/概念方面,解决这个问题的更好方法是什么 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,
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)
您可以直接循环使用
word
,然后使用sum()
:
这里不需要使用递归;以上也不需要全局变量。尽量避免全局状态,因为当您开始在多个位置使用函数时,这很容易导致难以调试的问题。您可以直接循环使用
word
,然后使用sum()
:
这里不需要使用递归;以上也不需要全局变量。尽量避免全局状态,因为当您开始在多个位置使用函数时,这很容易导致难以调试的问题。首先,您可以使用值的
list
而不是dict
,只需将该列表中字母x
的索引作为ord(x)-ord('a')
其次,不要使用global
,这是一个坏的编程习惯。您应该在局部变量中累加值,然后从函数中返回该值
第三,使用循环而不是递归,或者更好的是使用函数,比如sum首先,您可以使用值的list
而不是dict
,只需将list
中的字母x
的索引作为ord(x)-ord('a')
其次,不要使用global
,这是一个坏的编程习惯。您应该在局部变量中累加值,然后从函数中返回该值
第三,使用循环而不是递归,或者更好的是使用像sum
def find_值(字):
def find_值(字):
是的,函数调用在Python中很昂贵
Martijn Pieters的方法是初学者理解的好例子
如果您想要更简单易读的方法,请尝试以下方法:
sum(value_list.values())
是的,函数调用是昂贵的
Martijn Pieters的方法是初学者理解的好例子
如果您想要更简单易读的方法,请尝试以下方法:
sum(value_list.values())
我删除了dict()
调用,它是完全冗余的。我删除了dict()
调用,它是完全冗余的。天哪,太快了。谢谢,我明白这是多么的优越。有点离题;你能举个例子说明什么时候递归比以这种方式绘制值更可取吗?如果您可以这样做,那么它似乎完全没有必要,而且会带来相当大的开销。我之所以问这个问题,是因为给我的练习就是以这种方式解决这个问题,这对我来说似乎很麻烦;将工作分成更小的部分,并对这些部分应用相同的功能,直到你有足够小的部分使答案几乎不言而喻。天啊,那太快了。谢谢,我明白这是多么的优越。有点离题;你能举个例子说明什么时候递归比以这种方式绘制值更可取吗?如果您可以这样做,那么它似乎完全没有必要,而且会带来相当大的开销。我之所以问这个问题,是因为给我的练习就是以这种方式解决这个问题,这对我来说似乎很麻烦;将工作分成更小的部分,并对这些部分应用相同的函数,直到有足够小的部分使答案几乎不言而喻。我可以看出在更大的程序中使用global会变得多么混乱。是否还有另一个应该避免的原因,或者只是为了简单起见?这里的字典实际上更简单,因为列表要求您首先将每个字符转换为整数索引。ord(x)-ord('a')
的成本高于字典散列计算(纯C)。我可以看出在更大的程序中使用global会变得多么混乱。是否还有另一个应该避免的原因,或者只是为了简单起见?这里的字典实际上更简单,因为列表要求您首先将每个字符转换为整数索引。ord(x)-ord('a')
的成本高于字典散列计算(纯C)。这不是一个特定单词的总和,而是所有分片的所有拼字成本。这不是一个特定单词的总和,只是所有分片的所有拼字成本。
sum(value_list.values())