【第4周笔记】程序的控制结构
课程笔记和选择题
Notes
单分支结构
根据判断条件结果而选择不同向前路径的运行方式
if <条件> :
<语句块>
二分支结构
if <条件> :
<语句块1>
else :
<语句块2>
紧凑形式:适用于简单表达式的二分支结构
<表达式1> if <条件> else <表达式2>
多分支结构
if <条件1> :
<语句块1>
elif <条件2> :
<语句块2>
……
else :
<语句块N>
注意多条件之间的包含关系和变量取值范围的覆盖
条件判断及组合
操作符 | 数学符号 | 描述 |
---|---|---|
< | < | 小于 |
<= | ≤ | 小于等于 |
>= | ≥ | 大于等于 |
> | > | 大于 |
== | = | 等于 |
!= | ≠ | 不等于 |
用于条件组合的三个保留字
操作符及使用 | 描述 |
---|---|
x and y | 两个条件 x 和 y 的逻辑与 |
x or y | 两个条件 x 和 y 的逻辑或 |
not x | 条件 x 的逻辑非 |
异常处理
异常处理的基本使用
try :
<语句块1>
except :
<语句块2>
try :
<语句块1>
except <异常类型> : # 标注异常类型后,仅响应此类异常,异常类型名字等同于变量名
<语句块2>
异常处理的高级使用
try :
<语句块1>
except :
<语句块2>
else :
<语句块3> # else 对应语句块 3 在不发生异常时实行
finally :
<语句块4> # finally 对应语句块 4 一定执行
遍历循环
for <循环变量> in <遍历结构> : # 从遍历结构中逐一提取元素,放在循环变量中
<语句块>
由保留字 for 和 in 组成,完整遍历所有元素后结束
每次循环,所获得元素放入循环变量,并执行一次语句块
- 计数循环(N 次)
for i in range(N) : # 遍历由 range() 函数产生的数字序列,产生循环
<语句块>
# 举例
>>> for i in range(5) :
print("Hello:",i)
# 输出
Hello: 0
Hello: 1
Hello: 2
Hello: 3
Hello: 4
- 计数循环(特定次)
for i in range(M,N,K) :
<语句块>
# 举例
>>> for i in range(1,6,2) :
print("Hello:",i)
# 输出
Hello: 1
Hello: 3
Hello: 5
- 字符串遍历循环
for c in s : # s 是字符串,遍历字符串每个字符,产生循环
<语句块>
# 举例
>>> for c in "Python123" :
print(c, end=",")
# 输出
P,y,t,h,o,n,1,2,3,
- 列表遍历循环
for item in ls : # ls 是一个列表,遍历其每个元素,产生循环
<语句块>
# 举例
>>> for item in [123, "PY", 456] :
print(item, end=",")
# 输出
123,PY,456,
- 文件遍历循环
for line in fi : # fi 是一个文件标识符,遍历其每行,产生循环
<语句块>
无限循环
由条件控制的循环运行方式
while <条件> : # 反复执行语句块,直到条件不满足时结束
<语句块>
循环控制保留字
break 跳出并结束当前整个循环,执行循环后的语句
continue 结束当次循环,继续执行后续次数循环
break 和 continue 可以与 for 和 while 循环搭配使用
>>> for c in "PYTHON" :
if c == "T" :
continue
print(c, end="")
输出:PYHON
>>> for c in "PYTHON" :
if c == "T" :
break
print(c, end="")
输出:PY
>>> s = "PYTHON"
>>> while s != "" :
for c in s :
print(c, end="")
s = s[:-1]
输出:PYTHONPYTHOPYTHPYTPYP
>>> s = "PYTHON"
>>> while s != "" :
for c in s :
if c == "T" :
break # break 仅跳出当前最内层循环
print(c, end="")
s = s[:-1]
输出:PYPYPYPYPYP
循环与 else
for <变量> in <遍历结构> :
<语句块1>
else :
<语句块2>
while <条件> :
<语句块1>
else :
<语句块2>
当循环没有被 break 语句退出时,执行 else 语句块
else 语句块作为"正常"完成循环的奖励
这里 else 的用法与异常处理中 else 用法相似
>>> for c in "PYTHON" :
if c == "T" :
continue
print(c, end="")
else :
print("正常退出")
输出:PYHON正常退出
>>> for c in "PYTHON" :
if c == "T" :
break
print(c, end="")
else :
print("正常退出")
输出:PY
random 库基本介绍
random 库是使用随机数的 Python 标准库
伪随机数: 采用梅森旋转算法生成的(伪)随机序列中元素
random 库主要用于生成随机数
使用 random 库: import random
random 库包括两类函数,常用共 8 个
基本随机数函数:seed()、random()
扩展随机数函数:randint()、getrandbits()、uniform()、randrange()、choice()、shuffle()
基本随机数函数
函数 | 描述 | 举例 | 结果 |
---|---|---|---|
seed(a=None) | 初始化给定的随机数种子,默认为当前系统时间 | random.seed(10) | 产生种子 10 对应的序列 |
random() | 生成一个 [0.0, 1.0) 之间的随机小数 | random.random() | 0.5714025946899135 |
>>> import random
>>> random.seed(10)
>>> random.random()
0.5714025946899135
>>> random.random()
0.4288890546751146
……
>>> import random
>>> random.seed(10)
>>> random.random()
0.5714025946899135
>>> random.seed(10)
>>> random.random()
0.5714025946899135
扩展随机数函数
函数 | 描述 | 举例 | 输出 |
---|---|---|---|
randint(a,b) | 生成一个 [a, b] 之间的整数 | random.randint(10, 100) | 64 |
randrange(m, n[, k]) | 生成一个 [m, n) 之间以 k 为步长的随机整数 | random.randrange(10, 100, 10) | 80 |
getrandbits(k) | 生成一个 k 比特长的随机整数 | random.getrandbits(16) | 37885 |
uniform(a, b) | 生成一个 [a, b] 之间的随机小数 | random.uniform(10, 100) | 13.096321648808136 |
choice(seq) | 从序列 seq 中随机选择一个元素 | random.choice([1,2,3,4,5,6,7,8,9]) | 8 |
shuffle(seq) | 将序列 seq 中元素随机排列,返回打乱后的序列 | s=[1,2,3,4,5,6,7,8,9];random.shuffle(s);print(s) | [3, 5, 8, 9, 6, 1, 2, 7, 4] |
测验 4
- 哪个选项不符合以下程序空白处的语法要求?A
for var in ___ :
print(var)
A. {1;2;3;4;5}
B. (1,2,3)
C. "Hello"
D. range(0,10)
- for……in……中 in 的后面需要是一个迭代类型(组合类型),{1;2;3;4;5} 不是 Python 的有效数据类型。
- 哪个选项是以下程序的输出结果?C
for i in range(0, 2) :
print(i)
A. 1
B. 0 1 2
C. 0 1
D. 1 2
- range(0, 2) 输出两个值:0 和 1。
- 哪个选项给出了以下程序的输出次数?C
k = 10000
while k > 1 :
print(k)
k = k / 2
A. 15
B. 13
C. 14
D. 1000
- 请跟随程序计算或在 IDLE 中运行程序获得结果。
哪个选项是程序的三种基本结构?C
A. 过程结构,循环结构,分支结构
B. 过程结构,对象结构,函数结构
C. 顺序结构,循环结构,分支结构
D. 顺序结构,跳转结构,循环结构
- 无对象结构、跳转结构、过程结构等说法。
哪个选项关于循环结构的描述是错误的?C
A. 循环是一种程序的基本控制结构
B. 循环是程序根据条件判断结果向后反复执行的一种运行方式
C. 死循环无法退出,没有任何作用
D. 条件循环和遍历循环结构都是基本的循环结构
- 死循环能够用于测试性能,形式上的死循环可以用 break 来退出,例如:
x = 10
while True :
x = x - 1
if x == 1 :
break
- 死循环是有其作用的。
关于 Python 语句 P=-P,哪个选项的描述是正确的?B
A. P 的绝对值
B. 给 P 赋值为它的负数
C. P=0
D. P 等于它的负数
- Python 中的 = 是赋值符号,== 是判断相等性的等于符号。
哪个选项是用来判断当前 Python 语句在分支结构中?C
A. 冒号
B. 引号
C. 缩进
D. 大括号
- 缩进表达层次关系。
- 哪个选项是下面代码的执行结果?D
for s in "PYTHON" :
if s == "T" :
continue
print(s,end="")
A. TT
B. PYTHON
C. PY
D. PYHON
- continue 结束当次循环,但不跳出当前循环。
哪个选项是 random 库中用于生成随机小数的函数?A
A. random()
B. randrange()
C. randint()
D. getrandbits()
- randint()、getrandbits()、randrange() 都产生随机整数,random() 产生 0 到 1 之间的随机小数。
关于 try-except,哪个选项的描述是错误的?B
A. 表达了一种分支结构的特点
B. 使用了异常处理,程序将不会再出错
C. NameError 是一种异常类型
D. 用于对程序的异常进行捕捉和处理
- 使用了异常处理,程序可能运行不会出错,但逻辑上可能出错。程序错误是一个大概念,不仅指代码运行错误,更代表功能逻辑错误。