Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找拼字的值_Python_Loops_Recursion - Fatal编程技术网

Python 查找拼字的值

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,

我对任何高级语言都没有什么经验。当我还是个孩子的时候,我就在摆弄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, 
              '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())