2013-03-02 43 views
1

我剛剛學習Python,因此這可能非常簡單。我試圖找到與字典中的鍵匹配的值並將其添加。我已經編寫了可以找到這些值的代碼,並且我可以打印這些代碼(在線Python Python Tutor中測試了這些代碼以查看會發生什麼)但是我無法弄清楚如何將此作爲總分數返回正確的分數(6 )。我知道這不是目前的功能。Python中的字典:總結搜索鍵返回的值

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 ='tact' 
score =0 

for i in range(len(word)): 
    for letter,score in SCRABBLE_LETTER_VALUES.items(): 
     if letter == word[i]: 
      print score 

回答

1

如果我是你,我會用這段代碼:

score = 0 
word = 'tact' 
for letter in word: 
    score += SCRABBLE_LETTER_VALUES[letter] 
print score 

有更有效的方法也是如此,例如一個由NPE提到的,但如果你只是一個初學者,我會更喜歡使用(並理解)這種方法。


什麼用線上面的代碼呢,行:

1)首先,我們使用for -loop遍歷每個字母在word

for letter in word: 

2)對於每個字母,我們按照您在SCRABBLE_LETTER_VALUES中定義的相應金額來增加score,如下所示:

score = score + SCRABBLE_LETTER_VALUES[letter] 

這可以用+=寫簡單:

score += SCRABBLE_LETTER_VALUES[letter] 

3)最後我們打印出得分:

print score 
+0

爲什麼downvotes?我不會通過先教授sum()和列表理解來教給初學者。 – 2013-03-02 18:12:42

+0

感謝您的詳細回覆和解釋 - 這真的很有幫助 – user2127168 2013-03-02 20:09:05

5
>>> sum(SCRABBLE_LETTER_VALUES[l] for l in word) 
6 

這裏:

  1. for l in word迭代的word字母;
  2. SCRABBLE_LETTER_VALUES[l]獲得SCRABBLE_LETTER_VALUES的相應條目;
  3. sum(...)加起來。

sum()內部的結構被稱爲generator expression

+1

OP剛學,所以它是沒有價值,這是地圖和減少。表達式中的SCRABBLE_LETTER_VALUES [1]是一個映射函數,sum是一個reduce函數。 – jrwren 2013-03-02 18:18:21

+0

非常感謝您的快速回復和解釋 - 我到處搜索了一個簡單的答案。 – user2127168 2013-03-02 20:08:12