在Python小课-1--5节中,已经学习了:
基础模块--数据--数据类型(整数、字符串,浮点数,布尔值,空值),
基础模块--变量,
基础模块--函数(input函数、print函数,len函数,type函数,转换函数)。
基础模块--控制流(条件判断)
本节将继续学习本节继续学习:基础篇--控制流--while循环
一.基础知识:控制流中的“while循环”
1、while循环
2、break子句
3、continue子句
4、exit函数(循环的应用中出现较多)
循环:将一件事情重复的执行多次。
例如:重复性的手工下载无穷无尽的图片和Excel表格的数据等,但是计算机可以通过【循环】程序,按照某些设定的规则,一张张的图片或者文件下载下来,从而解放人力;
例如:作为用户运营人员,需要不定期的取解散超多的用户群,手动点击“解散”,但是计算机通过【循环】程序,按照设定好的规则,自动解散用户群。
1、while循环
(1)while循环语句基础
while...(条件):
...(干点什么)
...(干点什么)
...#while为假的结果
while语句本质:
Q1:第1行代码中while在英文中表示“当”的意思,后面接着“条件”,表示当这个条件为真,则执行while后面的第一个“干点什么”,当第“条件”判定为假,结束循环;
Q2:第2行和第3行代码,都是while内部代码,回到while语句继续执行判定;
Q3:当while后面的条件为假时,循环结束。
注意:while语句条件后面必须加英文冒号【:】,while内部的“干点什么”的代码行必须首行缩进四个空格,漏掉就会运行报错。
(2)while语句经典案例
练习1:《神雕侠侣》中的Python逻辑:当没有男人愿意为小龙女去死的时候,小龙女要一直一直活在古墓里,即为循环,直到有男人愿意为小龙女去死的时候,就可以打破没有男人愿意为她去死,需要一直一直住在古墓里的循环,从而离开活死人墓,下山。
man=''
while man!= '有':
print('小龙女不能离开活死人墓,要一辈子住在古墓里')
man=input('有没有男人愿意为小龙女而死?')
print('小龙女可以离开古墓,下山看凡尘啦!')
代码本质:
Q1:定义变量“man”为空的字符串;
注意:使用变量前,需要先定义变量,且为变量赋值
Q2:while后面有一个条件变量man不等于“有”这个字符串的时候,这个条件为真,从而执行第一个循环结果:打印出:“小龙女不能离开活死人墓,要一辈子住在古墓里”。
Q3:继续询问“有没有男人愿意为小龙女而死?”输入完信息后,则回到第2行while语句右边的变量man不等于字符串“有”的条件判断,直到条件判断为假的时候,即变量“man”等于“有”的时候,while循环结束;
Q4:while循环代码,当有男人愿意为小龙女而死的时候,while后的条件判断为假,循环程序结束,从而运行打印程序,打印出“小龙女可以离开古墓,下山看凡尘啦!”。
运行结果:
练习2:while循环计算
a=0
while a<5:
a=a+1
print(a)#print函数前面无缩进
运行结果:
5
代码说明:变量a从0开始,参与循环,每次循环都是+1,当被加到等于5的时候,就不会满足循环条件a<5,循环则停止,然后打印a。
练习3:while循环计算,依次在屏幕上打印出1,2,3,4,5,6,7,8,9,10这10个整数。
a=0
while a<10:
a=a+1
print(a)#print函数前面缩进了4个空格
运行结果:
1
2
3
4
5
6
7
8
9
10
代码本质:
Q1:第1行代码,设置变量a等于0;
Q2:第2行代码,while语句,当a<10为真的时候,启动循环;
Q3:第3、4行代码,先让a=a+1,再打印。
打印出了整数1,接着a=1回到while循环语句的第2行参与循环判断,检验a=1是不是小于10,满足条件,则执行3-4行的代码,打印出整数a=2,依次循环;
Q4:在打印出9之后,回到第2行while判断,a=9<10,满足条件,则执行a=a+1,输出整数10,,整数a-10,再次回到第2行while判断,a=10不小于10,不满足条件,条件判定为假,循环结束,打印出了所有的整数。
2、break子句
(1)while循环内部使用的break子句
break子句:结束循环的意思。
注意:break需要缩进8个空格,因if子句之下的代码需缩进4个空格,此时if子句在while子句下,需缩进4个空格,因此break需缩进8个空格。
while...(条件):
...(干点什么)
...(干点什么)
if ...(条件):#如果if后面的条件为真,就执行break的命令,否则继续循环
break#结束循环,去执行循环外部的代码
...#循环外部的命令
break子句本质:如果满足了一个条件,就提前结束循环,只能在循环内部使用。
(2)break子句经典案例
练习1:《西游记》中的车迟国的陈家庄片段,陈家庄每年都会上供童男童女给鲤鱼精吃,百姓们苦不堪言,直到唐僧师徒到来,孙悟空智斗鲤鱼精,才解救百姓于水火。
while True:
print('陈家庄鲤鱼精作乱,百姓们需上供童男童女!')
m=input('唐僧师徒来了吗?')
if m == '来了':
break
print('悟空智斗鲤鱼精,救百姓于水火,陈家庄不用再上供童男童女了!')
代码本质:
Q1:第1行代码,while后面有一个条件,True作为条件时,永远会被判定成真,从而while循环将会永远循环下去。
Q2:第2行代码,打印:'陈家庄鲤鱼精作乱,百姓们需上供童男童女!'的字符串。
Q3:第3行代码,请用户输入一个信息,回到孙悟空是否来了。
Q4:第4行代码,如果变量m等于“来了”,那么if后面的条件满足,执行break子句,如果没有则回到while True继续循环。
Q5:第5行代码,break表示循环结束,去执行循环外部的代码;
Q6:第6行代码,打印:'悟空智斗鲤鱼精,救百姓于水火,陈家庄不用再上供童男童女了!'的字符串。
说明:本案例while True的条件已经决定了该循环是永远为真的无限循环,因此需要if函数来限制循环,break来结束循环。
运行结果:
练习2:需求:功能是请用户输入密码,如果输入错误,一直循环请用户继续输入;直到输入正确的密码,就结束循环,设定这个密码为字符串:abc.
while True:
m=input('请您输入登录密码: ')
if m == 'abc':
break
print('登陆成功')
代码本质:
Q1:第1行代码,while True开启无限循环;
Q2:第2行代码,循环内部input获取用户数据;
Q4:使用if...break子句,如果变量m等于‘abc’,则break结束循环,否则开启无限为真的循环;
exit函数结束循环
while中不仅可以用break函数结束循环,也可用exit函数结束循环。
练习:
a=0
while True:
a=a+1
if a ==2:
exit()
print(a)
代码本质:a==2的时候,exit函数不止会让while函数结束,而且会让整个程序结束,也不会执行最后的print(a)的语句。
运行结果:什么都没有显示。
ctrl+C强制结束循环
练习:出现死循环的处理
while True:
print('我是一个死循环!')
运行结果:代码说明:
Python界面会一直不停的打印“我是一个死循环”,根本停不下来!
解决办法:在终端使用【ctrl+C】来强制结束程序的无限运行。
KeyboardInterrupt
3、continue子句
(1)while循环内部使用的continue子句
continue子句:继续循环的意思。
注意:continue需要缩进8个空格,因if子句之下的代码需缩进4个空格,此时if子句在while子句下,需缩进4个空格,因此continue需缩进8个空格。
while...(条件):
...(干点什么)
...(干点什么)
if ...(条件):#如果if后面的条件为真,就执行continue的命令
continue#提早开始循环,回到while
...#如果上面if的条件为假,则执行该命令
continue子句本质:在while内部使用,当某个条件被满足的时候,最后一行的代码不会被执行,会回到while循环开始逻辑循环判断。
(2)continue子句经典案例
练习1:《天龙八部》中西夏公主招亲的条件:
第一问:在你一生之中,在什么地方是最逍遥快乐的?
第二问:你生平最爱之人,叫什么名字?
第三问:你最爱的这个人相貌如何?
只有连续答对这3个问题,才是公主的意中人;答错一道题,就从头开始换人答题,从而选出最合适的驸马人选。
背景:西夏公主要找的人是虚竹,本案例是针对公主和虚竹的曾经经历,而设置的:
第一问标准答案是:黑暗的冰窖
第二问标准答案是:梦姑
第三问标准答案是:不知道
while True:
q1=input('第一问:在你一生之中,在什么地方是最逍遥快乐的? ')
if q1 != '黑暗的冰窖':
continue
print('答对了,下面是第二问:')
q2 =input('你生平最爱之人,叫什么名字? ')
if q2 != '梦姑':
continue
print('答对了,下面是第三问:')
q3=input('你最爱的这个人相貌如何? ')
if q3 == '不知道':
break
print('都答对了,你是虚竹啊!')
代码本质:
Q1:当第一问的答案不是“黑暗的冰窖”时,则说明答错了,必须从while重新开始循环;
Q2:如果在第3行代码: if q1 != '黑暗的冰窖',判定为正确,则不会满足if后面的条件,从而执行代码: print('答对了,下面是第二问:')
Q3:最后一行,如果都回答正确,则结束循环,答错一题则重新返回while开始循环。
说明:本案例while True的条件已经决定了该循环是永远为真的无限循环,因此需要if函数来限制循环,break来结束循环。
运行结果:
练习2:博弈论中的《囚徒困境》:
警方逮捕了甲、乙两名偷窃嫌疑犯,但没有足够证据指控二人入罪,于是警方分开囚禁嫌疑犯,分别和二人见面,并向双方提供以下相同的选择:
若二人都互认罪,则二人各判10年。
若一人认罪,另一方保持沉默,认罪者将判1年,沉默者将判监20年。
若二人都保持沉默,则二人同样判监2年。
认罪:官方术语,叫做“背叛”;
沉默:官方术语,叫做“合作”。
问题解析:最优策略是甲乙两人都不认罪的时候,是一个合作共赢的状态,但是目前是甲乙二人分开关押,如果其中一人认罪,一人保持沉默,则是最不利的结果
Python的while循环:就是直到找出最优策略为止。
while True:
q1=input('请问甲,你认罪吗?请回答:认罪或者保持沉默 ')#询问甲方
q2=input('请问乙,你认罪吗?请回答:认罪或者保持沉默 ')#询问乙方
if q1 =='认罪' and q2 =='认罪':
print ('你们两人都得判10年,唉,好好准备后事吧!')
elif q1=='认罪' and q2=='沉默':
print ('甲判1年,乙判20年')
elif q1=='沉默' and q2=='认罪':
print('甲判20年,乙判1年')
else:
print ('你们两人都判2年,皆大欢喜!')
break
代码本质:
Q1: if q1 =='认罪' and q2 =='认罪':
print ('你们两人都得判10年,唉,好好准备后事吧!')
以上2行代码对应的是“都判定10年”的结果,甲乙两人都认罪的情况下;
Q2: elif q1=='认罪' and q2=='沉默':
print ('甲判1年,乙判20年')
以上2行代码对应的是“1年VS20年”的结果,如果甲认罪,则判定1年,乙方默认不认罪,则判定20年,此结果也不是最优决策,因此返回while循环;
Q3: elif q1=='沉默' and q2=='认罪':
print('甲判20年,乙判1年')
以上代码对应惩罚表格中高端“20年VS1年”的结果,如果甲沉默不认罪,则判定20年,乙方认罪,则判定1年,也不是最优决策,也会返回while循环;
Q4: else:
print ('你们两人都判2年,皆大欢喜!')
break
以上代码的结果是最优决策,甲乙双方都沉默不认罪,则break结果,不比再次循环。
(注:2018.11.24,Python编程,捡破烂儿的笨小孩学习小记,有用就给个小心心哟,后续持续更新ing)