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