2016-04-02 33 views
-2

當我遇到問題時,我正在做Euler項目的問題8。我無法找到一種方法來分配千位數字中的每個數字自己的值。這是我的代碼:如何爲大數字中的每個數字賦值?

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() 

我只是檢查它是否適用於四個相鄰的數字,而不是十三個像問題所述。但是我的陣容一直空着。爲什麼這樣做?有沒有更好的辦法?

+0

什麼是'num2'? – snakecharmerb

+0

你的num列表中有一個數字,如果你想分割成你需要調用str的數字 –

回答

1

你編寫代碼的方式,做[<bignumber>]創建一個列表,只有一個元素,即有問題的大數。在那種情況下,爲i > 1num[i]沒有結果。

如果你想創建一個號碼的所有數字的名單,考慮執行下列操作:

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

這種工作方式是str轉換bignumber爲字符串,而map首先將字符串可迭代到其單個字符的列表,然後將該列表中的每個字符都轉換爲整數,以便您現在擁有一組數字。

然後您的其餘分析可以毫無問題地工作。


其他問題:

  • num2是不確定的。它看起來沒有任何代碼,並且應該拋出一個錯誤。我認爲這是一個錯字。
  • 您的i只能從1開始,而不是0在您的range呼叫中。考慮改變這個range(0, len(num) - 3),以避免錯誤的索引錯誤。更好:使用列表理解。
  • 在Python 2.7中,range用1000個元素在內存中創建一個實際列表。對於更大的數字,這將成爲大量的記憶。改爲考慮做xrange,或者 - 如果在Python 3上 - 什麼也不做。
  • 最後,您可以將ans的整個輸出壓縮爲一行。無需創建像one,two
+0

爲什麼downvote?這完美地工作,超越了OP所要求的最低限度。 –

+0

我沒有downvote,但我確實有一個建議。 'map()'需要一個可迭代的第二個參數,但它不需要是一個列表。你可以簡單地使用'map(int,str())' – zondo

+0

你的意思是'str(bignumber)'? 'bignumber'是一個int,不可迭代,因此不能在'map'中使用。 :)但是,是的,這是一個很好的建議。 –