1

我只是在学习 Python,所以这可能很简单。我试图找到与字典中的键匹配的值并将它们相加。我已经编写了找到值的代码并且可以打印它(在 Online Python Tutor 中对此进行了测试以查看会发生什么)但我无法弄清楚如何将其作为返回正确分数的总分(6 )。我知道目前这不是一个功能。

    SCRABBLE_LETTER_VALUES = {
        '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 ='tact'
score =0

for i in range(len(word)):
    for letter,score in SCRABBLE_LETTER_VALUES.items():
        if letter == word[i]:
            print score
4

2 回答 2

5
>>> sum(SCRABBLE_LETTER_VALUES[l] for l in word)
6

这里:

  1. for l in word遍历word;的字母
  2. SCRABBLE_LETTER_VALUES[l]获取SCRABBLE_LETTER_VALUES;的对应条目
  3. sum(...)把它们加起来。

内部的构造sum()称为生成器表达式

于 2013-03-02T18:10:54.343 回答
1

如果我是你,我会使用这段代码:

score = 0
word = 'tact'
for letter in word:
    score += SCRABBLE_LETTER_VALUES[letter]
print score

还有更有效的方法,例如 NPE 提到的方法,但如果您只是初学者,我更愿意使用(并理解)这种方法。


上面代码的作用,逐行:

1)首先,我们使用for-loop 来遍历你的每个字母word

for letter in word:

2)对于每个字母,我们score将变量增加您定义的相应数量,SCRABBLE_LETTER_VALUES如下所示:

score = score + SCRABBLE_LETTER_VALUES[letter]

这可以通过以下方式更轻松地编写+=

score += SCRABBLE_LETTER_VALUES[letter]

3)最后我们打印分数:

print score
于 2013-03-02T18:11:07.737 回答