我正在处理 Project Euler 的问题 22:
使用names.txt
(右键单击并“将链接/目标另存为...”),一个包含超过 5000 个名字的 46K 文本文件,首先按字母顺序对其进行排序。然后计算每个名称的字母值,将该值乘以其在列表中的字母位置以获得名称分数。
例如,当列表按字母顺序排序时,价值3 + 15 + 12 + 9 + 14 = 53
为 的 COLIN 是列表中的第 938 个名称。因此,COLIN 将获得 938 × 53 = 49714 的分数。
文件中所有名称分数的总和是多少?
我的代码(如下)得到了答案871179673
。正确答案应该是871198282
,这让我少了大约 18k。
def score(name, pos):
score = 0
for letter in name:
if letter == "A": score += 1
elif letter == "B": score += 2
elif letter == "C": score += 3
elif letter == "D": score += 4
elif letter == "E": score += 5
elif letter == "F": score += 6
elif letter == "G": score += 7
elif letter == "H": score += 8
elif letter == "I": score += 9
elif letter == "J": score += 10
elif letter == "K": score += 11
elif letter == "L": score += 12
elif letter == "M": score += 13
elif letter == "N": score += 14
elif letter == "O": score += 15
elif letter == "P": score += 16
elif letter == "Q": score += 17
elif letter == "R": score += 18
elif letter == "S": score += 19
elif letter == "T": score += 20
elif letter == "U": score += 21
elif letter == "V": score += 22
elif letter == "W": score += 23
elif letter == "X": score += 24
elif letter == "Y": score += 25
elif letter == "Z": score += 26
else: score += 0
# end for loop.
return score * pos
#end def score.
f = open('names.txt')
string = f.readlines()
f.close()
names = sorted(str(string).split(","))
tscore = 0
pos = 1
for name in names:
tscore += score(name, pos)
pos += 1
#end for loop.
print tscore
如果我通过我的 score 函数运行“Colin”示例,我会得到正确的结果。我已经测试了列表中的其他几个名字,它们的得分也正确。我用谷歌搜索了这个问题并得到了各种解决方案,但由于我是 python 新手,我想了解我做错了什么。谢谢你的时间!