在for和while循环语句中,当循环条件满足时,就会一直循环,如果想中途退出循环,该怎么办?如果想停止本次循环,而不终止整个循环,该怎么办?如果我想写个不执行任何操作的语句,该怎么写?
1、退出循环的break语句
上面的问题,我们一个个来解答。先说第一个问题,在循环语句中,如果想中途退出循环该怎么办?
Python语言提供了break语句可以跳出当前循环,直接执行后面的语句。使用break语句时,一般会设置触发条件,当设置的条件满足时,执行break语句退出循环。
例1:试求给定某一数值的最大公约数。
用程序求一个数的最大公约数,可以使用循环语句从大到小迭代所有可能的约数,第一个能整除该数的约数就是这个数的最大公约数。程序流程图如下:
图1 求最大公约数流程图
程序一开始要求用户输入num,然后把num除以2的结果赋值给count变量(一个数的最大公约数一定小于该数的一半),作为num的初始约数。再用count作为循环变量,迭代所有可能的约数,在约数的迭代过程中,用num与count做取余操作,如果操作结果为0,则说明count是num的公约数,且是最大公约数,后面用break语句就可以直接退出循环了。下面给出例1的程序代码。
上边的代码用于求给定num的最大公约数,使用循环迭代所有可能的约数,循环变量count依次递减,第一个能整除num的count就是要找的最大公约数,找到后就不用再找了,使用break语句退出循环。
2、不执行本次循环的continue语句
再来回答第二个问题,如果想停止本次循环,而不终止整个循环,该怎么办?
Python语言提供了continue语句用于结束本次循环,并开始下一轮循环。continue语句只能用在循环里,当循环执行到continue语句时,程序会终止本次循环,并忽略剩余的语句,开始新一轮循环。使用continue语句时,要注意和break语句的差别,break语句导致循环终止,使程序控制流转向这个循环语句之后;而continue引起的则是循环内部的一次控制转移,使执行控制跳到循环体的最后,相当于跳过循环体里这个语句后面的那些语句,继续下一次循环,下图说明了break语句和continue语句引起的控制转移的情况。
图2 break语句和continue语句的区别
例2:试求100以内个位数不为3的整数累加值。
用程序求100以内个位数不为3的整数累加值,可以使用循环语句从1到100累计求和,在循环求和过程中加一个判断,如果该数个位是3就跳过不加。判断100以内整数的个位数是否为3,可以使用取余运算符,将一个正整数,除以10以后余数是3,就说明这个数的个位为3。程序流程图如下:
图 3 求100以内个数不为3的整数累加值
程序一开始先初始化变量i和sum,i为循环变量并初始化为0,sum为存储和的变量并初始化为0。然后使用循环语句依次求循环变量i的累加和,循环条件为i的值小于100。在循环语句中,如果i与10的取余结果等于3,说明i的个位数为3,执行continue语句跳过循环体求和的语句,开始下一轮循环。下面给出例1的程序代码。
上边的代码分别将变量i和sum赋值为0,然后使用while循环语句。循环条件是i小于100,在循环体中判断i与10的取余结果,如果取余结果等于3,说明i的个位数为3,在这种情况下,先执行i加1操作(修改循环变量),然后执行continue语句,跳过循环体剩余的语句,进入下一轮循环。循环体的if语句后面有两条语句,分别是sum与i相加的和赋值给sum,i做加1操作。循环结束后,使用print函数输出sum变量的值。
3、不执行任何操作的空语句
再来回答第三个问题,如果我想写不执行任何操作的空语句,该怎么写?
在回答问题之前,先来讨论一下另一个问题,不执行任何操作的空语句在编程中有意义吗?我们在编程程序的过程中,可能需要先把代码的结构确定下来,确定好循环语句、条件语句等代码块,然后再逐步把代码补充到代码块中,例如下面的代码块:
在处理Python字符串中,我们可能对会对字母h非常感兴趣,希望在处理到字母h时做些事情,但还没有想到怎么处理,暂时无法写处理代码,但在需要写语句的地方不写任何语句,解释器就会提示语法错误,因此需要一个不执行任何操作的语句来占位。
在这样的情况下,可以使用Python语言提供的pass语句,它不做任何事情,只是起到一个占位的作用,以后可以将代码补充上。
pass语句在开发程序非常有用,因为在编写代码的过程中,往往需要先把程序结构确定下来,然后再补充细节,完善代码。这时在空语句的地方用pass占位就是一个非常好的做法。