2013-06-23 3 views
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 

기본적으로 입력 단어를 가져와 사전에 따라 점수를 계산해야합니다.이 코드 조각은 대문자와 소문자 모두에서 작동하지 않습니다

+0

루프를 훨씬 쉽게 할 수 있습니다 :'count = sum (단어의 char에 대한 점수 [char])'. –

+1

'scrabble_score (word)'를 간단히'sum (word.lower()에서 char에 대해 score [char])'로 표현할 수 있습니다. – Eric

+0

Duplicate of [당신이 그것의 값을 할당하지 않는 한 파이썬 문자열 메서드를 호출하지 않는 이유는 무엇입니까? 출력?] (http://stackoverflow.com/questions/9189172/why-doesnt-calling-a-python-string-method-do-anything-unless-you-assign-its-out) – smci

답변

8

이 수정 된 코드가 작동합니다 :

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

word.lower() 수정 된 단어를 반환, 그것은 문자열 인플레 이스을 수정하지 않습니다. 문자열은 파이썬에서 불변입니다. .lower() 문자열을 반환한다는 사실은 다음과 같이 정의된다

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

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

    Return a copy of the string S converted to lowercase. 
5

str.lower()는 문자열의 복사본을 반환 - 원래 문자열을 변경하지 않습니다. 이 시도 :

scrabble_score 함수가 다음과 같이보다 간단하게 표현 될 수
word = word.lower() 
4

: 파이썬

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

, 반복을 표현하는 관용적 인 방법은 (상기 코드에서와 같이) 생성 식을 사용하는 또는 목록 내포.

다른 답변에서 지적한 바와 같이 lower() 메서드 (및 그 밖의 다른 모든 문자열 메서드)는 문자열을 수정하지 않으므로 반환 된 값을 다시 할당하거나 내 대답과 같이 즉시 사용하십시오.

+1

+1 훨씬 좋은 버전 OP 코드 – HennyH

관련 문제