3.4 转移和中断语句

当循环条件一直满足时,程序将会一直执行下去。如果希望在中间离开循环,也就是for循环结束计数之前,或者while循环找到结束条件之前,有以下两种途径。

1)使用break语句完全中止循环。

2)使用continue语句直接跳到下一次循环。

3.4.1 break语句

break语句可以终止当前的循环,包括while和for在内的所有控制语句。以独自一人沿着操场跑步为例,原计划跑10圈,可是在跑到第3圈的时候,遇到情况要离场,于是果断停下来终止跑步,这就相当于使用了break语句提前终止了循环。

break语句的语法比较简单,只需要在相应的while或for语句中加入即可。break语句一般会结合if语句进行搭配使用,表示在某种条件下跳出循环。如果使用嵌套循环,break语句将跳出最内层的循环。

1.在while语句中使用break语句

一般语法的格式:

其中,条件表达式2用于判断何时调用break语句跳出循环。

【例3-21】 输出字母或数字的ASCII值。编写一个程序,用户输入字母和数字时,输出该字母或数字的ASCII值。当用户输入非数字或字母(如特殊符号“@”“*”等)时,退出程序(数字0…9的ASCII值为48…57,字母A…Z,a…z的ASCII值为65…90,97..122)。

分析:通过ord函数判断字符的ASCII码值,如果输入字母或数字,输出ASCII值。设置程序如果遇到7则退出。

2.在for语句中使用break语句

一般语法格式:

其中,条件表达式用于判断何时调用break语句跳出循环。

【例3-22】 输入一个整数,判断是否为素数。素数只能被1和自身整除的数字,例如:9,判断9能否被2~8之间的数字整除。如果能,说明不是素数;如果都不能,说明是素数。

3.半路循环

前面介绍过死循环的概念,在死循环程序中,通过添加break语句终止程序的执行,称为半路循环。

【例3-23】 通过输入一行字符,演示半路循环的使用。

运行结果:

3.4.2 continue语句

continue语句的作用没有break语句强大,它只能终止本次循环而提前进入到下一次循环中。仍然以独自一人沿着操场跑步为例,原计划跑步10圈。当跑到第2圈一半的时候停下来跑回起点等待,然后从第3圈开始继续。

continue语句一般会结合if语句进行搭配使用,表示在某种条件下,跳过当前循环的剩余语句,然后继续进行下一轮循环。如果使用嵌套循环,continue语句将只跳过最内层循环中的剩余语句。

1.在while语句中使用continue语句

一般语法格式:

其中,条件表达式2用于判断何时调用continue语句跳出循环,开始下一次循环。

【例3-24】 编写重复猜数游戏。要求:如果没有猜对,提示:大了或小了。如果猜对了,提示正确,并显示猜了多少次。

运行结果:

由于是随机产生的数,每次运行的判断是不同的。

2.在for语句中使用continue语句

一般语法格式:

其中,条件表达式用于判断何时调用continue语句跳出循环。

【例3-25】 编写程序,从键盘输入一段文字,如果其中包括“色”字(可能出现0次、1次或者多次),则输出时过滤掉该字,其他内容原样输出。

分析:从键盘输入的一段文字为字符串,可以使用for循环依次取出其中的每个字,然后通过if语句进行判断,如果有“色”字,则使用continue语句跳出本次循环(不输出该字),进入下一轮循环条件的判断。

运行结果:

【例3-26】 编写程序,从键盘输入密码,如果密码长度小于6,则要求重新输入;如果长度等于6,则判断密码是否正确,如果正确则中断循环,否则提示错误并要求继续输入。

分析:因为程序没有执行次数规定,所以循环条件设置为恒真,首先判断输入长度,如果输入长度过短,则直接使用continue语句中断本轮循环并进入下一轮输入;如果输入长度正确,则进行密码判断,如果正确,则使用break语句中断循环,否则提示错误并进入下一轮输入。

运行结果:

【例3-27】 逢七拍腿游戏。几个朋友一起玩“逢七拍腿”游戏,即从1开始依次数数,当数到7(包括尾数是7的情况)或7的倍数时,则不说出该数,而是拍一下腿。现在编写程序,计算从1数到99,一共要拍多少次腿(前提是每个人都没有出错的情况下)?

分析:通过在for循环语句中使用continue语句来实现计算拍腿次数。首先假设可拍腿次数为最高次数99,每触发满足的条件的时候就直接跳转到下一次循环当中,最后的total减1则不执行,不满足条件时total则减1。因此实际上total减去的是不满足条件的数字。

运行结果:

3.4.3 pass语句

在Python中还有一个pass语句,表示空语句。它不做任何事情,一般起到占位作用。

【例3-28】 在应用for循环输出10~20(不包括20)的偶数时,在不是偶数时,应用pass语句占个位置,方便以后对不是偶数的情况进行处理。

运行结果: