三个语句
break
与if配合使用,if...break的意思是如果满足了某一个条件,就提前结束循环,只能在循环内部使用。所以要注意break前的缩进!Tab键和空格键不能同时混用。
for...in...:
...
if ...:
break
# break语句搭配while循环
while...(条件):
...
if ...:
break
当然,break也可以和if条件同级,如:
for...in...:
...
if ...:
break
# break语句搭配while循环
while...(条件):
...
if ...:
break
不过这样子的话,循环只运行一次就被break,只运行了一次循环体,这时等同于直接运行循环体,而不用加循环和break。比如:
for i in range(5):
a = int(input('输入一个数'))
if a == 3:
print(a)
break
等同于:
a = int(input('输入一个数'))
if a == 3:
print(a)
加break的时候要看明确是要达到什么样的结果才要跳出循环。
continue
在循环内部使用,当条件满足时,触发continue语句,将跳过之后的代码,直接回到循环的开始,即结束本次循环,开启下次循环。
for...in...:
...
if ...:
continue
# continue语句搭配while循环
while...(条件):
...
if ...:
continue
只要触发了continue,后面的代码不管是什么都会被跳出,回到循环的开始。
for i in range(5):
print('我真棒!')
if i == 3 :
continue
print('这句话在i==3的时候不打印')
else
当循环中没有碰到break语句、continue语句等跳出循环的操作时,就会执行循环后面的else语句,否则就不会执行。
for i in range(5):
a = int(input('请输入0结束循环,你有5次机会:'))
if a == 0:
print('你触发了break语句,导致else语句不会生效。')
break
else:
print('5次循环你都错过了,else语句生效了。')
当去掉break语句之后,最后一句在循环结束之后都会打印出来。
两个循环
for循环
语法格式:
for i in <序列>:
pass
介绍:
- i 是变量名,可以修改;
- in后可接列表、字典和字符串,但不允许接整数、浮点数;若是字典,则赋值给变量的是字典中的key,而不是value。即遍历的是key,若是字符串,会依次输出字符;
- for...in...语句最后需要加冒号;
- for...in...语句内部语句需要缩进,会被重复执行
- 循环时,逐一访问全部数据;
- 列表里的元素值依次赋值给变量i,i最终的值取决于最新一次的赋值
for i in [1,2,3,4,5]:
print(i)
#显示结果为:
#1
#2
#3
#4
#5
for i in '我真棒':
print(i)
#显示结果为:
#我
#真
#棒
d = {'小明':95,'小红':99,'小白':92,'小张':89}
for i in d:
print(i)
#显示结果为:
#小明
#小红
#小白
#小张
d = {'小明':'醋','小红':'油','小白':'盐','小张':'米'}
for i in d:
print(d[i])
#显示结果为:
#95
#99
#92
#89
补充一个range()函数:
- 使用range()函数,可以生成一个整数序列。
- 参数的意义:
- range(n)与range(0,n)一样,都是生成一个从0到n-1的整数序列
- range(m,n),n>m,生成从m到n-1的序列。取头不取尾。
- range(m,n,p),n>m,生成m到n-1中间隔为p的整数序列。例如range(3,30,5)的意思就是从3开始每间隔5取一个数,直到29,结果为[3,8,13,18,23,28]。(只有两个参数时,p默认为1。)
range()也有偏移量,取值时跟列表类似。
可以用for...in...语句遍历range()函数生成的整数序列并打印。
for i in range(13,17):
print(i)
#显示结果为:
#13
#14
#15
#16
for i in range(n):,表示循环n次。如下面例题中i=0,i=1,i=2时都执行一次语句内的代码,也就是3次。
for i in range(3):
print('我很棒')
#结果显示为:
#我很棒
#我很棒
#我很棒
while循环
- 与if条件判断类似,while后条件若满足,会进入语句内部循环直至条件不再满足或内部打断。
- 用于处理未知循环次数或循环固定次数的问题。
- 格式:
while <条件>:
pass
当while的条件中含有变量时,变量需要先定义;
初始值根据需要可灵活设置,条件要对应做更改。(后面做详细说明)
#代码1:
a = 0
#非格式要求,但在while循环前必须要定义变量
while a < 5:
a = a + 1
print(a)
#代码2
a = 1
#非格式要求,但在while循环前必须要定义变量
while a < 6:
print(a)
a = a + 1
#代码1和代码2的结果均为:
#1
#2
#3
#4
#5
a = 0
while a < 5:
a = a + 1
print(a)
#显示结果为:(因为print()在循环外,只输出最终a的赋值)
两种循环的对比
for循环和whlie循环最大的区别在于【循环的工作量是否确定】,for循环就像空房间依次办理业务,直到把【所有工作做完】才下班。但while循环就像哨卡放行,【满足条件就一直工作】,直到不满足条件就关闭哨卡。
循环次数确定的情况下:
一般循环次数确定的情况下,for循环和while循环是可以通用的,常见的就是计数。
比如:
#用for循环打印3遍
for i in range(1,4) :
print('明日复明日,明日何其多。')
#用while循环打印3遍
j = 1
while j<4 :
print ('明日何其多,明日何其多。')
j =j+1
该段代码过程中没有用到 i 或 j 这两个变量,只是应用了其计数的作用。
下面这段代码就有用到循环条件中的变量:
#for循环完成1到100的整数分别乘以5的计算,第一个打印的值是5,最后一个是500
for i in range(1,101):
print(i*5)
用while改写:
#while循环完成1到100的整数分别乘以5的计算,第一个打印的值是5,最后一个是500
#第一种方法:
i = 0
while i<100 :
i = i+1
print (i*5)
i的初始值不一样,后面【i=i+1】的位置以及while的条件都有变化,这个可以逐行进行分析
初始值是i=0,我们要打印出第一个值是5,那就需要把【i=i+1】放在print()之前,这样0加上了1之后,再乘以5,才能得出第一个打印的值,即5;最后一个值是500,那i的值在【i=i+1】之后要是100,并且打印之后跳出循环,所以while的条件是【i<100】,当i等于99时,满足【i<100】的条件,执行【i=i+1】,此时i的值变成100,然后print (i*5)为500,再到while条件判断,【100<100】,显然不成了,所以跳出。
#第二种方法:
i = 1
while i<101 :
print (i*5)
i = i+1
这个也是同样的道理。初始值是i=1,我们要打印出第一个值是5,那就需要把【i=i+1】放在print()之后,这样print (i*5)才能得出第一个打印的值,即5;最后一个值是500,那print(i*5)的时候i的值要是100。i=100时,要满足while条件,这时打印print (i*5),得到最后需要的值500,然后执行【i=i+1】并要求跳出循环,执行【i=i+1】之后i的值为101,所以while的条件是【i<101】。
print()语句不一样要放在最后,代码是一行一行运行的,print()之后有代码,还是会继续运行
"工作量"不确定的情况下
比如:
while True:
print('while True')
当然,这是一个死循环,那么如何让循环终止呢?
加入break
while True:
print('while True')
break
这样子就可以防止死循环,但是这个代码只能打印一遍,如何才能打印两遍呢?
这需要加入一个变量和if条件,变量主要是用于计算循环次数,if条件用来打断。
i = 1
while True:
print('while True')
if i == 2:
break
i += 1
改成其他初始值也可以:
i = 0
while True:
print('while True')
if i == 1:
break
i += 1
将【i += 1】放在条件句之前也可以
i = 0
while True:
i += 1 # 放在print()后面也可以,只要在条件句之前
print('while True')
if i == 2:
break
这几段代码都是可以,只要计算了两遍,就可以。(同学们有其他的想法也可以直接敲代码print()一下)
还有没有其他方法呢?
当然有。比如用for循环嵌套:
while True:
for i in range(2):
print('while True')
break
for循环会自定义一个变量i,所以这里不要再给i定义初始值。
除了用range(2),还可以用range(1,3)、range(2,4)、[1,2]、['a','b']、'ab'、'12'等等。只是range()比较常用。可以很灵活的运用。
这一点大家能否理解呢?
解释一下:因为这里不需要用到变量i的值,所以只要能够使得for循环后面的序列给i赋值两次就可以。
range(1,3)会取数字1和2赋值给i,使得循环执行两遍;
range(2,4)会取数字2和3赋值给i,使得循环执行两遍;
[1,2]会取数字1和2赋值给i,使得循环执行两遍;
['a','b']会取字符串'a'和'b'赋值给i,使得循环执行两遍;
'ab'会取字符串'a'和'b'赋值给i,使得循环执行两遍;
'12'会取字符串'1'和'2'赋值给i,使得循环执行两遍。
另外,要注意的是,其实在这一段代码中,有点累赘了,还可以再优化。
试试直接运行循环体也可以出来一样的结果:
for i in range(2):
print('while True')
同学们在写循环的时候,一定要思考一下,循环体包括那一部分?
在什么条件下需要打断跳出?
另外,在写循环之前可以先把循环体写出来,测试没问题之后再加入循环体。
-End-