目录
练习4:输出100-999之间的水仙花数(水仙花数:比如153=个位上的3*3*3+十位上的5*5*5+百位是的1*1*1)
一、内置函数range()函数
它是个内置函数(不需加任何前缀就可以使用)
用于生成一个整数序列,用作在for循环中的遍历对象
创建range对象的三种方式:
他的返回值是一个迭代器对象
优点在于:不管range对象表示的整数序列有多长,所有range对象占用的内存空间都是相同的,因为只需要存储start,stop和step,只有当用到range对象时,才会去计算序列中的相关元素。
1、写法一示例
我们能看到其输出的序列是0-9,所以这样写的话就是默认从0开始了,而不是从1开始到0.而且还默认每次都加以,也就是步长是1.
2、写法二示例
注意规定了起点和终点了的话,最后的输出结果是个开区间,不包括终点
3、写法三示例
之前学过的in和not in语句可以判断整数序列中是否存在指定的整数。可以拿来试一下:
二、循环结构
可以分为while循环和for-in循环。
1、while循环
示例:
它与if的区别在于if就判断一次,而while判断n+1次,包括n次TRUE和一次FALSE。
练习1:计算0-4的累加和
我的写法:
老师的方法:
四步循环法;先初始化变量,再条件判断,再写条件执行体,最后改变变量。
总结:初始化的变量与条件判断的变量与改变的变量为同一个。
与老师的方法做比较,显然我的方法多输出了一个15,题里说让加到4,我却加到了5,为什么呢?
因为执行的顺序不对,不应该先让i加一在就和,应该先从0求和再让i加一才对。
所以要好好考虑程序的流程。
练习2:计算1-100之间的偶数和
我的写法:
老师写得:
老师写得比我写得少了个else,我后来又尝试了一下把else删掉(我本来一开始也是没有带else的但是它报错了,于是我加上else就好啦),
把else删掉后是死循环,输出不来东西,这是因为“i+=1”这条语句是在if里面的,所以在判断i<=100之前,i是1,也一直会是1,它会一直进不来if的,只是判断完成后就再判断,一直循环,无穷无尽。所以这就又涉及到Python的格式问题了。
当我对“i+=1”往前进一个tab键时,程序就是对的,因为此时的“i+=1”是脱离了if的无论进没进if都是要执行这一句话的,这也就使得程序能够顺利进行了。
所以说啊,格式!格式!格式!对齐!对齐!对齐啊!!!!!!在Python里面很重要!!!这下就要成为一名合格的“强迫症患者”了啊!!!
拓展:
(1)、如果把上图中第10行的“i%2==0”写成“i%2”的话就是算1-100之间的奇数和了。是不是很神奇,这里用到的就是布尔值,“i%2”表示的是1,也就是不能被2整除,因此是奇数和。
(2)、如果把上图中的“i%2==0”写成 not bool(i%2)的话就又是计算偶数和了,因为i%2是1,对其取反就是0了,那就是能被2整除了,所以是偶数和。
2、for-in循环
注意遍历的概念:从字符串或序列中依次取值。遍历的对象必须是可迭代对象,目前学过的可迭代对象有字符串和序列。也就是说for-in的对象必须是可迭代对象。
字符串简例:
输出:
Range示例:
这里的i就相当于在range的这个0-9的范围里进行遍历了。
但是如果不需要它这个遍历的家伙呢?
Python中规定:如果不需要自定义变量的话,需要把for和in之间的东西变成“_”.
示例:
这里的话,range充当了输出次数的作用,然后便输出了5句“人生苦短,我用Python”。
练习3:使用for循环计算0-100之间的偶数和
我的代码:
练习4:输出100-999之间的水仙花数(水仙花数:比如153=个位上的3*3*3+十位上的5*5*5+百位是的1*1*1)
我的代码:
我们能看到,就输出了一个370,显然是出现了问题了。为什么呢?
后来我发现,原来是我计算十位数时取整符号用错了,应该用取整符号//而不是用除法符号/,因为如果用除法符号的话就会出现下面的后果:
我们可以看到使用除法符号的话,输出的大部分是小数,而取整的话输出的才是我们想要的十位数字,所以用除法符号会让我们舍弃掉好多符合要求的值,所以,要三思而后行。
所以这样就对了: