2016-04-02 10 views
-2

私が問題に遭遇したとき、Project Eulerで問題8を実行していました。私は1000桁の数字の各桁に独自の値を割り当てる方法を見つけることができませんでした。ここに私のコードは次のとおりです。大きな数字の各桁にどのように値を割り当てるのですか?

def Problem8(): 
    x = [] 
    num = [73167176531330624919225119674426574742355349194934969835203127745063262395783180169848018694788518438586156078911294949545950173795833195285320880551112540698747158523863050715693290963295227443043557668966489504452445231617318564030987111217223831136222989342338030813533627661428280644448664523874930358907296290491560440772390713810515859307960866701724271218839987979087922749219016997208880937765727333001053367881220235421809751254540594752243525849077116705560136048395864467063244157221553975369781797784617406495514929086256932197846862248283972241375657056057490261407972968652414535100474821663704844031998900088952434506585412275886668811642717147992444292823086346567481391912316282458178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450] 
    def ans(i): 
     one = num[i] 
     two = num[i+1] 
     three = num[i+2] 
     four = num[i+3] 
     return one*two*three*four 
    for i in range(1,(len(num2)-3)): 
     x.append(ans(i)) 
    print(x) 

Problem8() 

質問が言ったように、それは隣接する4つの数字ではなく、13のために働くだろう場合、私はちょうどチェックしていました。しかし、私の配列は空になっていた。なぜそれをやっているのですか?より良い方法がありますか?

+0

「num2」とは何ですか? – snakecharmerb

+0

numリストに数字が1つあります。数値に分割したい場合は、strを呼び出す必要があります –

答えて

1

あなたのコードを書いたやり方では、[<bignumber>]は、という1つの要素、つまり問題の大きな番号のリストを作成します。その場合、i > 1num[i]を入力すると、何も表示されません。

あなたは数の全桁のリストを作成したい場合は、次のことを行うことを検討:

num = map(int, str(<bignumber>)) # creates a list of digits 

これが機能する方法はmapは、最初の文字列を変換しながらstrは、文字列にbignumberを変換していることですその個々の文字のリストに反復し、そのリストの各文字を整数に変換して、数字の配列を持つようにします。

残りの分析は問題なく動作します。


その他の問題:

  • num2は未定義です。あなたのコードのどこにも現れず、エラーを投げるべきです。私はそれがタイプミスであったと推測します。
  • iは、rangeコールでは1から始まり、0で始まらない。 off-by-oneインデックスエラーを回避しないように、このrange(0, len(num) - 3)を変更することを検討してください。さらに優れている:リストの理解を使用してください。
  • Python 2.7では、rangeは1000要素のメモリ内に実際のリストを作成します。さらに大きな数字については、これは大量の記憶になるでしょう。 xrangeを代わりに実行するか、Python 3の場合は何もしないでください。
  • 最後に、ansの出力全体を1行にまとめることができます。 onetwoなどの余分な変数を作成する必要はありません。
+0

なぜdownvoteですか?これは完璧に動作し、OPが必要とする最小限を超えています。 –

+0

私はdownvoteをしなかったが、私は示唆を持っている。 'map()'は2番目の引数にiterableが必要ですが、リストである必要はありません。 'map(int、str())' – zondo

+0

'str(bignumber)'を意味しますか? 'bignumber'はintであり、iterableではないので、' map'では使用できません。 :)しかし、はい、それは良い提案です。 –

関連する問題