我正在做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)
我知道代码有点凌乱(我是初学者),但我一直在绞尽脑汁但却无法想到任何事情。任何人都可以在我出错的地方帮助我吗?
谢谢!
答案 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)
编辑:已排序()位于错误的位置,已更正