项目欧拉:名称分数 - 将许多单词的值加在一起

时间:2017-01-31 00:49:17

标签: python text

我正在做project Euler #22,它基本上要求你浏览.txt文件中的名单列表,按字母顺序排序,然后对名称中字母的值求和(a = 1) ,b = 2等)乘以每个名字的索引。

例如,当列表按字母顺序排序时,值为3 + 15 + 12 + 9 + 14 = 53的COLIN是列表中的第938个名称。因此,COLIN将获得938×53 = 49714的分数。

我在Python中完成了以下操作,它在小列表中给出了正确的值,但实际列表上的错误答案(+5000名称)。它似乎略微超出了真正的答案。

list = ["MARY","PATRICIA"... "ALONSO"]

dictionary = {'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}
list.sort()
total = 0
for i in list:
  count = 0
  for j in i:
    count += (dictionary[j])
  else:
    count *= (list.index(i) + 1)
    total += count
print(total)

我知道代码有点凌乱(我是初学者),但我一直在绞尽脑汁但却无法想到任何事情。任何人都可以在我出错的地方帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您想要更短的代码,也可以考虑使用列表解析:

li = sorted(["FRED","SUSAN"])
dictionary = {'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}
li = sum(i for i in [sum(dictionary[i] for i in li[j])*(j+1) for j in range(len(li))])
print(li)

编辑:已排序()位于错误的位置,已更正