===for循环===
对应书本p80-p82
pyton中提供了两种循环结构的呈现方式
第一种:for循环,一般格式是
for <变量名> in <序列>:
<循环体>
else:
<语句块>
其中else部分可省略
for <变量名> in <序列>:
<循环体>
****注意缩进,循环体和语句块前要有空格,注意else下的语句块是另起一行,不要写在else后面,注意冒号
截至本节,我们已经学习了两种序列,分别是列表和字符串;
【for 变量in 序列:】的功能是依次遍历序列中的元素,并在每一次循环中将一个元素赋值给变量,然后执行后续的循环体内容
执行以下程序段
解析:
进入for i循环,依次将序列【列表[1,‘n’,[5,2]]】中的元素赋值给变量i并执行循环体中的print(i)
第一次将1赋值给i,输出i为刚赋值的1,结束本次循环后进入下一次循环,将字符串‘n’赋值给变量i,执行循环体print(i),输出i为字符串'n',在下一次循环输出列表[5,2],当遍历完序列中所有元素并执行完最后一次循环体后,python跳出这一循环执行后续语句;
【输出】 |
1 |
'n' |
[5,2] |
同理,我们也可以遍历一个字符串
它也会遍历字符串中的元素并依次执行print(i)输出字符串中的元素,
【输出】 |
'[' |
'1' |
',' |
'2' |
']' |
要注意第一个序列是列表,第二个序列是字符串,请同学们分清其中的不同
列表中的元素是被包裹在中括号中的,被逗号隔开的一个个符号
字符串中的每一个符号都是一个元素(引号不是,引号用来标识字符串)
【例题】:请写出程序1和2依次输出的内容
答案
#1
【输出】 |
1 |
3 |
'a' |
'b' |
#2
【输出】 |
'1' |
'2' |
'b' |
'c' |
===for-else===
我们在之前接触了分支结构 if-else和if-elif-else;我们知道,分支结构中一旦执行了if中的语句,就不会再执行else中的语句
而for-else语句中的else是这样执行的:在遍历完序列中的元素后,结束for循环并执行else语句中的内容,也就是说只要正常执行完for循环,必定执行else语句中的内容,例子如下
【输出】 |
'1' |
'2' |
'3' |
'4' |
'jjj' |
练习三:请用for-else的知识内容写出如下程序的输出内容依次是?
答案
【输出】 |
1 |
2 |
'8ga' |
===break===
我们上面说到只要正常执行完for循环,必定执行else语句中的内容,那么什么叫不正常执行完?
在循环结构中有break子句,该语句的功能是:执行到break后,跳出当前循环并结束该循环结构;执行break后,不执行else部分的语句块
【输出】 |
1 |
2 |
3 |
'123' |
解析:
首先进入for i 循环,将1赋值给i,进入循环体执行print(i)输出整型1;if判断 1==3,为假不执行分支结构下属语句块,循环体中所有语句执行完,进入下一循环
将序列中的第二个元素2赋值给变量i,进入循环体执行print(i)输出整型2;if判断 2==3,为假不执行分支结构下属语句块,循环体中所有语句被执行完,进入下一循环
将序列中的第三个元素3赋值给变量i,进入循环体执行print(i)输出整型3;判断3==3,为真执行分支结构下属语句块break,跳出当前循环,直接执行for-else语句后续的语句
执行print('123')输出字符串'123'
我们修改下程序;先执行分支结构;再执行print函数
【输出】 |
1 |
2 |
'123' |
它先判断再输出,所以前面的输出是一样的1和2
然后进入第三次for循环,将3赋值给i,判断3==3,为真执行循环体中break语句,直接跳出循环,执行后续语句输出字符串‘123’
练习四:请用for-else和break语句的知识解答下列程序的输出结果
【输出】 |
2 |
3 |
'a' |
'123' |
解析:
进入for i循环
第一次,i为2;判断if 2 == 3;为假;执行else语句下语句块;print(2)输出2;执行后续语句print(i+1)输出3
第二次,i为3;判断if 3 == 3;为真;执行if下语句块,print('a')输出字符串'a';执行break,跳出当前循环不执行for-else的else;
print('123')输出字符串'123'
循环的嵌套以及嵌套中的break使用,例题如下:
【输出】 |
'x1' |
'y1' |
'y2' |
'y3' |
'x2' |
'y1' |
'y2' |
'y3' |
解析:
这个程序首先进入for x循环,将'x1'赋值给x然后进入循环体执行print(x)输出x为'x1';
然后进入for y循环依次输出'y1','y2','y3'
然后结束for y循环,结束for x循环体【注意循环和循环体的区别】,
进入for x的下一个循环,输出'x2'
进入for y循环依次输出'y1','y2','y3';然后结束for y循环,结束for x循环
练习五: 说出下面程序的输出
【输出】 |
1 |
'4' |
'5' |
2 |
'4' |
'5' |
练习六:
【输出】 |
1 |
'4' |
2 |
'4' |
3 |
'4' |
练习七:
【输出】 |
1 |
'4' |
2 |
'4' |
===range函数的使用===
range(开始【默认为0】,结束,步长【默认为1】)牢记顾头不顾尾!!!!
range函数能够返回一个从开始到结束的,间隔为步长的,顾头不顾尾的整数序列
是不是和字符串,列表的切片操作很像?列表名[开始索引:结束索引:步长]注意切片是中括号+冒号;range函数是小括号+逗号
*range(10)等价于range(0,10)等价于range(0,10,1)因为开始和步长是有默认值的。
作为一个‘序列’,当然能够使用for…in来遍历了!
【输出】 |
0 |
1 |
2 |
【输出】 |
2 |
5 |
8 |
解析:
先写好开始和结束 2………10;已步长为间隔填补开始到结束之间的空隙,即 2__5__8__10,顾头不顾尾,能够生成的整数序列是2,5,8;10不取
练习八:以下依次输出什么?
【输出】 |
0 |
2 |
4 |
6 |
8 |
练习九:依次输出什么?
【输出】 |
10 |
7 |
4 |
1 |
-2 |
解析:
先写下开头和结尾
10….-4
以步长为间隔填满间隙
10…7…4…1…-2…-4
顾头不顾尾,舍去-4
固依次输出10,7,4,1,-2
利用range函数和for循环我们可以做很多事情,如计算1+2+3…+99+100的值
解析:
赋值sum为0
for i in range(1,101)生成一个从1-100间隔为1的整数序列并依次赋值给I
第一次 i为1,sum = 0+1
第二次 i为2,sum = 0+1+2
…..
第n次 i为n,sum = 0+1+2….+(n-1)+n