目录
本篇着重介绍while循环的基本使用方法。在此之前,我们先介绍一个与while循环关系密切的函数:input()。
一、input()的工作原理
使用input()函数,可以让程序暂停运行,等待用户输入一些文本内容。获取到用户输入信息后,程序继续运行,针对输入的文本进行一些操作,或者输出一些信息。
input()函数接受一个参数,旨在输出一段提示信息或者说明,让用户知道应该输入什么内容。
举个例子:下图中,我们定义了一个名为message的input()函数,函数的参数告诉用户随意输入点什么内容,然后将其输出,运行这段代码,我们看到控制台中输出了input()函数的参数,但程序并没有运行结束,而是处于一个暂停等待的状态:程序在等待用户输入。
接上文,我们在控制台中冒号后面输入“Hello World!”并回车:
可以看到控制台将用户输入的内容打印了出来,并结束运行。这个打印的过程执行的就是print(message)这一行代码,也就是说第一行里定义的message,其值就是用户输入的信息。
编写input()函数,应该注意:给用户的提示信息应当清晰易懂,准确告知用户该输入什么内容。如图所示:
这段程序用了2次input()函数,所以程序会暂停两次。第一次等待用户输入姓名,输入完毕回车后,程序继续运行,输出了来者姓名(朱时茂)和陈佩斯对其说的话,然后程序第二次暂停,再次等待用户(朱时茂)输入 ,待朱时茂输入完毕回车,程序继续运行输出了朱时茂打断陈佩斯时说的话。(just a joke😜)
还要注意:使用input()函数时,用户输入的任何内容,都将被Python解读为字符串。如果某些场景用户输入了数字,而我们试图将输入作为数值来使用,就会引发错误。如图所示:
错误信息明确告知:不支持在str类型和int类型的变量之间进行比较。这说明用户输入的18被程序捕获后是字符型的。
为了解决类型不匹配的问题,可以使用int()函数,将输入转为数值,再进行比较,就OK了。如图
二、while循环
Python的while循环和java里的用法基本一样,不断运行直到指定的条件不满足为止。
看例子:
下面,举个while循环与input()函数结合的例子,写一个与用户互动的程序,如果用户想终止互动,可以输入特定字符来触发终止条件。值得注意的是,这个条件message是通过用户输入来获取的。而初次执行while循环时,我们还没有拿到用户输入信息,这会导致while无法执行。因此,需要给变量message设置一个初始值,让Python首次执行while循环时能够继续下去。
美中不足的是,用户输入quit之后,程序仍然会重复一下这条输入,然后才终止。可以使用if条件来改善一下,如果用户输入quit则不再打印。具体的代码就不再贴了。
循环标志
前面的例子,我们让程序在满足某个条件时执行一些特定动作。如果碰到复杂场景,有很多条件可能导致程序终止,这时怎么办呢?比如我们玩游戏,生命耗尽、时间耗尽、据点被攻破 等等,都会被系统判定失败。如果在一个while语句里检查所有条件,程序可能会很复杂又难以编写。
这种情况下,可以定义一个布尔变量,用于判断整个程序是否处于活动状态。这个变量我们称之为标志(flag)。在任何一种会导致程序终止的场景,将标志置为False,这时,while循环只需检查标志的值即可。
下面举个简单的例子来说明 一下标志的用法:
continue & break
Python中的continue和break,与Java用法相同。continue表示跳过本次循环,执行下一次;break表示终止循环,不再执行。这里格外提一下,continue与break在Python的for循环中也可以同样使用。
比如,我们利用while循环来判断奇偶数,并利用continue达到只输出奇数的目的:
比如,我们利用break直接终止互动,而不必像之前的例子那样,等待用户输入终止命令(quit):
这里需要注意: 每个while循环都必须有停止运行的途径,否则会产生无限循环。代码很少的情况下一般不会出现这个错误,但代码量很大、业务复杂的时候是有可能出现这个问题的。所以一定要经过测试。
三、利用while循环处理列表和字典
修改列表
我们知道,在for循环中不应该做列表修改,那样会导致Python难以跟踪列表元素。前边我们介绍过通过创建切片的方式修改列表,这里则继续介绍while循环方式修改列表。
还可以通过while循环删除列表中的所有指定值。还记得之前介绍的remove()函数吗?(传送门)remove()函数要删除的值只能在列表中出现一次,多了就不行了。while循环解决了这个问题。如下图所示,所有名为cat的宠物都被删除了:
通过用户输入与while循环来扩充字典
假设有一场面试,面试官在登记来访人员信息之后,再询问后面是否还有其他面试者,如果有就换下一位继续面试,如果没有则终止面试:
好了,关于while循环到此结束。