2016-06-13 71 views
0

我對編碼總體上比較陌生,並開始使用歐拉項目,以使我的編碼更進一步。花了一些時間思考如何自己處理第一個問題,並嘗試使用遞歸函數,不幸的是總是得到相同的錯誤(266333)。我錯過了什麼?要學習什麼大錯誤?歐拉項目 - #1 Python錯誤的解決方案

原來的問題上寫着:「如果我們在下面列出10是3或5的倍數的所有自然數,我們得到了3,5,6和9這倍數的總和爲23

查找在1000以下的所有倍數3或5的總和。「

def function(i, j, h, k): 
    if j < 1000 and k < 1000: 
     i = i + j 
     h = h + k 
     return function(i, j+3, h, k+5) 
    elif j < 1000 and k >= 1000: 
     i = i + j 
     return function(i, j+3, h, k) 
    elif j >= 1000 and k < 1000: 
     h = h + k 
     return function(i, j, h, k+5) 
    else: 
     print (i + h) 


function(0,0,0,0) 

其中I是3的倍數的總和,h爲5的倍數的總和,j是3的倍數和k是5

+0

您的通用變量名稱使此代碼非常難以理解。 'i','j','h'和'k'是什麼意思? – Blckknght

+0

這是強制性的使用遞歸,你會請鏈接到問題? – wind85

回答

1

倍數你的錯誤是,你是包括數字由15整除兩次:一次是3的倍數,並一度爲5

的倍數。對於它的價值,這裏的計算這筆款項的簡明方式:

sum(i for i in range(1000) if not (i % 3 and i % 5)) 
+0

是的,我現在得到了正確的答案,我用一個初始if語句檢查公倍數來解決它。 \t'如果j%5 == 0: \t \t回傳功能(I,J + 3,H,K)' – Vaan616

0

我強烈建議反對r ecursion,因爲它可能適用於少數人,但不適合大人數,即使解決方案可能有效,它也會教會你一個錯誤的方法。

def euler_1(sum, range_beg, range_end): 
    for number in range(range_beg, range_end): 
     if ((number % 3) == 0) or ((number % 5) == 0): 
      sum += number 
     else: 
      pass 

    return sum 


print(euler_1(0, 0, 1000)) 

這是更pythonic,可重複使用,更快,更簡單的閱讀和更正。

+0

這實際上是很容易讓我明白了,開始模這個問題時,完全跳過我的腦海裏。非常感謝你! – Vaan616