【第4周笔记】程序的控制结构

2022-04-07
2022-04-11
6 min read
Hits

  课程笔记和选择题

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 组成,完整遍历所有元素后结束

  每次循环,所获得元素放入循环变量,并执行一次语句块

  1. 计数循环(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
  1. 计数循环(特定次)
for i in range(M,N,K) :
    <语句块>

# 举例
>>> for i in range(1,6,2) :
    print("Hello:",i)

# 输出
Hello: 1
Hello: 3
Hello: 5
  1. 字符串遍历循环
for c in s :     # s 是字符串,遍历字符串每个字符,产生循环
    <语句块>

# 举例
>>> for c in "Python123" :
    print(c, end=",")

# 输出
P,y,t,h,o,n,1,2,3,
  1. 列表遍历循环
for item in ls :     # ls 是一个列表,遍历其每个元素,产生循环
    <语句块>

# 举例
>>> for item in [123, "PY", 456] :
    print(item, end=",")

# 输出
123,PY,456,
  1. 文件遍历循环
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

  1. 哪个选项不符合以下程序空白处的语法要求?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 的有效数据类型。
  1. 哪个选项是以下程序的输出结果?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。
  1. 哪个选项给出了以下程序的输出次数?C
k = 10000
while k > 1 :
    print(k)
    k = k / 2
A. 15

B. 13

C. 14

D. 1000
  • 请跟随程序计算或在 IDLE 中运行程序获得结果。
  1. 哪个选项是程序的三种基本结构?C

    A. 过程结构,循环结构,分支结构

    B. 过程结构,对象结构,函数结构

    C. 顺序结构,循环结构,分支结构

    D. 顺序结构,跳转结构,循环结构

  • 无对象结构、跳转结构、过程结构等说法。
  1. 哪个选项关于循环结构的描述是错误的?C

    A. 循环是一种程序的基本控制结构

    B. 循环是程序根据条件判断结果向后反复执行的一种运行方式

    C. 死循环无法退出,没有任何作用

    D. 条件循环和遍历循环结构都是基本的循环结构

  • 死循环能够用于测试性能,形式上的死循环可以用 break 来退出,例如:
x = 10
while True :
    x = x - 1
    if x == 1 :
        break
  • 死循环是有其作用的。
  1. 关于 Python 语句 P=-P,哪个选项的描述是正确的?B

    A. P 的绝对值

    B. 给 P 赋值为它的负数

    C. P=0

    D. P 等于它的负数

  • Python 中的 = 是赋值符号,== 是判断相等性的等于符号。
  1. 哪个选项是用来判断当前 Python 语句在分支结构中?C

    A. 冒号

    B. 引号

    C. 缩进

    D. 大括号

  • 缩进表达层次关系。
  1. 哪个选项是下面代码的执行结果?D
for s in "PYTHON" :
    if s == "T" :
        continue
    print(s,end="")
A. TT

B. PYTHON

C. PY

D. PYHON
  • continue 结束当次循环,但不跳出当前循环。
  1. 哪个选项是 random 库中用于生成随机小数的函数?A

    A. random()

    B. randrange()

    C. randint()

    D. getrandbits()

  • randint()、getrandbits()、randrange() 都产生随机整数,random() 产生 0 到 1 之间的随机小数。
  1. 关于 try-except,哪个选项的描述是错误的?B

    A. 表达了一种分支结构的特点

    B. 使用了异常处理,程序将不会再出错

    C. NameError 是一种异常类型

    D. 用于对程序的异常进行捕捉和处理

  • 使用了异常处理,程序可能运行不会出错,但逻辑上可能出错。程序错误是一个大概念,不仅指代码运行错误,更代表功能逻辑错误。
Avatar

Hui.Ke

❤ Cyber Security | Safety is a priority.