score = {"a": 1, "c": 3, "b": 3, "e": 1, "d": 2, "g": 2,
"f": 4, "i": 1, "h": 4, "k": 5, "j": 8, "m": 3,
"l": 1, "o": 1, "n": 1, "q": 10, "p": 3, "s": 1,
"r": 1, "u": 1, "t": 1, "w": 4, "v": 4, "y": 4,
"x": 8, "z": 10}
def scrabble_score(word):
count=0
word.lower()
print word
for char in word:
count=count+score[char]
return count
我基本上必须根据字典来输入输入字并计算其分数。
答案 0 :(得分:8)
此修改后的代码将起作用:
def scrabble_score(word):
count=0
word = word.lower() #assign the result of word.lower() to word
word.lower()
返回修改后的单词,它不会修改字符串 inplace 。 Python中的字符串 immutable 。 .lower()
返回字符串的事实定义如下:
>>> help(str.lower)
Help on method_descriptor:
lower(...)
S.lower() -> string
Return a copy of the string S converted to lowercase.
答案 1 :(得分:5)
str.lower()
返回字符串的副本 - 它不会更改原始字符串。试试这个:
word = word.lower()
答案 2 :(得分:4)
scrabble_score
函数可以更简单地表达如下:
def scrabble_score(word):
return sum(score[char] for char in word.lower())
在Python中,表达迭代的惯用方法是使用生成器表达式(如上面的代码所示)或列表推导。
关于您当前的问题,正如其他答案中所指出的那样,lower()
方法(以及所有其他字符串方法)不会修改字符串,因此您必须重新分配返回值或立即使用它,如我的答案所示。