1. 概述

我们继续来看循环语句,主要介绍break、contine和Python的do…while语句。计算机编程的原理简要介绍

集成开发环境PyCharm

变量名、数字、字符串、列表

句式、注释

输入和输出

条件判断语句

循环语句

各类数据结构

函数

模块和引入

2. 用break语句终止循环

有时候我们循环着循环着,可能会从某个点开始,就不需要继续下去了,比如我们需要用户定义一个字符串,用“缩写:解释”的格式:

sentence = 'DRAM: Dynamic Random Access Memory'

我们如果使用循环语句来解析用户的输入,比如一行一行,每行一个字母地输出用户输入的缩写,也就是冒号之前的那些内容,

for letter in sentence:
print(letter)

我们会一下子把缩写带着冒号和解释一下子全输出。大家可以自行在PyCharm里面运行,太长了我就不粘贴上来了。如果我们可以在循环里加上条件判断语句,也就是每次循环的时候判断一下,如果该字符是冒号了,我们就结束循环:

for letter in sentence:
if letter == ':':
break
print(letter)
print('END')

最后我们就只输出四行,分别是D、R、A、M各一行,加上最后的END。我们可以看到,如果letter不是冒号的话,我们就继续下去,也就是输出letter所代表的字符,如果letter是冒号的话,直接用break终止循环,break往下在该循环中的、所有的代码全部被打断,直接运行整个for循环之后不在循环内的代码,也就是END那一行。

for letter in sentence:
print(letter)
if letter == ':':
break
print('END')

如果我们交换输出letter和break的if判断,按照代码从上到下运行的逻辑,我们会先输出letter,再判断是不是要终止循环,当letter代表的字符是冒号时,我们先输出冒号,再判断要不要break,由于if条件判断为True,我们终止循环不再走sentence这个字符串了,直接跳出整个循环运行最后的代码,输出END。最后的结果比之前多一个冒号,输出五行,D、R、A、M、:,加上最后的END。

3. 用continue语句跳出本次循环

break是用于满足某条件后,终止循环、跳出整个循环、不再运行该循环,而同样是跳出循环的continue则显得温柔多了,当满足某一条件后使用continue可以忽略循环中接下来的代码、跳出该次循环,回到所属的for或者while那一行继续下一次循环。

这么说有点玄乎,看一个例子:

for num in range(1, 11):
if num % 2 == 0:
break
print(num)

从1开始不停加1直到10并输出,如果是偶数的话,直接终止循环,用break的话,整个程序最后就输出一个数字1。

for num in range(1, 11):
if num % 2 == 0:
continue
print(num)

最后输出的结果是1、3、5、7、9,可以看到如果数字是偶数的话,我就忽略continue下面循环中的所有代码,到接下来一次循环中,总体上来说并不终止循环而是“选择性执行”。

当num为1的时候,if判断为False,不执行continue,输出1;num接下来是2,if判断为True,执行continue忽略下面的代码,回到for这一行;num接下来是3……以此类推,直到for把整个range的数列都走完才完事。

4. 实现do...while语句

在其他的很多语言中,我们不仅有while还有do…while,比如C:

#include 
int main () {
// do...while example int a = 10;
do {
printf("input the new value of a: ");
scanf("%d", &a);
}while(a < 10);
// while example int b = 10;
while(b < 10) {
printf("input the new value of b: ");
scanf("%d", &b);
}
return 0;
}

简要来说,就是我们现在有俩值a和b,默认为10,要求用户赋予其新值,如果赋值小于10,则循环、要求用户继续赋值,如果大于等于10就结束循环。这里的printf相当于Python的print,而scanf相当于input,扫描用户输入的数赋值给&后面的变量。

由于默认值就为10,处理b的while循环就一次也运行不起来,而do…while就至少能运行。也就是说do…while的特征是至少运行一次,在最后判断条件,如果满足则继续进行循环,直到最后的条件判断为误则结束。

但在Python中并没有do…while,我们怎么来实现它呢?我们在上面介绍了break,我们可以将其和while进行有机结合来进行使用,我们现在来试着把C中的do…while部分转换为Python。

# Default value to 10
a = 10

由于至少要进行一次,我们就直接大胆一点,先弄个无限循环:

while True:
a = int(input('input the new value of a: '))

这里while后面可以不跟条件直接跟True或者False,因为原本跟在后面的条件判断最后计算出的值也是True或者False。现在这个程序会不停地问你给a一个新值,给完再问,问完还问,因为是无限循环,这个程序会比自家小孩还烦。

但是这程序确保了至少问一次的原则,那么接下来我们就加上break语句,如果输入的a<10就继续循环,那么如果a>=10,循环就结束:

# Default value to 10
a = 10
# DIY a do...while loop
while True:
a = int(input('input the new value of a: '))
if a >= 10:
break

这样就实现了do...while,是不是很暴力?如果我们输入小于10的整数,循环继续,继续提问,如果输入了10或者10以上的整数,循环就结束。可以说Python里面的while+break可以整出一个do...while。

接下来我会介绍循环的嵌套、else语句、走场用pass语句,之后就介绍剩下的几个数据结构类型:元组、集合和字典。