2016-11-15 80 views
-3

我想在Python中做問題#22,我的答案是關閉的。我已經瀏覽了列表並嘗試了某些名字,並且他們的計算是正確的(我認爲)。歐拉項目#22 - 爲什麼我的總數減少了324536?

任何人都可以幫忙嗎?

問題:

使用names.txt中(右鍵「目標另存/目標爲...」),載有超過五千年的名字一個46K的文本文件 ,開始通過排序它 按字母順序排列。然後計算每個名稱的 的字母值,將該值乘以其在 列表中的字母位置以獲得名稱分數。

例如,當列表按字母順序排序時,值爲3 + 15 + 12 + 9 + 14 = 53的COLIN 是 列表中的第938個名稱。因此,COLIN將獲得938×53 = 49714的分數。

文件中所有名稱得分的總和是多少?

def letter_sum(word): 
    total = 0 
    for letter in word: 
     total += ord(letter) - ord('A') + 1 
    return total 

def namescore(name, count): 
    name_sum = letter_sum(name) 
    return count * name_sum 

def main(): 
    names = [] 
    f = open('p022_names.txt', 'r') 
    string = f.read() 
    f.close() 

    total = 0 
    names = sorted(string.replace('"', '').split(',')) 
    for i in range(len(names)): 
     total += namescore(names[i], i) 

    print total 
+2

頭腦簡單地告訴我們什麼#22是關於沒有我們每個人不必去看看它單獨? – deceze

+0

編輯 - 謝謝! – jordanc

+0

當你調用'namescore',從0開始時,你乘以'i'。我認爲這是問題所在。 – Rishav

回答

2

您的索引已關閉。 'COLIN'位於索引937基於0的索引,但分配使用基於1的索引。你可以通過改變你的代碼位解決這個問題:再次

total += namescore(names[i], i + 1) 
+0

oops。在COLIN'在938之前有一個不同的錯誤,我糾正之後我一定沒有檢查過。 謝謝! – jordanc

1

這是錯誤的錯誤。在代碼:從0

for i in range(len(names)): 
    total += namescore(names[i], i) 

i開始,而名字應該從1計數,使用namescore(names[i], i + 1)來代替。