此代码段不适用于大写和小写字母

时间:2013-06-23 13:25:26

标签: python

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

我基本上必须根据字典来输入输入字并计算其分数。

3 个答案:

答案 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()方法(以及所有其他字符串方法)不会修改字符串,因此您必须重新分配返回值或立即使用它,如我的答案所示。