2011-09-29 85 views
0

我試圖做一些項目上的問題,我得到了與總和的平方和和平方的問題。我不想蠻力,所以我擡頭的解決方案,這是:for循環語法的解釋?

sum1 = 0 
sum2 = 0 

for i in ((x,x ** 2) for x in range(1,100+1)): 
    sum1 += i[0] 
    sum2 += i[-1] 

print(sum1 ** 2 - sum2) 

我不明白:

(x,x ** 2) for x in range(1,100+1) 

我在看到這在另一個代碼高爾夫球解決方案javascript也是。這是一種特定的語法,還是一種常規事物的不熟悉的方式?有人可以解釋嗎?

+0

什麼是JavaScript的關係? – glglgl

回答

4

當面對複雜的語法時,添加print語句。

for i in ((x,x ** 2) for x in range(1,100+1)): 
    print i 

不太有幫助。

試試這個。

a = ((x,x ** 2) for x in range(1,100+1)) 
print a 
for i in a: 
    print i 

推薦?也許。

試試這個:

a = ((x,x ** 2) for x in range(1,100+1)) 
b = list(a) 
print b 

嗯。此外,for i in a循環也停止工作。這發電機對象似乎只做過一次。無論是在for循環中還是在list()(或tuple())函數中,但不能同時使用。

試試這個。

for x in range(1,100+1): 
     print x, x**2 

好的。所以我們學了什麼?

((x,x ** 2) for x in range(1,100+1))是一個生成器表達式。 http://www.python.org/dev/peps/pep-0289/

它是「可迭代的」,可用於for語句或list()函數。

此外,我們學會了添加打印語句來研究混淆語法。