2011-09-29 81 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()函数。

此外,我们学会了添加打印语句来研究混淆语法。