程序运行正常,但给出了错误的答案

时间:2015-05-25 01:57:49

标签: python

我正致力于项目欧拉挑战赛22 -

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

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

文件中所有名称分数的总和是多少?

但每当我尝试输入答案时,我都会得到网站说这是错误的答案,我宁愿没有答案,但是如果你能给我一些关于如何修复我的程序的提示,甚至是什么我应该抬头看,我真的很感激。

这是我的代码 -

Names_File = open("names.txt", "r+").read()
Names = []
Name_Start = ''
name =''
count=0
total = 0

def Value(word,place):
    ABC_Value={'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}
    number = 0
    place+=1
    for i in word:
        number += ABC_Value[i]
    return number * place

def Clean_Up(Names_File):
    global name
    for i in Names_File:
        if i == '"':
            pass
        elif i==',':
            Names.append(name)
            name = ''
        else:
            name = name + i

Clean_Up(Names_File)
Names = sorted(Names)

while count < len(Names):
    total += Value(Names[count],count)
    count+=1


print(total)

非常感谢。

2 个答案:

答案 0 :(得分:0)

我想也许你想做:

Names = [l.strip() for l in open("names.txt", "rU")]

而不是你当前的前两行。这会将名称文件读入行列表而不是字符序列。

答案 1 :(得分:0)

假设每个名字都在你的文件中用新行写成,这应该可行

import string

alphab = list(string.ascii_lowercase)
sorted_names_list  = open("names.txt").read().splitlines()
sorted_names_list.sort()  
score = 0
for position,name in enumerate(sorted_names_list):
    alphabetic_score = [alphab.index(letter.lower()) for letter in list(name)]
    score+=position*sum(alphabetic_score)
print score