
2.4 程序控制结构
2.4.1 顺序控制语句
顺序控制是指计算机在执行这种结构的程序时,从第一条语句开始,按从上到下的顺序依次执行程序中的每一条语句。
1.输出语句
在Python中使用print()函数输出数据。
(1)直接输出
字符串、数值、列表、元组、字典等类型都可以用print()函数直接输出。
例如:

(2)格式化输出
print()函数可以使用%格式化输出数据。常用的格式化输出符号如表2.2所示。
表2.2 常用的格式化输出符号

【例2-1】格式化输出及控制换行输出示例。
程序代码如下:

将程序保存为ex2_1.py。运行程序:
python ex2_1.py
程序运行结果如下:
15 3 12.8 中国 厦门 拉萨 3.1416 1 2 3 0 1 2 3 4 5
2.输入语句
在Python中,使用input()函数输入数据。input()函数只能输入字符数据。当需要输入数值型数据时,可以使用eval()函数将字符转换为数值。
【例2-2】从键盘上输入两个数,并计算两数之和。
程序代码如下:

将程序保存为ex2_2.py。运行程序:
python ex2_2.py
程序运行结果如下:

【例2-3】交换两个变量的值。
在编写程序时,有时需要把两个变量的值互换,Python在交换值的运算时不需要用中间变量。
程序代码如下:

将程序保存为ex2_3.py。运行程序:
python ex2_3.py
程序运行结果如下:
a,b = 3 5 a,b = 5 3
2.4.2 if选择语句
1.单分支选择结构
if语句用于实现选择结构。它判断给定的条件是否满足,并根据判断结果决定执行某个分支的程序段。对于单分支选择语句,其的语法格式为:

这个语法的意思是,当条件表达式给定的条件成立时(true),就执行其中的语句块;若条件不成立(false),则跳掉这部分语句,直接执行后续语句,其流程如图2.1所示。
【例2-4】从键盘任意输入两个整数,按从小到大的顺序依次输出这两个数。
从键盘上输入的两个数a、b,如果a<b,本身就是从小到大排列的,可以直接输出。但如果a > b,则需要交换两个变量的值,其算法流程如图2.2所示。

图2.1 单分支的if条件语句

图2.2 按从小到大排列的顺序输出两数
程序代码如下:

将程序保存为ex2_4.py。
程序运行结果如下:

【例2-5】对给定的三个数,求最大数的平方。
设一变量max存放最大数,首先将第一个数a放入变量max中,再将max与其他数逐一比较,较大数则存放到max中;当所有数都比较结束之后,max中存放的一定最大数,其算法流程如图2.3所示。

图2.3 求三个数中最大数的平方
程序代码如下:

将程序保存为ex2_5.py。
程序运行结果如下:
最大数的平方为:81
2.双分支选择结构
有时,需要在条件表达式不成立时执行不同的语句,可以使用另一种双分支选择结构的条件语句,即if-else语句。双分支选择结构的语法格式为:

这个语法的意思是,当条件式成立时(true),执行语句块1;否则(else),就执行语句块2。对于双分支选择类型的条件语句,其流程如图2.4所示。

图2.4 双分支选择结构的条件语句
if-else语句的扩充格式是if…else if。一个if语句可以有任意个if…else if部分,但只能有一个else。
【例2-6】计算
程序代码如下:

将程序保存为ex2_6.py。
运行程序:
python ex2_6.py
程序运行结果如下:

3.多分支选择结构
当处理多种条件问题时,就要使用多分支结构,其语法格式为:

【例2-7】将百分制转换为五级记分制。
程序代码如下:

将程序保存为ex2_7.py。
运行程序:
python ex2_7.py
程序运行结果如下:
请输入百分制成绩:83 83对应的5分制为:4
2.4.3 循环语句
在程序设计过程中,经常需要将一些功能按一定的要求重复执行多次,多次重复执行的这一过程称为循环。
循环结构是程序设计中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。
Python中的循环语句包括for语句和while语句。
1.for循环语句
for循环语句一般形式的语法结构如下:

for语句的执行过程是这样的:首先执行循环变量赋初值,完成必要的初始化工作;再判断循环变量是否小于终值,若循环条件能满足,则进入循环体中执行循环体的语句;执行完循环体之后,循环变量增加一个步长值,以改变循环条件,这一轮循环就结束了。第二轮循环又从判断增加步长值后的循环变量是否小于终值开始,若循环条件仍能满足,则继续循环;否则跳出整个for语句,执行后续语句。for循环语句的执行过程如图2.5所示。

图2.5 for循环语句的执行过程
当循环变量的步长值为1时,可以省略,即可写成:

【例2-8】求从1加到9的和。
程序代码如下:

将程序保存为ex2_8.py。
运行程序:
python ex2_8.py
程序运行结果如下:

在for循环中,循环变量的值在循环体内发生改变,并不会影响循环次数。
【例2-9】在循环体内改变循环变量的值,观察循环次数。
程序代码如下:

将程序保存为ex2_9.py。
运行程序:
python ex2_9.py
程序运行结果如下:

但是,如果把程序改写成:

则程序运行结果如下:

在for循环中,可以使用continue语句结束本次循环,也可以使用break语句跳出循环体,从而结束整个循环。
【例2-10】计算10以内的偶数和。
程序代码如下:

在本例中,“i%2 == 1”表示循环变量i为奇数。当i取奇数时,结束本次循环,继续取下一个数来判断;若i为偶数,则计算求和。
将程序保存为ex2_10.py。
运行程序:
python ex2_10.py
程序运行结果如下:

【例2-11】设有列表s = ['Pytho', 'java', 'C++/C', 'PHP', 'JavaScript'],应用循环遍历列表所有元素,并在屏幕上显示。
程序代码如下:

将程序保存为ex2_11.py。
运行程序:
python ex2_11.py
程序运行结果如下:

2.while语句
while循环语句一般形式的语法结构如下:

while语句的执行过程是这样的:首先判断循环条件是否为true,若循环条件为true,则执行循环体中的语句;若为false,则终止循环。while循环的流程图如图2.6所示。

图2.6 while循环结构的流程图
【例2-12】求10!。
计算n!,由于pn=n! = n * (n – 1) * (n – 2 ) * … * 2 * 1 = n * (n – 1)! ,因此可以得到递推公式:

可以用一个变量p来存放推算的值,当循环变量n从1递增到10时,用循环执行p=p*n,每一次p的新值都是原p值的n倍,最后递推求到10!。
程序代码如下:

将程序保存为ex2_12.py。
运行程序:
python ex2_12.py
程序运行结果如下:

3.循环嵌套
循环可以嵌套,在一个循环体内包含另一个完整的循环,叫作循环嵌套。循环嵌套运行时,外循环每执行一次,内层循环要执行一个周期。
【例2-13】应用循环嵌套,编写乘法九九表程序。
算法分析:用双重循环控制输出,用外循环变量i控制行数,i为1~9。内循环变量j控制列数,由于i * j = j * i,故内循环变量j为1~i。外循环变量i每执行一次,内循环变量j执行i次。
程序代码如下:

其中,print()中的end=" "表示不换行输出。
将程序保存为ex2_13.py。
运行程序:
python ex2_13.py
程序运行结果如下:

【例2-14】应用循环嵌套打印出由“*”组成的直角三角形图形,如图2.7所示。

图2.7 由“*”组成的直角三角形图形
程序代码如下:

将程序保存为ex2_14.py。
运行程序:
python ex2_14.py
程序运行结果如下:
