代码传递示例但没有给出正确的输出(项目符号22)

时间:2017-08-06 19:45:22

标签: python-3.x

Project Euler number 22的代码返回示例的正确awnser,但对于主要问题,它返回871323337,这是错误的。

使用names.txt(右键单击并将“保存链接/目标为...”),一个包含超过五千个名字的46K文本文件,首先按字母顺序排序。然后计算每个名称的字母值,将该值乘以列表中的字母位置以获得名称分数。 例如,当列表按字母顺序排序时,值为3 + 15 + 12 + 9 + 14 = 53的COLIN是列表中的第938个名称。因此,COLIN将获得938×53 = 49714的分数。 文件中所有名称分数的总和是多少?

y=[]
for a in range(1,len(x)+1):
    s="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
    for b in x:
        if b<s:
            s=b
    y.append(s)
    x.remove(s)
def letter_to_int(letter):
    return int(ord(letter)-64)
def sum_in_string(s):
    t=0
    for i in s:
        if i=='!':
            break
        t=t+letter_to_int(i)
    return t+60
t=0
for i in range(0,len(y)):
    t=t+sum_in_string(y[i])*(i+1)
print(t)

1 个答案:

答案 0 :(得分:0)

以下代码可以使用:

names = ["MARY","PATRICIA","LINDA","BARBARA","ELIZABETH" . . . .]

alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", 
            "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]

names = sorted(names)
total_score = 0
for i in range(0, len(names)):
    name = names[i]

    letter_score = 0
    for letter in name:
        letter_score += alphabet.index(letter) + 1

    total_score += (i+1) * letter_score


print(total_score)

结果是871198282
如果有效,请务必将此答案投票正确!