2012-10-30 41 views
-1

有人可以幫我解決這個問題。我總是得到這個代碼的錯誤,但不知道什麼是錯的?打印總和(x) - python

x= 1523 

while x <= 10503: 
    x=x+2 
    print sum(x) 

編輯。抱歉不清楚。是的,我想要得到1523到10503(包括)(間隔2)的所有數字的總和。

+1

如果你解釋你想達到...萬一 –

回答

2

問題是sum()僅適用於可迭代類型,例如元組,列表或類似元素。

而你正在求和一個整數,所以這不是工作。

0

你可以嘗試這樣的事情:

x = 1523 
x_list = [] 
while x <= 10503: 
    x=x+2 
    x_list.append(x) 
print(sum(x_list)) 

我假設你想獲得的所有數字的總和在算術級數,其第一個元素是1523年最後一個元素是10503,其公差爲2它是不是從你的問題明確

+0

你正在使用Python 2.x中的最後一條語句將打印總和(x_list),即不正是它可能會爲你有益括號 – Pulimon

+0

如果您從['__future__'](http://docs.python.org/2/library/__future__.html)導入了'print_function',則其行爲與Python 3中的相同。如果您有沒有導入它(因此使用print語句),括號是無害的,因爲它們只是將值sum(x_list)分組。所以絕對沒有理由在2.x中省略括號。 – phihag

+0

哦,我只在python 3.x工作到現在。謝謝(你的)信息。 – Pulimon

6

的Python的解決方案是:

print(sum(range(1523, 10504, 2))) 

(使用while循環來構建一個包含一系列整數的列表s有點愚蠢時,有內置,它會更有效地。)

+0

print(sum(range(1523,10503,2)))給出26993880 ,但另外兩個解決方案27014888.你爲什麼認爲是這樣? – noob

+0

您希望第二個參數爲10504,因爲它需要高於您範圍中的最後一個數字。 phihag的解決方案將在最後添加10505,而Pulimon的解決方案將省略1523. – geoffspear

5

爲什麼使用循環?

>>> ((10503-1523+2)//2 * (1523 + 10503))//2 
27004383 

這僅僅是一個老問題的擴展,「什麼是所有整數從1到100的總和?」這是

50*101 (1+100 + 2+99 + 3+98 + ... 50+51) 
+1

+1基礎數學。 – geoffspear