2014-04-25 32 views
0

所以我最近發現了一個項目euler,這對於在編程語言中進行實驗和練習來說非常棒。我最近剛剛想出了問題6的答案,但我覺得這是一種醜陋而不雅的做法。歐拉項目 - python中的#6

的問題詢問:

前十個自然數的平方的總和, 1 ** 2 + 2 ** 2 + ... + 10 ** 2 = 385

前10個自然數總和的平方爲: (1 + 2 + ... + 10)** 2 = 552 = 3025

因此,前10個自然數的平方和數字和平方和爲3025 - 385 = 2640.

找到前100個自然數的平方和和平方和之差。

我的代碼如下所示:

def sum_sq(value): 
    count = value + 1 
    while count > 0: 
     sum_sq = [] 
     for x in range(count): 
      sum_sq.append(x**2) 
      count = count - 1 
     sum_sq = sum(p) 

    count1 = value + 1 
    while count1 > 0: 
     sq_sum = [] 
     for i in range(count1): 
      sq_sum.append(i) 
      count1 = count1 - 1 
     sq_sum = sum(sq_sum)**2 
    return sq_sum - sum_sq 


>>> sum_sq(10) 
2640 
>>> sum_sq(100) 
25502115 

你的鄉親有什麼建議,使這個更短一點,效率?我對python比較陌生,所以原諒我。我想學習好的編碼技術,而不是養成編寫錯誤代碼的習慣。提前致謝!

+0

要在堆棧溢出將代碼粘貼,複製和粘貼正是你所擁有的,突出顯示所有的它,然後單擊' {}'代碼格式化按鈕。 – geoffspear

+7

此問題似乎是脫離主題,因爲它屬於http://codereview.stackexchange.com – jonrsharpe

+0

不要混合使用空格和製表符。你的縮進被搞砸了。只能使用空格。 – ooga

回答

0

我很久以前就解決了這個問題,也是在Python中。一些提示:

  • 您不需要保存列表中的每個值來回答問題。這是一個巨大的時間浪費。

  • 有可能只用1,而/ for循環,而不是4

0

1行代碼來得到答案,這是否對你的工作?

 
def sum_sq(n): 
    return sum([i for i in range(n+1)])**2-sum([i**2 for i in range(n+1)]) 
>>> sum_sq(10) 
2640 
+0

是的,這真棒!謝謝 – danielm01

+0

你可以在'sum'調用中去除'[]'括號以獲得更好的效果效率(畢竟這是歐拉項目;-)) –

2

你可以簡單地做

def sum_sq(value): 
    # list of product of all unique pairs (ignoring order) 
    # of numbers in the range 1 to value, both included 
    t = [i*j for i in range(1, value) for j in range(i+1, value+1)] 
    return 2 * sum(t) 

這是因爲

(1 + 2 + 3 + ... + n)^2 - (1^2 + 2^2 + ... + n^2) 
= 2(
    1*2 + 1*3 + ... + 1*n + 
    2*3 + 2*4 + ... + 2*n + 
    ...     + 
    ...     + 
    (n-1)*n 
    )