美文网首页工具癖每天写1000字EXCEL
Python小课笔记--Python控制流:while循环

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

作者: 仟樱雪 | 来源:发表于2018-11-25 01:22 被阅读12次
    截图来自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)

    相关文章

      网友评论

        本文标题:Python小课笔记--Python控制流:while循环

        本文链接:https://www.haomeiwen.com/subject/cfsqqqtx.html