2015-09-27 97 views
0

我在一個月前開始編寫Python代碼,到目前爲止,我已經完成了其他7個歐拉問題,但現在已經停留一個星期了,這裏的問題陳述:Project Euler#8 Python,我沒有看到代碼有什麼問題

「的1000位數字的四個相鄰數字具有最大的產品是9×9×8×9 = 5832.

發現在1000 - 十三相鄰數字這個產品的最大價值是什麼?「

,這裏是到目前爲止,我寫的代碼:

num = '\ 
73167176531330624919225119674426574742355349194934\ 
96983520312774506326239578318016984801869478851843\ 
85861560789112949495459501737958331952853208805511\ 
12540698747158523863050715693290963295227443043557\ 
66896648950445244523161731856403098711121722383113\ 
62229893423380308135336276614282806444486645238749\ 
30358907296290491560440772390713810515859307960866\ 
70172427121883998797908792274921901699720888093776\ 
65727333001053367881220235421809751254540594752243\ 
52584907711670556013604839586446706324415722155397\ 
53697817977846174064955149290862569321978468622482\ 
83972241375657056057490261407972968652414535100474\ 
82166370484403199890008895243450658541227588666881\ 
16427171479924442928230863465674813919123162824586\ 
17866458359124566529476545682848912883142607690042\ 
24219022671055626321111109370544217506941658960408\ 
07198403850962455444362981230987879927244284909188\ 
84580156166097919133875499200524063689912560717606\ 
05886116467109405077541002256983155200055935729725\ 
71636269561882670428252483600823257530420752963450' 

digit = str(num) 


def find(s, ch): 
    return [i for i, ltr in enumerate(s) if ltr == ch] 

lst = find(digit, "0") 

placeholder = "0" 
series_sum = "0" 

for element in lst: 
    total = 1 
    value = digit[int(placeholder):element] 
    if len(value) == 13: 
     for i in value: 
      total *= int(i) 
     if total > int(series_sum): 
      series_sum = str(total) 
    elif len(value) > 13: 
     c = 0 
     c2 = 13 
     counter = len(value) - 13 
     while counter > 0: 
      for i in value[c:c2]: 
       total *= int(i) 
      if total > int(series_sum): 
       series_sum = str(total) 
      counter -= 1 
      c += 1 
      c2 += 1 
    placeholder = str(element) 

print series_sum 

我的方法在這裏是將數字轉換成字符串,幷包含0的指數,然後名單經過串迭代並檢查0之間是否至少有13個數字,並從那裏進行數學計算,但到目前爲止,我只能設法讓它在前13個數字上工作,我認爲這個錯誤可能在以下部分: elif len(value) > 13:

此外,任何關於這類程序使用哪種類型的對象(列表,字符串,整數等)的建議,爲什麼非常感謝。

編輯:解決它!非常感謝約翰,這是我使用的代碼:

series_sum = 0 

for i in range(len(num)): 
    total = 1 
    digits = num[i: i + 13] 
    for i in digits: 
     total *= int(i) 
    if total > series_sum: 
     series_sum = total 

print series_sum 

現在我看到,我沒有被有效可言,至少我現在知道

回答

2

您不需要變量digit,因爲num已經是一個字符串。要獲得連續的13位所有塊從num你可以使用這樣

for i in range(len(num)): 
    digits = num[i: i + 13] 

了循環,你會得到一些短串的結束,但不會影響您的追求找到最大的產品

0

你可以刪除一個循環....但爲此需要進口

from functools import reduce 
from operator import mul 

total = reduce(mul, map(int,digits), 1) 



    with functools it is faster, than with for loop. 
    test for 1000 runs 
    with for loop     7.484771039336005  
    with functools     6.376082365216808