2016-08-15 30 views
1

我正在從項目歐拉問題22。Project Euler 22 Python |從正確的結果300k

使用names.txt(右鍵單擊和'保存鏈接/目標爲...'),一個包含五千多個名字的46K文本文件,首先將其按字母順序排序。然後計算每個名稱的字母值,將此值乘以列表中的字母位置以獲得名稱分數。 例如,當列表按字母順序排序時,值爲3 + 15 + 12 + 9 + 14 = 53的COLIN是列表中的第938個名稱。因此,COLIN將獲得938×53 = 49714的分數。 文件中所有名稱分數的總和是多少?

下面我的代碼適用於COLIN示例,我也嘗試了一個5個名字的小列表,它是正確的。但在這裏我的結果是870873746,它應該是871198282.因此〜324k缺失。 我編輯了names.txt文件。每個名稱都在一行中,沒有「」。

nameList = [] 
letterDict = {"A" : 1, "B" : 2, "C" : 3, "D" : 4, "E" : 5, "F" : 6, "G" : 7, "H" : 8, "I" : 9, "J" : 10, "K" : 11, "L" : 12, "M" : 13, "N" : 14, "O" : 15, "P": 16, "Q" : 17, "R" : 18, "S" : 19, "T" : 20, "U" : 21, "V" : 22, "W" : 23, "X" : 24, "Y" : 25, "Z" : 26} 
a = 0 
namescoresum = 0 
b = 0 
c = 0 
while a < 5163: 
    x = raw_input() 
    nameList.append(x) 
    a += 1 

nameList.sort() 
print nameList 

for name in nameList: 
    b += 1 
    lettersum = 0 
    for letter in name: 
     c += 1 
     lettersum += letterDict[letter] 
    indexofname = nameList.index(name) 
    namescoresum += (lettersum * indexofname) 

print "NAMESCORESUM: ", namescoresum 

回答

0

我相信你有一個錯誤的錯誤。請記住,數組索引從零開始,但序數(如第一個,第二個,第938個)從一開始。此外

if name == 'COLIN': 
    print 'COLIN', indexofname 
+0

呀。謝謝 :) – Mr3m4r3

0

,要完成這個問題上:

試試這個:

namescoresum += lettersum * (indexofname+1) 

要確定是肯定的,如果你有一個差一錯誤,將它添加到您的for循環一點點......如果你想用單個理解列表解決問題(假設你已經準備好了你的數據),下面是一些提示:

  • ORD,ASCII,總之,列舉

你去那裏:-)