第四章:Python程序的结构控制

  • 总览
  • 4.1程序的三种控制结构
  • 4.1.1 程序控制结构基础
  • 4.2 程序的分支结构
  • 4.2.1 单分支结构 if
  • 4.2.2 二分支结构:if-else
  • 4.2.3 多分支结构:if-elif-else
  • 4.2.4判断条件及组合
  • 4.3 循环结构
  • 4.3.1 遍历循环for
  • 4.3.2 无限循环 while
  • 4.3.3 循环控制
  • 4.4 程序异常处理
  • 4.5 实例演练:猜数字游戏



总览

Python三种控制结构 python程序的三种控制结构_分支结构


4.1程序的三种控制结构

4.1.1 程序控制结构基础

程序有三种基本结构:顺序结构,分支结构,循环结构。

  • 顺序结构是程序按照现行顺序依次执行的一种运行结构。例如:语句块1=>语句块2=>……=>语句块n
  • 分支结构是程序按照判断条件选择不同执行路径的运行方式。最基础的是二分支结构,即判断条件产生“是”或“否”的结果,并根据这个结构选择不同路线,二分支结构组合形成多分支结构。
  • 循环结构是按照判断条件结果向后执行的一张方式。即根据结果确定是否将循环体中的语句再次执行的一种结果。

4.2 程序的分支结构

4.2.1 单分支结构 if

Python的单分支结构使用 if保留字对条件进行判断,使用方法如下:

if 判断条件:

语句块

其中,if和语句块前的缩进都是语法的一部分。
语句块是if满足条件以后执行的一个或多个语句序列,缩进表示语句块和if的包含关系。当判断条件产生True时,执行语句块;若结果是False,则跳过语句块。以下的例子进行演示:

# 判断用户输入的数字是奇数还是偶数,偶数就输出(这个数)是偶数,奇数不输出
s = eval(input('请输入一个整数:'))
if s%2 == 0:
	print('{}是偶数!'.format(s))
print('这个数是{}'.format(s))

if分支结构中的 条件 是一个或多个条件,多个条件之间用and或者or来进行逻辑组合。and表示多个条件“与”的关系;or表示多个条件“或”的关系。有以下例子演示:、

# 判断用户输入的数 既能被3整除,也能被5整除
s = eval(input('请输入一个整数:'))
if s%3 == 0 and s%5 == 0:
	print('{}能被3和5整除!'.format(s))
print('这个数是{}'.format(s))

4.2.2 二分支结构:if-else

Python的二分支结构使用if-else保留字对条件进行判断,语法格式如下

if 判断条件:

语句块1

else:

语句块2

其中if else和语句块前的缩进都是语法的一部分。
执行规则是:当判断条件为True时,执行语句块1跳过语句块2,当判断条件为False时,跳过语句块1执行语句块2。这里修改4.2.1中关于奇偶判断的代码,示例如下:

# 判断用户输入是奇数还是偶数,偶数就输出(这个数)是偶数,奇数就输出(这个数)是奇数
s = eval(input('请输入一个整数:'))
if s%2 == 0:
	print('{}是偶数'.format(s))
else:
	print('{}是奇数'.format(s))

二分结构还有一种更简单的表达方式,适合 语句块1和语句块2 都只包含简单表达式的情况,语法格式如下:
表达式1 if 判断条件 else 表达式2
这里修改4.2.1中“能否同时被3和5同时整除”的代码演示此二分结构写法

# 判断用户输入的数 既能被3整除,也能被5整除
s = eval(input('请输入一个整数:'))
t = ''if s%3 == 0 and s%5 == 0 else'不'
print('{}{}能被3和5整除!'.format(s,t))

【提示】表达式和语句
表达式是产生或计算新数据的代码片段,它并不完整。例如99+1是表达式,a=99+1则是语句。

4.2.3 多分支结构:if-elif-else

Python的二分支结构使用if-elif-else保留字对条件进行判断,语法格式如下

if 判断条件:

语句块1

elif 判断条件

语句块2

elif 判断条件
………………

else:

语句块n

多分支结构通常用于判断同一个条件或一类条件的多个执行路径。需要注意,Python会按照分支结构的代码顺序依次判断,任意一个判断条件成立则执行相应语句后跳出整个if-elif-else结构,若全部判断条件均不成立,则执行else中的语句。
所以使用多分支结构时需要注意多个逻辑条件的先后顺序
下面进行实例演示:

# 用户输入一个百分之成绩,转换成相应等级ABCDE
s = eval(input("请输入你的百分制成绩:"))
if s>60.0:
	g = 'D'
elif s>70.0:
	g = 'C'
elif s>80.0:
	g = 'B'
elif s>90.0:
	g = 'A'
else:
	g = 'E'
print('对应等级为:{}'.foemat(g))

4.2.4判断条件及组合

分支结构中判断条件可以是任何能产生True或False值的语句或者函数。形成判断条件最常见的方法是使用关系运算符。

操作符

操作符含义

<

小于

>

大于

<=

小于等于

>=

大于等于

==

等于

!=

不等于

Python中,任何非零数值、非空类型都等价于True,0或空类型等价于False。可以直接用来做为判断条件。
Python保留 not、and、or三个保留字对条件进行逻辑运算或组合

not 表示单个条件的“否”;and表示多个条件之间的“与”;or表示多个条件之间的“或”。多个条件之间可以用小蛞和进行组合实现关系运算。


