前面我们学习了在Python中,利用if语句可以控制程序的执行过程。接下来,我们去学习一下while语句。
While语句能够让我们在条件为真的前提下重复执行某块语句。While语句是循环语句的一种。同样,while语句也可以拥有else子句作为可选选项。
我们先来编写一个案例,在pycharm的A Byte of Python项目里面,我们新建一个Python文件,命名为while。输入以下代码:
number = 23running = Truewhile running: guess = int(input('Enter an integer:')) if guess == number: print
('congratulations,you guessed it.') running = False # 主动改变running的值为False,可以结束while循环 elif guess
< number: print('No,it is a little higher than that.') else: print('No,it is a little lower than that')else: print('The while loop is over.')
# 当循环结束的时候,我们将看到这段话 print('Done')接下来,我们运行这个程序,输入三次,第一次比23大,第二次比23小,第三次等于23,我们看到运行结果如下:
Enter an integer:58
No,it is a little lower than that
Enter an integer:22
No,it is a little higher than that.
Enter an integer:23
congratulations,you guessed it.
The while loop is over.
Done
那么,在这个程序中,它是如何工作的呢?
我们依旧通过猜数的大小来演示。我们还记得在if语句的学习的时候,无论猜对还是猜错,我们都只能猜测一次,如果猜了还想猜就得重新允许程序。但是在这个新程序中,我们可以允许用户持续猜测直至他猜中为止。这就是while语句的作用。
我们将input与if语句移到while循环之中,并在while循环开始前将变量running设置为True。程序开始时,我们首先检查变量running是否为True,之后再执行相应的while块。在这一代码块被执行之后,将会重新检测变量running的值。如果它依旧为True,我们将再次执行while块。这样重复运行检测,直至检测到running的值为False,我们才会去执行else块,然后进入到下一个语句中。
Else代码块在while循环的条件变为False时开始执行——这个开始的时机甚至可能是在第一次检测条件的时候。如果while循环中存在一个else代码块,它将总是被执行,除非你通过break语句来中断这一循环。
在这个程序中,下面这一块属于while块:
下面这一块属于else块:
首先,我们定义了一个变量number,并赋值为23 。然后定义了一个值为True的running变量。接下来,进入while循环。
由于running最开始为True,所以先执行while块。在while块中,我们先使用input函数输入一个数值,并利用int函数将它转换为数字后存储到变量guess中。然后我们进行判断:
当guess值等于number时,执行print语句,输出congratulations,you guessed it。并将running的值设置为False。
否则(即guess值不等于number),当guess值小于number时,执行print语句,输出No,it is a little higher than that。
否则(guess值不等于number,且不小于number),说明guess值大于number,则执行print语句,输出No,it is a little lower than that。
当这一个while块执行完成以后,回到while语句开始的地方,再去检测running的值是否为True。如果为True,即表明未曾猜对,继续执行while块。如果为False,则说明猜对了,于是执行else块。然后结束循环,进入下一个语句。这里我们使用print(Done)来表示已经进入了下一个语句。然后结束程序。
这个程序里面,True和False被称作布尔(Boolean)型,我们可以将它们分别等价地视为1与0.
多数时候,我们使用while语句去控制程序的时候,我们都没有使用else块。因为当循环结束的时候,我们直接就进入下一个语句了。