我有一个字典,每个字母都有相应的值。我需要通过一个字符串来计算所有字母的总和'值。
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]
输出score
应该是与word
中的字母对应的任何值的总和。但我不能让Python理解我是通过变量类型字符串调用键。
你有什么解决方案?任何帮助表示赞赏!
答案 0 :(得分:3)
您忘记将score
变量初始化为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
如果您没有初始化变量,则会收到以下错误:
NameError: name 'variable' is not defined
...这意味着您在初始化之前使用变量并且它是错误的
答案 1 :(得分:2)
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
答案 2 :(得分:2)
您可以尝试使用地图方法:
print(sum(map(lambda x:SCRABBLE_LETTER_VALUES[x],word)))
输出:
10
答案 3 :(得分:1)
在for-loop之前添加行score = 0
。
答案 4 :(得分:0)
在使用之前,您需要将score
设置为零
答案 5 :(得分:-1)
此外,您可能想要制作'字'通过将其变为输入值来变量更具动态性:
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)