2016-03-23 9 views
-4

The original questionを取得保管:#22プロジェクトオイラー - 私が間違った答えに

names.txt(右クリックして '保存リンク/対象として...')、五の上に含む46Kテキスト ファイルを使用して最初の名前は、 をアルファベット順にソートすることから始まります。次に、 の各アルファベットの値を計算し、この値に リストのアルファベット順の位置を掛けて、名前スコアを取得します。

たとえば、リストがアルファベット順にソートされている場合、COLINは3 + 15 + 12 + 9 + 14 = 53の価値があり、 リストの938番目の名前です。したがって、COLINは938×53 = 49714というスコアを取得します。

ファイル内のすべての名前スコアの合計はいくらですか?


fr = open('name.txt', 'r') 
line = fr.read() 
nametolist = line.split(',') 

def namescores(nametolist): 

    sum=0 
    total=0 
    for i in range(len(nametolist)): 
     nametolist[i] = nametolist[i][1:-1] 
    print(nametolist) 
    for i in range(len(nametolist)): 
     for j in range(len(nametolist[i])): 
      if nametolist[i][j] == 'A': 
       sum+=1 
      elif nametolist[i][j] == 'B': 
       sum+=2 
      elif nametolist[i][j] == 'C': 
       sum+=3 
      elif nametolist[i][j] == 'D': 
       sum+=4 
      elif nametolist[i][j] == 'E': 
       sum+=5 
      elif nametolist[i][j] == 'F': 
       sum+=6 
      elif nametolist[i][j] == 'G': 
       sum+=7 
      elif nametolist[i][j] == 'H': 
       sum+=8 
      elif nametolist[i][j] == 'I': 
       sum+=9 
      elif nametolist[i][j] == 'J': 
       sum+=10 
      elif nametolist[i][j] == 'K': 
       sum+=11 
      elif nametolist[i][j] == 'L': 
       sum+=12 
      elif nametolist[i][j] == 'M': 
       sum+=13 
      elif nametolist[i][j] == 'N': 
       sum+=14 
      elif nametolist[i][j] == 'O': 
       sum+=15 
      elif nametolist[i][j] == 'P': 
       sum+=16 
      elif nametolist[i][j] == 'Q': 
       sum+=17 
      elif nametolist[i][j] == 'R': 
       sum+=18 
      elif nametolist[i][j] == 'S': 
       sum+=19 
      elif nametolist[i][j] == 'T': 
       sum+=20 
      elif nametolist[i][j] == 'U': 
       sum+=21 
      elif nametolist[i][j] == 'V': 
       sum+=22 
      elif nametolist[i][j] == 'W': 
       sum+=23 
      elif nametolist[i][j] == 'X': 
       sum+=24 
      elif nametolist[i][j] == 'Y': 
       sum+=25 
      else: 
       sum+=26 
     total += sum*(i+1) 
     sum=0 
+0

質問望ましい行動を含める必要があり、特定の問題やエラーして再生するために必要な最短コード(「**なぜこのコードは動作しないの**?」)それは問題そのものです** **明確な問題文**のない質問は他の読者には有用ではありません。参照:[最小限で完全で検証可能なサンプルの作成方法](http://stackoverflow.com/help/mcve) –

+5

あなたの26のelseifを 'sum + = ord(nametolist [i] [j]) - ord( 'A')+ 1;'に変更することができ、このコードを人間が読めるようにすることができます – Guiroux

+0

私の推測あなたが 'for'文の後ろに' elif'を持っているので、あなたが提供したコードが有効なpython構文ではないからです。 –

答えて

0

名前をソートしていません。質問では、

begin by sorting it into alphabetical order. 

だから、あなたの問題を解決するだろう計算する前にnametolist.sort()を使用。

しかし、ケースが26の代わりにレタースコアマッピングを行い、組み込みメソッドsumもシャドウしないようにしてください。このような
何か:デバッグの助けを求める

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 
関連する問題