Python #22欧拉计划-我一直得到错误的答案

Python #22欧拉计划-我一直得到错误的答案,python,project,Python,Project,: 使用names.txt(右键单击并“将链接/目标另存为…”),46K文本 包含五千多个名字的文件,首先对其进行排序 按字母顺序排列。然后计算出 每个名称将此值乘以其在列表中的字母位置 列表以获得姓名分数 例如,当列表按字母顺序排序时,COLIN, 它的值为3+15+12+9+14=53,是世界上第938个名字 列表因此,科林的得分为938×53=49714 文件中所有姓名分数的总和是多少 你还没有把名字分类。问题是 begin by sorting it into alphabetical

:

使用names.txt(右键单击并“将链接/目标另存为…”),46K文本 包含五千多个名字的文件,首先对其进行排序 按字母顺序排列。然后计算出 每个名称将此值乘以其在列表中的字母位置 列表以获得姓名分数

例如,当列表按字母顺序排序时,COLIN, 它的值为3+15+12+9+14=53,是世界上第938个名字 列表因此,科林的得分为938×53=49714

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



你还没有把名字分类。问题是

begin by sorting it into alphabetical order.
因此,在计算之前使用
nametolist.sort()
可以解决您的问题

但请考虑字典做字母得分映射,而不是26的情况,也不要影子内置方法<代码>求和<代码>。 大概是这样的:

import string
#create dictionary
lettersDict = {c: L for L,c in enumerate(string.ascii_uppercase, 1)}

with open('names.txt', 'r') as fr: #using with would be better when opening files
    line = fr.read()
nametolist = line.split(',')

total=0
for i in range(len(nametolist)):
    nametolist[i] = nametolist[i][1:-1]
nametolist.sort() #sort after getting rid of punctuations

for i in range(len(nametolist)):
    wordsum = 0
    for j in range(len(nametolist[i])):
        wordsum += lettersDict[nametolist[i][j]]
    total += wordsum*(i+1)
print total

寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:。您可以将所有26个字段更改为
sum+=ord(nametolist[i][j])-ord('A')+1
,这将是使这段代码人性化可读性的一个开始。我猜您对if-else语句的缩进是关闭的,因为您提供的代码不是有效的python语法,因为在
for
语句的
后面有一个
elif
。妈的,我的糟糕,我在stackoverflow的错误部分迷失了自己,人们对我的评论投了更高的票,但是你可以使用
ord(nametolist[i][j])-ord('A')+1来得到同样的结果/
import string
#create dictionary
lettersDict = {c: L for L,c in enumerate(string.ascii_uppercase, 1)}

with open('names.txt', 'r') as fr: #using with would be better when opening files
    line = fr.read()
nametolist = line.split(',')

total=0
for i in range(len(nametolist)):
    nametolist[i] = nametolist[i][1:-1]
nametolist.sort() #sort after getting rid of punctuations

for i in range(len(nametolist)):
    wordsum = 0
    for j in range(len(nametolist[i])):
        wordsum += lettersDict[nametolist[i][j]]
    total += wordsum*(i+1)
print total