项目欧拉#22 - 为什么我的总计是324536?

时间:2016-11-15 11:46:58

标签: python

我正在尝试在python中执行#22问题而我的回答是关闭的。我已经浏览了列表并尝试了某些名称并且它们已被正确计算(我认为)。

任何人都可以帮忙吗?

问题:

  

使用names.txt(右键单击并将“保存链接/目标为...”),一个46K文本   包含超过五千个名字的文件,首先对其进行排序   按字母顺序排列。然后计算出字母值   每个名称,将该值乘以其中的字母位置   列表以获得名称分数。

     

例如,当列表按字母顺序排序时,COLIN,   值得3 + 15 + 12 + 9 + 14 = 53,是第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 个答案:

答案 0 :(得分:2)

您的索引关闭了一个。基于'COLIN'索引的937位于索引0,但该分配使用基于1的索引。您可以通过更改代码来解决问题:

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

答案 1 :(得分:1)

这是一个错误。在代码中:

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

i0开始,而名称应从1开始计算,改为使用namescore(names[i], i + 1)