2016-11-15 82 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)来代替。