2017-08-06 37 views
1

我的代码为Project euler编号22返回正确的awnser为例子,但为主要问题返回871323337这是错误的。代码通过示例,但没有给出正确的输出(项目欧勒编号22)

使用names.txt(右键单击并选择'Save Link/Target As ...'),一个包含五千多个名字的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) 
+0

你想让我们告诉你什么? –

+0

@BillBell你能告诉我我的代码有什么问题吗? –

+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
确保投票这个答案是正确的,如果它的作品!

+0

你能告诉我我的代码有什么问题吗? –

+0

我真的不知道你的代码在做什么。如果你明确了你的变量和外部函数是什么,它将会有很大的帮助。另外,使用多于3个字符的多字词功能名称是一个好主意。没有任何对你的代码的理解,我可以建议的是,你清理它,并确保你正确地导入文件,编号的字母,并编号的名称。尝试重新启动 - 通常比修复已经损坏的内容容易得多。 – Nate

+0

感谢您的咨询! –