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错误:未定义名称“变量”
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,这需要练习。这里的每个人都在学习。很高兴我能帮忙。