我需要編寫一個程序,總結所有可在100到2000範圍內除以3的整數。我甚至不知道從哪裏開始,到目前爲止我寫了一小段代碼,這是不正確的。總結範圍內的所有整數()
for x in range(100, 2001, 3):
print(x+x)
任何幫助非常感謝!
我需要編寫一個程序,總結所有可在100到2000範圍內除以3的整數。我甚至不知道從哪裏開始,到目前爲止我寫了一小段代碼,這是不正確的。總結範圍內的所有整數()
for x in range(100, 2001, 3):
print(x+x)
任何幫助非常感謝!
使用發電機表達和功能在這裏:
res = sum(x for x in range(100, 2001) if x % 3 == 0)
這是不言自明的代碼:你將所有數字從100到2000,包括在內,可以被3整除。
你可以刪除'[]' - 不需要物化列表來計算總和。 – ThiefMaster
@ThiefMaster所以它會成爲一個列表生成器,對吧? – aga
@ThiefMaster如果它沒有實現列表,它傳遞的總和值是多少? –
有一個sum function
>>> sum(filter(lambda x: x % 3 == 0, range(100, 2000)))
664650
但是,這是更好的:
>>> sum(x for x in range(100, 2000) if x % 3 == 0)
664650
既然你知道在這個範圍內的第一個數字是由3整除的是102,你可以做到以下幾點:
解決方案:
>>> sum(range(102, 2001, 3))
664650
,使之成爲一個強大的功能:
def sum_range_divisible(start, end, divisor):
while start % divisor != 0:
start += 1
return sum(range(start, end, divisor))
使用它:
>>> sum_range_divisible(100, 2001, 3)
664650
注:
這裏的好處是,你不必檢查在全範圍內的每個數字,因爲你是3,每次跳躍。
時間:
我已經超時了不同的解決方案,礦山和aga's:
>>> import timeit
>>> timeit.Timer('sum(range(102, 2001, 3))').repeat()
[9.516391893850312, 9.49330620765817, 9.508695564438462]
>>> timeit.Timer('sum(x for x in range(100, 2001) if x % 3 == 0)').repeat()
[134.757627812011, 134.46399066622394, 138.34528734198346]
結論:
我的回答是快了的因素14
sum(filter(lambda l : l%3 ==0, range(100,2001)))
請不要使用lambda過濾器。代之以使用列表理解/生成器表達式更好。 – ThiefMaster
我不認爲我們應該在這裏討論lambda的新章節,由於我使用它們的某些原因,關於lambda的討論已經很多。總之,請轉到此鏈接https://mail.python.org/pipermail/python-dev/2006-February/060415.html – devil00
這是一個封閉的公式。
如果(u_i)是由它的第一項U_0及其共同差r,則的(u_i)的n個第一項的總和所定義的序列是:
編輯:我有使這個小小的video視覺解釋。
A popular anecdote將此公式歸於年輕的Johann Carl Friedrich Gauss。
在你的情況:
因此,總和爲(633 *(102 + 1998))/ 2 = 664650.
作爲通常的range
參數的Python函數start
,stop
,step
:
def arithmetic_series(start, stop, step):
number_of_terms = (stop - start) // step
sum_of_extrema = start + (stop - step)
return number_of_terms * sum_of_extrema // 2
在你的情況下,呼叫將是:
arithmetic_series(102, 2001, 3)
的複雜度爲O(1),而不是爲O(n),所以毫不奇怪:
%timeit sum(range(102, 2001, 3))
100000 loops, best of 3: 17.7 µs per loop
%timeit arithmetic_series(102, 2001, 3)
1000000 loops, best of 3: 548 ns per loop
如果這更像是「發明一種算法」的作業,提示可能就足夠了:一個數字可以被三整除,以防單個組件總和爲可被三整除的數字(例如948可以被3整除,因爲9 + 4 + 8 = 21可以被3整除,等等)。 –