《手把手陪您学Python》16——循环语句while

在上一篇《手把手陪您学Python》15——判断语句if中,我们学习了if语句的各种结构和知识点。同时,运用if语句和之前学习的知识,编写了我们真正意义上的第一个Python程序——“石头剪刀布”游戏。但在这个游戏中,还有不少需要改进的地方。今天,我们就在介绍循环语句while后,继续完善这个游戏。

while语句的结构与if...else...非常类似,只不过是将关键词if改成了while。最显著的差别是在if语句中,当判断条件为真时,执行语句1只会运行一次。而在while语句中,当判断条件为真时,执行语句1会循环运行,直到判断条件为假时才会停止,并执行语句2。其语句结构如下所示:

while 判断条件:
    执行语句1
else:
    执行语句2

翻译成自然语言,可以表达为:

如果判断条件为真,就执行语句1,之后再对判断条件进行判断,如果判断条件为真,再次执行语句1,如此循环,直到判断条件为假,执行语句2。

使用流程图来表示,与if语句的流程图的区别是增加了一条从执行语句1指向判断条件的箭头。同时,只有当判断条件为假的时候,才执行语句2,整个while语句也才会结束,否则将循环进行条件判断和执行语句1。

从上面的介绍大家可以看出来,while虽然是一个循环语句,但也是根据判断条件执行指令的,因此它与if语句有很多相似之处。

在判断条件方面,while语句与if语句完全相同,都是以输出布尔值结果的运算为主,最常用的也是比较运算。

在格式要求方面,while语句也与if语句一样,都是在关键词(while、else)所在的语句行末尾有一个“:”,“:”之后的执行语句要缩进,代表下一层级的语句。

以一个简单的实例,看一下while语句的运行规则:

In [1]: a = 1
        while a <= 5:
            print("a={},满足a <= 5的判断条件,继续循环运行。".format(a))
            a += 1   # 赋值运算
        else:
            print("a={},不满足a <= 5的判断条件,循环终止。".format(a))
Out[1]: a=1,满足a <= 5的判断条件,继续循环运行。
        a=2,满足a <= 5的判断条件,继续循环运行。
        a=3,满足a <= 5的判断条件,继续循环运行。
        a=4,满足a <= 5的判断条件,继续循环运行。
        a=5,满足a <= 5的判断条件,继续循环运行。
        a=6,不满足a <= 5的判断条件,循环终止。

关于while语句,还有如下几个知识点需要介绍:

1、常用结构

虽然上面给大家展示的是while...else...结构,但最常用的while结构是将else部分省略,只保留while部分。此时的语句结构就变成了:

while 判断条件:
    执行语句

只要判断条件为真,就循环执行语句,直到判断条件为假,终止循环并结束。

while语句的这种常用结构,起到的主要作用就是循环执行某一程序。讲到这,大家是不是就想到了我们上一篇中编写的游戏程序,如果要让游戏循环运行,只要使用这个while语句就可以了。

由于在判断条件为真时,程序会循环运行无法终止,因此我们在使用while语句时,都会设计一个“计数”变量。通过总数以及每次循环后对变量的重新赋值,实现对运行总次数的控制,避免程序出现无限循环的情况。

In [2]: a = 5   # 运行的总次数
        while a >= 1:
            print("Hello World!")
            a -= 1   # 改变判断条件中变量的值,避免无限循环
Out[2]: Hello World!
        Hello World!
        Hello World!
        Hello World!
        Hello World!

2、无限循环

无限循环也叫死循环,是在程序编写的过程中,有意或者无意地将判断条件设置成永远为真的情况下产生的。

比如在上面的示例中,如果判断条件被误写成了a <= 5,程序就会无止境地运行下去了(因为a永远小于等于5)。终止无限循环的方法是点击运行程序中的“■”(Jupyter Notebook在菜单栏上,PyCharm在控制台上)。

In [3]: a = 5
        while a <= 5:
            print("Hello World!")
            a -= 1
Out[3]: Hello World!
        Hello World!
        Hello World!
        Hello World!
        Hello World!
        ...

当然,无限循环也并非一无是处,比如在一些服务器程序中,就要将程序设计成无限循环供用户持续使用。除非程序出现错误或者更新,否则是不需要终止的。

要想实现无限循环非常简单,对于上面的例子,也不需要设置“计数”变量了,只要将判断条件写成1 == 1就行了,大家可以试一下。

3、语句嵌套

对于while语句的嵌套来说,也不需要把它看得多么复杂,只要把嵌套的while语句当做一段执行语句本身就可以了。

但即使如此,也不建议大家对while语句进行嵌套。因为单单一层的while语句就很容易形成无限循环了,如果嵌套多个while语句,特别是在变量非常复杂的情况下,就更容易形成无限循环,而且很难查找到原因。

