
上QQ阅读APP看书,第一时间看更新
7.2 实验验证
代码如下:

这个程序中,有四个新的知识点要说明一下:
(1)i**2,两个乘号连用,表示对前面的数求平方。
(2)str(n),这个函数把参数n转换成字符串,比如输入23这个数字,就转换成了字符'2'和字符'3',这两个有什么差别,数字就是2,3,不需要加引号,字符就需要加引号。进行这个转换后,23就成了一个字符序列,所以再求平方的时候,又用int(i)把它转换成数字。
(3)在定义sadnumber(n,past=set())时,传入了past=set()这个奇怪的参数。其实这个参数不奇怪,它的意思是第二个参数可以不传,不传的情况下,它就默认传入了一个空的集合。
(4)sum()是系统的求和函数,但是这个函数的参数是通过一个复杂的语句生成的:“int(i)**2 for i in str(n)”,这种方法叫作生成器表达式,这个语句等价于(int(i)**2 for i in str(n)),它生成了一个迭代器,与列表解析式有微妙的差异,这个特性是Python语言中比较高级的特性,读者可以暂时放在一边,理解其含义就可以。还是用Python的Console执行一下看看结果:

代码的含义就是把每个数字的平方和进行累加。
程序执行完以后,我们看看20以内的忧伤的数有1,7,10,13,19,是不是与我们的常识差不多?西方人不喜欢的13也在里面,而我们常常喜欢选的2,6,8都是幸福的数,下次再看到这些数,是不是多了一些感觉?
作业:编程求阶乘,并把阶乘的结果放进一个表格,打印出来。