Python 使用变量作为字典键,可能吗?

Python 使用变量作为字典键,可能吗?,python,dictionary,Python,Dictionary,我有一本字典,每个字母对应一个值。我需要遍历一个字符串并计算所有字母值的总和 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'

我有一本字典,每个字母对应一个值。我需要遍历一个字符串并计算所有字母值的总和

    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 = 'maths'
for letter in word:
    score += SCRABBLE_LETTER_VALUES[letter]
输出的
得分
应该是与
单词
中的字母对应的任何值的总和。但我无法理解我是通过变量类型字符串调用键的


你的解决方案是什么?感谢您的帮助

在for循环之前添加行
score=0

  • 您忘记将
    分数
    变量初始化为0

  • 代码:

    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} 
    
    score = 0    #  ============ > the line to be added
    word = 'maths'
    for letter in word:
        score += SCRABBLE_LETTER_VALUES[letter]
    
    print(score)
    
  • 输出:
    10

  • 如果不初始化变量,将出现以下错误:
    name错误:未定义名称“变量”
    。。。这意味着您在初始化变量之前正在使用它,而它是错误的


此外,您可能希望通过将“word”变量转换为输入值,使其更具动态性:

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}

score = 0
#Make sure to force a lowercase
word = str(input("What word would you like to enter?").lower())
for letter in word:
     score += SCRABBLE_LETTER_VALUES[letter]
print(score)

python中的内置函数
sum()
。您的代码可以简化为:

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 = 'maths'
score = sum(SCRABBLE_LETTER_VALUES[i] for i in word.lower()) # use lower for small letters

print(score)
你会得到:

10

您需要将
得分设置为零,然后才能使用它

您可以尝试map方法:

print(sum(map(lambda x:SCRABBLE_LETTER_VALUES[x],word)))
输出:

10

该代码唯一的错误是没有将
score
初始化为0。访问dict很好。谢谢。我同意你的建议,因为它对我来说是最优雅的。另外,感谢您事先对小写
word
的帮助。你能给我一些关于使用内置Python的建议吗?如何训练自己开始使用func,比如在
score+=
之前考虑
sum
。再一次,谢谢你,伙计。@Trangngguyen,这需要练习。这里的每个人都在学习。很高兴我能帮忙。