4.3 循环结构

Python中有两种循环结构:遍历循环和无限循环。遍历循环使用保留字for依次提取遍历结构的各个元素进行处理;无限循环则是使用保留字while根据条件判断执行程序。

4.3.1 遍历循环for

for循环使用方法如下:

for 循环变量 in 遍历结构:

语句块

遍历循环可以认为是从遍历结构中逐一提取元素放在循环变量中,每提取一次元素则执行一次语句块。for循环的执行次数取决于遍历结构的元素个数。
遍历结构可以是 字符串、文件、range()函数或者组合数据类型等。示例如下;

for c in 'Python':
	print(c)
# 结果如下:
P
y
t
h
o
n

遍历结构还有一种扩展模式如下:

for c in 'PY':
	print(c)
else:
	print('遍历结束')

# 输出结果如下
P
Y
遍历结束

4.3.2 无限循环 while

while循环使用方法如下

while 判断条件:

语句块

当程序执行while语句是:若判断条件为True,则执行循环体中的语句;若判断条件为False。则结束循环,执行与while同级别缩进的后续语句。示例如下

n = 0
while n < 10:
	print(n)
	n += 3
# 输出如下
0
3
6
9

与遍历循环相似,无限循环也有一种使用else的扩展模式,使用扩展模式修改上述代码如下:

n = 0
while n < 10:
	print(n)
	n += 3
else:
	print('循环正常结束')
# 输出如下
0
3
6
9
循环正常结束
  • while扩展结构只有在循环正常结束的情况下才会执行else中的语句块。

4.3.3 循环控制

循环结构有两个辅助循环控制的保留字:break和continue

break:跳出当前循环结构体,执行循环结构体同级的之后的语句。
continue:跳出当前一次循环,不跳出循环结构体。

具体实例如下:

# break跳出循环结构体的使用
while True:
	s = input(请输入一个名字(输入Q退出):)
	if s == Q:
		break
	print('输入的名字是',s)
print('程序退出')
# 输出结果如下:
请输入一个名字(输入Q退出):汪苏泷
输入的名字是汪苏泷
请输入一个名字(输入Q退出):许嵩
输入的名字是许嵩
请输入一个名字(输入Q退出):徐良
输入的名字是徐良
请输入一个名字(输入Q退出):Q
程序退出
# continue跳出当前次循环的使用
for c in 'Python':
    if c == 't':
        print('\n')
        continue
    print(c,end='')
# 输出如下:
Py

hon

4.4 程序异常处理

Python程序一般对输入有一定要求,但当实际输入不满足程序需求的时候,可能出现程序的运行错误。如下:

>>> n = eval(input('请输入有一个整数: '))
请输入有一个整数: python
# 报错如下
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    n = eval(input('请输入有一个整数: '))
  File "<string>", line 1, in <module>
NameError: name 'python' is not defined

由于是用来eval()函数,如果用户输入的不是数字则可能报错。这类错误有很多种可能性,不可能一一列出。为了程序运行的时候的稳定性,这里引入程序异常处理机制(try-except),基本语法如下:

try:

语句块1

except:

语句块2

语句块1表示正常需要执行的语句,语句块2则是语句块1发生异常时执行的语句。实例如下

try:
	n = eval(input('请输入一个数字: '))
	print('输入的数字的3次方为:',n**3)
except:
	print('出错了,请重新输入!')
# 运行结果如下
>>>
请输入一个数字: 1010
输入的数字的3次方为: 1030301000
>>>
请输入一个数字: python
出错了,请重新输入!

【提示】异常类型
只要程序可能异常退出,无论哪种类型,Python中都可以用try-except捕捉这种异常并进行处理。


4.5 实例演练:猜数字游戏

编写一个程序,在1-1000中随机生成一个数字,然后用户循环猜这个数字,对于每个数字都只回答“猜大了”或“猜小了”,直到猜测结束,输出用户猜了几次。

【提示】随机数
产生随机数需要用到Python语言的标准随机数库random,关于这个库的使用后边会介绍,这里只说怎么生成1-1000之间的随机数:

import random
n = random.randint(1,1000)

根据题目要求,需要不断接受用户输入,并根据输入进行逻辑判断。所以改程序的简单实现如下:

# 循环猜数游戏
import random

t = random.randint(1,1000) #产生1-1000之间的随机数
count = 0 #用来记录用户猜对用的次数

# while循环,直到用户猜中跳出循环
while True:
    try:# 为了确保程序在用户错误输入时能继续运行,引入try-except
        num = eval(input('请输入一个1-1000之间的数字:'))
    except:
        print('请检查输入并重新输入')
        continue

    count += 1

    if num > t:
        print('猜大了')
    elif num < t:
        print('猜小了')
    else:
        print('猜对了!\n您猜了{}次'.format(count))
        break
# 输出结果如下:
请输入一个1-1000之间的数字:500
猜小了
请输入一个1-1000之间的数字:750
猜小了
请输入一个1-1000之间的数字:875
猜小了
请输入一个1-1000之间的数字:937
猜小了
请输入一个1-1000之间的数字:969
猜小了
请输入一个1-1000之间的数字:985
猜小了
请输入一个1-1000之间的数字:992
猜大了
请输入一个1-1000之间的数字:988
猜对了!
您猜了8次