1
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

我基本上必须根据字典获取输入单词并计算其分数。

4

3 回答 3

8

此修改后的代码将起作用:

def scrabble_score(word):
    count=0
    word = word.lower() #assign the result of word.lower() to word

word.lower()返回修改后的单词,它不会修改字符串inplace。字符串在 Python中是不可变的。返回字符串的事实.lower()是这样定义的:

>>> help(str.lower)
Help on method_descriptor:

lower(...)
    S.lower() -> string

    Return a copy of the string S converted to lowercase.
于 2013-06-23T13:27:55.860 回答
5

str.lower()返回字符串的副本 - 它不会更改原始字符串。尝试这个:

word = word.lower()
于 2013-06-23T13:28:04.227 回答
4

scrabble_score函数可以更简单地表示如下:

def scrabble_score(word):
    return sum(score[char] for char in word.lower())

在 Python 中,表达迭代的惯用方式是使用生成器表达式(如上面的代码)或列表推导。

关于您当前的问题,正如其他答案中所指出的那样,该lower()方法(以及与此相关的所有其他字符串方法)不会就地修改字符串,因此您必须重新分配返回值或立即使用它,如显示在我的回答中。

于 2013-06-23T13:47:08.440 回答