所以,只要让while语句起到让程序按照某一条件重复运行的作用就可以了。

以上就是对while语句的介绍,下面就用我们今天学到的知识,把“石头剪刀布”的程序完善一下。

大家可以通过右键之前保存的文件,点击Copy再点击Paste,实现文件的快速复制,并通过弹出的重命名窗口,给我们的新版游戏程序重命名。

 

在2.0版本中,我们将增加游戏的循环功能,使游戏能够按照指定的次数连续运行。

In [4]: import random   # 因为要使用随机函数,需要先导入随机函数库
 
        # 设置游戏的总次数,也可以使用input()函数通过输入的方法实现
        times = 5
        
        # 只使用while可以重复运行程序的功能
        while times >= 1:
        
            # 总次数、判断条件和重新赋值的公式,共同实现了对游戏总次数的控制,缺一不可
            times -= 1
            
            # 交互式输入过程,使用input()函数
            user = input("请输入您要出的拳(石头、剪刀、布):")
            
            # 使用choice()函数,实现在序列中随机选取一个元素,做为电脑出的拳
            computer = random.choice(['石头', '剪刀', '布'])
            
            # 以下是程序处理过程,直接按照游戏规则进行判断,根据判断结果进行输出
            
            # 把所有游戏者赢的情况列举出来,任何一种情况出现,就输出游戏者胜利
            if (user == '石头' and computer == '剪刀') or (user == '剪刀' and computer == '布')\
                    or (user == '布' and computer == '石头'):
                print("您出的是:{},电脑出的是:{}。恭喜,您赢了!".format(user, computer))
                
            # 打平的情况最容易描述,所以作为一个判断条件
            elif user == computer:
                print("您出的是:{},电脑出的是:{}。打平了!".format(user, computer))
                
            # 其它情况就是游戏者输的情况,因为描述比较复杂,放在其它情况里,就不用写很复杂的判断条件了
            else:
                print("您出的是:{},电脑出的是:{}。很遗憾,您输了!".format(user, computer))
                
        # 游戏结束的提示
        print("游戏结束,如果还想继续,请重新运行程序。")
        
Out[4]: 请输入您要出的拳(石头、剪刀、布):石头
        您出的是:石头,电脑出的是:布。很遗憾,您输了!
        
Out[5]: 请输入您要出的拳(石头、剪刀、布):剪刀
        您出的是:剪刀,电脑出的是:剪刀。打平了!
        
Out[6]: 请输入您要出的拳(石头、剪刀、布):布
        您出的是:布,电脑出的是:石头。恭喜,您赢了!
        
Out[7]: 请输入您要出的拳(石头、剪刀、布):石头
        您出的是:石头,电脑出的是:石头。打平了!
        
Out[8]: 请输入您要出的拳(石头、剪刀、布):剪刀
        您出的是:剪刀,电脑出的是:剪刀。打平了!
        游戏结束,如果还想继续,请重新运行程序。

最后,再把PyCharm的截屏展示给大家,因为以后的程序会越来越长,可能就不每次都截屏展示了。大家可以看程序的代码,或者关注公众号回复关键词,免费下载文章中的相关文件和代码。

 

以上就是有关while语句的介绍了,虽然while帮我们实现了游戏的循环运行,但在日常编程中,还是不太推荐使用,一是稍不小心就会出现无限循环,二是while语句的大部分功能,使用我们后面要介绍的另外一个循环语句for也能够实现。

在下一篇中,我们将会学习一种非常重要的循环语句控制方法——循环的终止。应用该方法,可以使循环语句实现更加强大的功能,敬请关注。

 

 


感谢阅读本文!如有任何问题,欢迎留言,一起交流讨论^_^

欢迎扫描下方二维码,关注“亦说Python”公众号,阅读《手把手陪您学Python》系列文章的其他篇目,或点击下方链接直达。

《手把手陪您学Python》1——为什么要学Python?

《手把手陪您学Python》2——Python的安装

《手把手陪您学Python》3——PyCharm的安装和配置

《手把手陪您学Python》4——Hello World!

《手把手陪您学Python》5——Jupyter Notebook

《手把手陪您学Python》6——字符串的标识

《手把手陪您学Python》7——字符串的索引

《手把手陪您学Python》8——字符串的切片

《手把手陪您学Python》9——字符串的运算

《手把手陪您学Python》10——字符串的函数

《手把手陪您学Python》11——字符串的格式化输出

《手把手陪您学Python》12——数字

《手把手陪您学Python》13——运算

《手把手陪您学Python》14——交互式输入

《手把手陪您学Python》15——判断语句if

For Fans:关注“亦说Python”公众号,回复“手16”,即可免费下载本篇文章所用示例语句。

亦说Python——Python爱好者的学习分享园地

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值