Python小课笔记--Python控制流:while循环

截图来自Python小课
文|仟樱雪
在Python小课-1--5节中,已经学习了:
基础模块--数据--数据类型(整数、字符串,浮点数,布尔值,空值),
基础模块--变量,
基础模块--函数(input函数、print函数,len函数,type函数,转换函数)。
基础模块--控制流(条件判断)
本节将继续学习本节继续学习:基础篇--控制流--while循环
截图来自python小课

一.基础知识:控制流中的“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后的条件判断为假,循环程序结束,从而运行打印程序,打印出“小龙女可以离开古墓,下山看凡尘啦!”。
运行结果:

本地Python环境运行

练习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来结束循环。
运行结果:

本地Python环境运行

练习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环境运行

代码说明:
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来结束循环。

运行结果:

截图来自Python小课

练习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)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • Swift 提供了类似 C 语言的流程控制结构,包括可以多次执行任务的for和while循环,基于特定条件选择执行...
    穷人家的孩纸阅读 690评论 1 1
  • [The Swift Programming Language 中文版]本页包含内容: Swift提供了多种流程控...
    风林山火阅读 555评论 0 0
  • 2018年08月15日星期三晴 分享 当你说”我没时间”次数越多时,其实就是在表达,我”丢掉自己”的比例越来越...
    扬帆起航__爱之语阅读 173评论 0 0
  • 正所谓玩物丧志吧,真真如此,昨天晚上一下子没忍住,又看了海婆婆,结果麻烦了,从下午开始看的直播吧,到晚上十二点多了...
    笑笑狗尾草阅读 224评论 0 0
  • 截止2017年12月17日下午4点,币安的BNB价格为38.155元,相对于众筹价格,已经上涨了38倍。 也许你想...
    刘胜新阅读 11,417评论 8 9