我正致力于项目欧拉挑战赛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)
非常感谢。
答案 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