PyPython习题册

知识与练习

30个专题,62道选择题与2道填空题。函数、语法与示例逐项对应,练习编排在相关知识点下方。

第2章 初识Python程序

2.1 输入与求值

本节重点:input()返回str;数值输入须转换;多个数用split()与map()。

input只读入文本,不自动判断数值类型。OJ规定按空格输入时,通常使用split与map转换;课堂的eval写法仅用于可信输入。

函数 / 语法功能与参数调用示例 / 结果
input(prompt)读取键盘输入的一行并返回字符串;prompt是可省略的提示文字。输入20:input()返回"20"
int(s)将整数字符串或数值转为整数;小数数值向0截断。int("20") → 20
float(s)将数值或表示小数的字符串转为浮点数。float("3.5") → 3.5
s.split()按连续空白拆分字符串,返回由各部分组成的列表。"3 5".split() → ["3","5"]
map(func,items)将func应用于items中的每个元素;常与拆分后的输入配合。a,b=map(int,input().split())
eval(source)将字符串source作为表达式求值;引用的变量必须已定义。eval("3+4") → 7

随堂练习

K2-006 执行程序,用户输入20,输出什么?
x = input()
print(type(x))
K2-006 作答

答案与解析

B input返回字符串,数字外观不改变其类型。

K2-007 关于input函数的描述,错误的是?
K2-007 作答

答案与解析

B(课件预期);D也不严谨 单次input读取一行。D中的“只能”也不准确,例如input(123)可以把123转换为提示文字;本题严格说存在两个不准确选项,不能把D当成语言规则。

K2-010 type(eval('45'))的结果是?
K2-010 作答

答案与解析

C 表达式45求值得到整数。

K2-011 下列代码的结果是?
x = 3.14
print(eval('x + 10'))
K2-011 作答

答案与解析

D eval在当前环境中对字符串表达式x+10求值。

2.2 输出与转义

本节重点:sep控制对象之间的分隔;end控制末尾;固定小数用格式化。

函数 / 语法功能与参数调用示例 / 结果
print(*objects)输出一个或多个对象;默认对象之间有一个空格,末尾换行。print(1,2)输出1 2
print(...,sep=s)sep指定多个输出对象之间的分隔字符串,默认是一个空格。print(1,2,sep=",")输出1,2
print(...,end=s)end指定本次输出的结尾,默认是换行符。print("A",end="")不换行
print()未给输出对象时,只输出end;默认产生一个空行。连续两次print会产生两次换行
\n、\t、\r分别表示换行、水平制表、回车;各自是一个字符。len("A\nB") → 3
\\、\'、\"分别表示反斜杠、单引号、双引号。print("C:\\names")
\0空字符,长度为1,不是字符0,也不是空字符串。len("A\0B") → 3
f"{x:.2f}"将x格式化为固定两位小数的文本;f允许在花括号中引用变量。x=3时得到"3.00"

随堂练习

K2-015 哪个表达式的输出为11?
K2-015 作答

答案与解析

A 先拼接成字符串11,再求值得到整数11;其他三项均输出2。

2.3 模块与帮助

本节重点:导入方式决定调用名称;help()看用法,dir()列名称。

以下Turtle表格统一写完整模块名turtle。若使用import turtle as t,调用时将turtle.替换为t.。

函数 / 语法功能与参数调用示例 / 结果
import module导入模块,并以模块名访问其函数。import turtle后写turtle.fd(100)
import module as name导入模块并为其指定别名;后续使用别名调用函数。import turtle as t后写t.fd(100)
from module import func只将指定函数名引入当前作用域,可直接调用func。from turtle import fd后写fd(100)
from module import *导入模块允许导出的名称;容易与已有名称冲突。导入后可直接写fd(100)
help(obj)查看对象的说明文档、函数参数和用法;obj不应先加括号调用。help(print)查看print说明
dir(obj)返回对象可用的属性或成员名称列表,不负责详细解释用法。dir(turtle)列出模块成员

随堂练习

K2-027 关于import引用,描述错误的是?
K2-027 作答

答案与解析

C(按“绑定整个模块名”的命题意图) C语句本身合法,但仅把setup绑定到当前命名空间,不能据此使用turtle.circle。本题措辞“引入库”宽泛,不能解释为C是语法错误。

K2-033 可以获得输出函数帮助的是?
K2-033 作答

答案与解析

B help查看使用说明;dir列出属性名。

2.4 Turtle窗口与画笔

本节重点:pu()抬笔、pd()落笔;线条、填充、背景分别设置。

画笔状态决定移动是否留下轨迹;画笔颜色、填充颜色、背景颜色是三个不同设置。

函数 / 语法功能与参数调用示例 / 结果
turtle.setup(w,h)设置绘图窗口宽w、高h;整数表示像素,0至1之间的小数表示屏幕比例。turtle.setup(800,600)
turtle.setup(w,h,x,y)除窗口尺寸外,指定窗口左上角相对屏幕左上角的位置。turtle.setup(800,600,100,50)
turtle.pensize(width)设置画笔线条宽度;width表示像素数。turtle.pensize(3)设为3像素
turtle.pu()抬起画笔;此后移动不会留下线条。别名为penup、up。turtle.pu()后移动只改变位置
turtle.pd()落下画笔;此后移动会留下线条。别名为pendown、down。turtle.pd()后移动会画线
turtle.pencolor(color)设置画笔线条的颜色;color可用颜色名或合适的RGB值。turtle.pencolor("red")设红色线条
turtle.fillcolor(color)设置填充封闭图形时使用的颜色。turtle.fillcolor("yellow")
turtle.bgcolor(color)设置整个绘图区域的背景颜色。turtle.bgcolor("white")
turtle.color(pen,fill)同时设置画笔颜色和填充颜色;第一个参数是线条,第二个是填充。turtle.color("red","yellow")
turtle.colormode(c)设置RGB分量范围;c为1.0或255,后续颜色值须与范围一致。turtle.colormode(255)
turtle.begin_fill()开始记录需要填充的路径,与end_fill配合使用。填充前调用
turtle.end_fill()结束填充路径记录,并按fillcolor设置的颜色填充。完成图形绘制后调用
turtle.speed(s)设置绘图速度,常用0至10;0表示不显示逐步移动动画。turtle.speed(0)快速绘图
turtle.shape(name)设置海龟图标外形,不改变已经画出的图形。turtle.shape("turtle")
turtle.hideturtle()隐藏海龟图标;已绘制的线条仍保留。turtle.hideturtle()
turtle.done()进入事件循环,使独立脚本的绘图窗口等待用户操作。通常放在绘图程序最后

随堂练习

K2-031 colormode(255)后,设置背景为红色的是?
K2-031 作答

答案与解析

D bgcolor设置背景;255模式下纯红色分量为255。

K2-039 turtle.color('red', 'yellow')分别定义什么?
K2-039 作答

答案与解析

A color的两个颜色参数依次控制画笔和填充。

K2-040 设置绘图窗口大小的函数是?
K2-040 作答

答案与解析

B setup控制窗口大小和位置;pensize控制笔宽。

2.5 Turtle运动与方向

本节重点:fd/bk移动;left/right相对旋转;seth设置绝对方向。

默认standard模式:原点位于中心,x向右、y向上;0度向右,90度向上,180度向左,270度向下。left/right是相对旋转,seth是设置绝对方向。

函数 / 语法功能与参数调用示例 / 结果
turtle.fd(d)沿当前朝向前进d个像素;完整名称为forward。正距离向前,负距离反向。turtle.fd(100)前进100像素
turtle.bk(d)相对当前朝向后退d个像素;不改变朝向。完整名称为backward。turtle.bk(50)后退50像素
turtle.left(angle)从当前朝向向左旋转angle度;只改变朝向,不改变位置。turtle.left(90)左转90度
turtle.right(angle)从当前朝向向右旋转angle度;只改变朝向,不改变位置。turtle.right(90)右转90度
turtle.seth(angle)直接将朝向设为绝对角度angle;完整名称为setheading。turtle.seth(90)直接朝上
turtle.goto(x,y)移动到绝对坐标(x,y);保留抬笔或落笔状态,也不改变朝向。turtle.goto(100,-50)
turtle.setx(x)只改变横坐标,纵坐标和朝向不变。turtle.setx(100)
turtle.sety(y)只改变纵坐标,横坐标和朝向不变。turtle.sety(-50)
turtle.home()移动到原点(0,0),并将朝向恢复为向右;落笔时会画返回路径。返回原点且朝向0度
turtle.circle(r)绘制半径为abs(r)的圆;正r圆心在当前左侧,负r在当前右侧。turtle.circle(80)
turtle.circle(r,a)绘制半径为abs(r)、圆心角为a度的圆弧。turtle.circle(-30,180)画右侧半圆
turtle.circle(r,steps=n)用n条线段近似圆,形成正n边形;r是其外接圆半径。turtle.circle(80,steps=6)
turtle.dot(size,color)在当前位置画实心圆点;size为直径,color为颜色。turtle.dot(20,"red")
turtle.pos()返回当前位置的二维向量;abs作用于该向量时得到距原点距离。abs(turtle.pos()) < 1
turtle.undo()撤销最近一次可撤销的画笔动作。撤销最后一步绘图

移动与转向示例

import turtle
turtle.seth(0)
turtle.fd(100)      # 向右前进100
turtle.left(90)     # 从向右变为向上
turtle.fd(50)       # 向上前进50
turtle.pu()        # 抬笔,返回时不画线
turtle.goto(0, 0)
turtle.pd()        # 落笔,后续移动继续画线
turtle.done()

随堂练习

K2-042 turtle.goto(x,y)的含义是?
K2-042 作答

答案与解析

C goto不自动改变抬笔或落笔状态;落笔时移动会画线。

K2-044 turtle.circle(-30,180)的效果是?
K2-044 作答

答案与解析

D 负半径使圆心位于当前前进方向的右侧;180指定半圆。

K2-045 程序绘制什么图形?
import turtle as t
for i in range(20, 100, 20):
    t.penup()
    t.goto(0, -i)
    t.pendown()
    t.circle(i)
K2-045 作答

答案与解析

C 每次从(0,-i)画半径i的圆,圆心均为原点。

K2-048 绝对0度方向是?
K2-048 作答

答案与解析

D 按课件采用的默认standard模式,0度向东、90度向北。

K2-049 哪个操作一定不能改变画笔朝向?
K2-049 作答

答案与解析

C bk只后退;另外三项用于设置或改变朝向。

K2-050 关于turtle的描述,正确的是?
K2-050 作答

答案与解析

C C描述的是函数作用,实际调用需与导入方式一致,例如turtle.home()。

2.6 随机数与函数封装

本节重点:randint包含两端;函数先定义后调用;return返回结果。

函数 / 语法功能与参数调用示例 / 结果
random.randint(a,b)返回a至b之间的随机整数,包含a、b两端。random.randint(3,6)可能为3、4、5、6
random.randrange(start,stop,step)按range的取值范围随机选一个整数,不含stop;step可省略。random.randrange(0,10,2)选偶数
random.random()返回大于等于0、小于1的随机浮点数。结果范围[0,1)
random.uniform(a,b)返回a与b之间的随机浮点数,用于实数区间抽样。random.uniform(20,80)
random.seed(s)初始化伪随机状态;相同种子与调用次序便于复现结果。random.seed(10)
def name(parameters):定义函数;parameters是形参列表,函数体需缩进。def polygon(n,length):
name(arguments)调用已定义的函数,将实参传给对应形参。polygon(6,100)
return value结束本次函数调用并返回value;未显式返回时结果为None。return total

定义与调用

def add(a, b):
    result = a + b
    return result

answer = add(3, 5)
print(answer)  # 8

2.7 书写规范

本节重点:冒号引出语句块;缩进决定所属关系;注释与字符串须区分。

函数 / 语法功能与参数调用示例 / 结果
缩进表示语句所属代码块;同一层缩进一致,通常每层4个空格。if内部的语句比if语句头多缩进一层
冒号:用于if、elif、else、for、while、def、class等语句头结尾。if x > 0:
#从井号起至本行末尾为注释;字符串中的井号不是注释。count = 0 # 初始化计数
"""..."""多行字符串;位于模块、函数或类定义开头时可作说明文档。不是以单引号作为单行注释符
括号内续行表达式位于圆括号、方括号或花括号内时,可跨物理行书写。长算式放在圆括号中
行末\显式续行;后面不能再跟注释或其他字符。优先使用括号内续行
分号;分隔同一行上的多个简单语句;一般仍按一行一条书写。a=1; b=2

随堂练习

K2-081 表示代码块所属关系的语法是?
K2-081 作答

答案与解析

C 冒号引出语句块;缩进决定后续语句是否属于该块。

K2-085 关于注释,错误的是?
K2-085 作答

答案与解析

C 严格说三引号产生字符串字面量;位于定义开头时可成为文档字符串,其余位置常被用作多行说明。

K2-087 同一行写多条语句使用什么符号?
K2-087 作答

答案与解析

A 分号可分隔简单语句;书面代码通常一行一条。

K2-088 关于程序格式,正确的是?
K2-088 作答

答案与解析

D 括号内隐式续行也可使用;注释只影响#之后的内容,顶层代码通常不缩进。

2.8 标识符与关键字

本节重点:名称区分大小写、不能数字开头、不能使用关键字。

函数 / 语法功能与参数调用示例 / 结果
标识符变量、函数、类等使用的名字;由合法字符构成,不能数字开头。my_name、a1合法;1a不合法
大小写名称区分大小写;大小写不同是不同名字。Flower与flower不同
关键字语言保留名称,不能重新用作普通变量名。pass、False、and不可作变量名
命名约定变量、函数常用小写加下划线;类名常用首字母大写;常量常用全大写。total_score、Medicine、MAX_SIZE
避免覆盖内置名使用str、list、sum等作变量名会遮蔽同名内置功能。字符串变量可命名为text或s
keyword.kwlist当前Python版本的关键字列表;先import keyword。print(keyword.kwlist)
keyword.iskeyword(s)判断字符串s是否为关键字,返回布尔值。keyword.iskeyword("pass") → True

随堂练习

K2-095 哪个不是合法命名?
K2-095 作答

答案与解析

D 标识符不能以数字开头。

K2-100 哪个不能用作变量名?
K2-100 作答

答案与解析

B pass是关键字;false和And与False、and大小写不同。

K2-101 关于语法元素,错误的是?
K2-101 作答

答案与解析

D 这些复合语句的语句头需要冒号。

2.9 表达式、类、模块与包

本节重点:区分赋值与比较、属性与方法;文件读取用with管理关闭。

函数 / 语法功能与参数调用示例 / 结果
表达式可计算得到值的语法单元;可用作赋值右侧或函数参数。a+1、len(s)
语句执行赋值、调用或流程控制等操作;普通赋值不是比较。a=a+1;比较相等用a==b
类与对象类定义一类数据和行为;对象是类的实例。drug=Medicine(...)
__init__(self,...)实例创建后的初始化方法;通过self保存当前实例的属性。self.stock=stock
obj.attr与obj.method()前者访问对象属性,后者调用对象方法。drug.stock、drug.restock(10)
模块与包模块通常是.py文件;包组织多个模块,常规包包含__init__.py。命名空间包是可不含该文件的例外
open(path,mode,encoding=...)按路径、模式和编码打开文件,得到文件对象;r表示读取文本。open("data.txt","r",encoding="utf-8")
with ... as f:将文件对象绑定为f,离开语句块后自动关闭。配合for line in f:逐行读取

文件逐行读取

with open('data.txt', 'r', encoding='utf-8') as f:
    for line in f:
        record = line.strip()
        print(record)

第3章 基本数据类型

3.1 数字类型与进制

本节重点:进制是整数的写法;bin/oct/hex返回字符串。

函数 / 语法功能与参数调用示例 / 结果
int整数类型,可在内存允许范围内扩大精度;二进制等只是不同写法。-217、0b1010均为int
float有限精度浮点数;有小数点或指数标记的数值通常为该类型。43.0、2e3均为float
complex复数类型;虚数单位写j或J,实部和虚部可为0。3+4j、3j
0b、0o、0x整数的二、八、十六进制前缀;数位必须符合该进制。0b1010=0o12=0xA=10
bin(n)把整数n转为带0b前缀的二进制字符串。bin(10) → "0b1010"
oct(n)把整数n转为带0o前缀的八进制字符串。oct(10) → "0o12"
hex(n)把整数n转为带0x前缀的十六进制字符串。hex(10) → "0xa"
int(s,base)将base进制的字符串s解释为整数。int("1010",2) → 10

随堂练习

K3-012 哪个是整数?
K3-012 作答

答案与解析

C 2E3是浮点数字面量;2e3.0不是合法数字写法。

K3-009 哪个二进制整数定义正确?
K3-009 作答

答案与解析

B 二进制前缀0b或0B,数位只能是0和1。

K3-016 关于Python,正确的是?
K3-016 作答

答案与解析

C 整数可扩展精度,浮点数使用有限精度;缩进可以表达嵌套。

K3-021 课件中三种基本数字类型是?
K3-021 作答

答案与解析

A 二进制是整数的表示方法,不是独立类型;bool属于int的子类,课件此处采用int、float、complex分类。

3.2 浮点数精度

本节重点:浮点数可能有误差;round处理数值,格式化控制显示。

round受舍入到偶数和二进制表示影响,不能一概按十进制“逢5必进”理解;题目要求固定小数位时使用格式化输出。

函数 / 语法功能与参数调用示例 / 结果
二进制表示误差大多数十进制小数不能用有限二进制位精确表示。0.1+0.2==0.3 → False
math.isclose(a,b)判断a与b是否在指定容差内接近;用于近似数值比较。math.isclose(0.1+0.2,0.3) → True
round(x)对x舍入,不指定小数位时通常返回整数。round(3.6) → 4
round(x,n)把数值x舍入到小数点后n位,但不保证显示n位。round(3.14159,3) → 3.142
f"{x:.nf}"此处n应换成具体位数;固定输出小数位并补尾零。f"{3:.4f}" → "3.0000"

随堂练习

K3-013 下列代码输出什么?
print(0.1 + 0.2 == 0.3)
K3-013 作答

答案与解析

B 0.1、0.2的二进制浮点表示不精确,其和不恰等于0.3。

3.3 复数与类型转换

本节重点:.real/.imag取分量;复数不能直接转float或比较大小。

函数 / 语法功能与参数调用示例 / 结果
complex(a,b)构造实部为a、虚部为b的复数;b省略时为0。complex(3,4) → (3+4j)
z.real获取复数z的实部。(3+4j).real → 3.0
z.imag获取复数z的虚部。(3+4j).imag → 4.0
z.conjugate()返回复数z的共轭,实部不变、虚部变号。(3+4j).conjugate() → (3-4j)
abs(z)复数的绝对值为其模,即实部与虚部平方和的平方根。abs(3+4j) → 5.0
int(x)数值转整数时朝0截断;字符串须符合整数格式。int(-3.9) → -3
float(x)实数或合法数值文本转浮点数;不能直接接收复数。float(4+0j)报TypeError

随堂练习

K3-019 关于复数,错误的是?
K3-019 作答

答案与解析

B 例如3j的实部就是0。

K3-047 float(4+0j)的结果是?
K3-047 作答

答案与解析

D 即使虚部为0,也不能直接将complex传给float;可以转换其real属性。

K3-048 下列代码输出什么?
a = 10.99
print(complex(a))
K3-048 作答

答案与解析

D complex把实数转为虚部0的复数。

3.4 运算与赋值

本节重点:/真除、//向下取整、%取余、**求幂。

常用优先级:幂→乘、除、整除、取余→加减→比较→逻辑。同级算术通常从左到右;复杂表达式应使用括号明确计算顺序。

函数 / 语法功能与参数调用示例 / 结果
+、-、*分别为加、减、乘;+、-也可作一元正负号。3+4*2 → 11
a/b真除法;整数相除也得到浮点结果,除数不能为0。4/2 → 2.0
a//b向下取整的除法;负数结果向更小的整数取整。-7//3 → -3
a%b取余,满足a=(a//b)*b+a%b;非零余数与除数同号。-7%3 → 2
a**b幂运算;连续幂从右侧结合,一元负号与括号需区分。2**3**2 → 512
a=b、a+=b赋值与增强赋值;先计算右侧再更新左侧。s+=x累计x
a,b=b,a右侧先按原值求值,再同时绑定左侧名字,实现交换。a=2,b=5后交换为5、2
&、|、^整数按位与、或、异或;^不是幂运算。5&3 → 1
<<、>>整数按位左移、右移;右操作数是移位位数。3<<1 → 6

随堂练习

K3-024 a=-a表示什么?
K3-024 作答

答案与解析

D 先对右侧原a取负,再把结果绑定回a。

K3-026 填空:2 ** 3 ** 2的值。
    K3-026 作答

    答案与解析

    512 幂运算右结合,先算3**2,再算2**9。

    K3-028 哪个语句不会引发异常?
    K3-028 作答

    答案与解析

    A 其余分别涉及类型不匹配、除零、Python 3语法错误。

    K3-032 下列程序输出什么?
    x, y = 3.0, 5
    y += x
    print(y)
    K3-032 作答

    答案与解析

    B 整数与浮点数相加得到浮点数,print不输出字符串引号。

    K3-033 下列程序输出什么?
    x = 2
    x *= 3 + 5 ** 2
    print(x)
    K3-033 作答

    答案与解析

    A 右侧先算5**2=25,再加3得到28,x*=28得到56。

    K3-034 关于赋值,错误的是?
    K3-034 作答

    答案与解析

    D 只要右侧名字事先有值,三变量轮换赋值合法。

    K3-036 print(123 + 4.0)的输出是?
    K3-036 作答

    答案与解析

    B 含float的加法结果为float。

    K3-037 填空:print(4 / 2)的输出。
      K3-037 作答

      答案与解析

      2.0 Python 3的/执行真除法,两个整数相除也得到float。

      K3-039 哪个不是Python数值运算操作符?
      K3-039 作答

      答案与解析

      C &是整数按位与,**是幂,%是取余;$不是该语言的运算符。

      K3-040 表达式的值是?
      3.0 - 3 * 2 ** 3 % 5 // 3 + True
      K3-040 作答

      答案与解析

      C 2**3=8,3*8=24,24%5=4,4//3=1,最后3.0-1+True=3.0。

      3.5 内置数值函数与math

      本节重点:重点掌握max/min/sum、ceil与sqrt;其余按计算需求查用。

      使用math函数前先import math。课件基本计算题重点为数值转换、max/min/sum、ceil与sqrt;其余函数按题目需要查用。

      函数 / 语法功能与参数调用示例 / 结果
      max(items)返回数据中的最大值;也可以直接传多个数。max(3,7,2) → 7
      min(items)返回数据中的最小值。min([3,7,2]) → 2
      sum(items)返回所有元素的和,常用于总量和均值。sum([1,3,5]) → 9
      abs(x)返回绝对值;x为复数时返回模。abs(-3) → 3
      divmod(a,b)同时求整商和余数,返回二元元组。divmod(7,3) → (2,1)
      pow(x,y)求x的y次幂;整数参数可再给第三参数m计算模幂。pow(2,3) → 8
      math.ceil(x)向上取整,返回不小于x的最小整数。math.ceil(2.1) → 3
      math.floor(x)向下取整,返回不大于x的最大整数。math.floor(-2.1) → -3
      math.trunc(x)朝0截去小数部分,与负数的floor不同。math.trunc(-2.9) → -2
      math.sqrt(x)计算平方根;实数范围要求x≥0。math.sqrt(9) → 3.0
      math.log(x,base)求对数;base省略时为自然对数,x须大于0。math.log(8,2) → 3.0
      math.log2(x)求以2为底的对数。math.log2(8) → 3.0
      math.log10(x)求以10为底的对数。math.log10(100) → 2.0
      math.exp(x)求e的x次幂。math.exp(0) → 1.0
      math.factorial(n)求非负整数n的阶乘。math.factorial(4) → 24
      math.gcd(a,b)求整数a、b的最大公因数。math.gcd(12,18) → 6
      math.radians(deg)角度转弧度;三角函数通常接收弧度。math.radians(180)约等于π
      math.degrees(rad)弧度转角度,函数名为degrees。math.degrees(math.pi) → 180.0
      math.sin(x)求x弧度的正弦。math.sin(0) → 0.0
      math.cos(x)求x弧度的余弦。math.cos(0) → 1.0
      math.tan(x)求x弧度的正切,须满足函数定义域。math.tan(0) → 0.0
      math.hypot(x,y)求向量(x,y)的欧氏长度,即到原点的距离。math.hypot(3,4) → 5.0
      样本均值与标准差均值为sum(a)/n;样本标准差为平方离差和除以n−1后开方。样本标准差要求n≥2

      拓展函数

      函数 / 语法功能与参数调用示例 / 结果
      math.pi、math.e圆周率、自然常数。π与e的浮点近似值
      math.inf、math.nan正无穷与非数值NaN。NaN不能用普通相等比较判定
      math.isfinite(x)判断x是否为有限数。无穷和NaN均为False
      math.isinf(x)判断x是否为正无穷或负无穷。math.isinf(math.inf) → True
      math.isnan(x)判断x是否为NaN。math.isnan(math.nan) → True
      math.fmod(x,y)浮点余数,负数规则与%不同。math.fmod(-7,3) → -1.0
      math.pow(x,y)求幂,通常返回float,与内置pow不完全相同。math.pow(2,3) → 8.0
      math.expm1(x)计算e**x−1。用于接近0的x时的相关计算
      math.log1p(x)计算ln(1+x)。参数要求x>−1
      asin/acos/atan/atan2反三角函数,结果以弧度表示。atan2接收y、x两个参数
      双曲与特殊函数sinh/cosh/tanh及其反函数;erf/erfc、gamma/lgamma。课件拓展:识别名称与大类

      随堂练习

      K3-043 divmod(3,5)返回什么?
      K3-043 作答

      答案与解析

      B divmod返回(商,余数)组成的元组。

      3.6 字符串表示与转义

      本节重点:字符串不可变;数字字符串不是数值;长度按字符数量计。

      字符串不可变:索引和切片不能直接赋值。字符串方法通常返回新字符串,需要接收其返回值。

      函数 / 语法功能与参数调用示例 / 结果
      str(x)把对象x转换为字符串表示。str(123) → "123"
      len(s)返回字符串的字符数量,不是编码字节数或终端显示列数。len("Python") → 6
      s+t连接两个字符串;不能直接将字符串与数值相加。"12"+"3" → "123"
      s*n把字符串重复n次,n须为整数。"ab"*3 → "ababab"
      单引号、双引号、三引号都可界定字符串;三引号允许跨行。"123"与整数123类型不同
      原始字符串r"..."减少反斜杠的转义;不能以奇数个反斜杠结尾。r"C:\names"表示含反斜杠的路径

      随堂练习

      K3-070 哪个可以输出C:\names?
      K3-070 作答

      答案与解析

      C 需要用\\表示一个反斜杠;也可用原始字符串r"C:\names"。

      K3-072 程序输出的长度是?
      x = 'R\0S\0T'
      print(len(x))
      K3-072 作答

      答案与解析

      B 两个\0各表示一个空字符,其余R、S、T各占1个字符,总长度5。

      K3-087 关于字符串,正确的是?
      K3-087 作答

      答案与解析

      C Python没有单独的字符类型,单字符是长度1的字符串;字符串不可变。

      3.7 索引与切片

      本节重点:单个索引与切片不同;切片不含右端;[::-1]是整串逆序。

      以下示例统一令s="Python"。切片遵循左闭右开;切片范围超出长度时会截断,与单个索引越界不同。

      函数 / 语法功能与参数调用示例 / 结果
      s[i]取索引i处的一个字符;正索引从0开始,越界时报错。s="Python"时,s[0] → "P"
      s[-1]负索引从尾部计数,−1为最后一个字符。s[-1] → "n"
      s[start:stop:step]从start按step步长取到stop之前;不含stop,step不能0。s[1:5:2] → "yh"
      s[:k]省略起点,取前k个字符。s[:2] → "Py"
      s[-k:]取末尾k个字符。s[-2:] → "on"
      s[::2]从首字符开始,每隔一个字符取一次。s[::2] → "Pto"
      s[::-1]按负步长逆序取得整个字符串,得到逆序副本。s[::-1] → "nohtyP"
      s==s[::-1]比较原串和逆序串是否相同,用于回文判断。"aba"=="aba"[::-1] → True

      数字回文判断

      n = 12321
      s = str(n)
      print(s == s[::-1])  # True

      随堂练习

      K3-086 关于字符串,错误的是?
      K3-086 作答

      答案与解析

      B 切片左闭右开,不包含停止索引M。C须结合普通字符串和有效转义序列理解,原始字符串另论。

      K3-088 哪个返回“大山力压”?
      K3-088 作答

      答案与解析

      C 省略起止位置并指定步长-1,得到整个字符串的逆序。

      K3-089 tstr为television,哪个输出vi?
      K3-089 作答

      答案与解析

      D 字符串长10,-6对应索引4,因此[-6:6]等价于[4:6],结果为vi;A的[4:7]多取一个s。

      3.8 字符编码与比较

      本节重点:ord将字符转整数;chr将整数转字符;字母循环位移需取模。

      函数 / 语法功能与参数调用示例 / 结果
      ord(c)将单个字符c转换为Unicode码点整数;参数必须是长度1的字符串。ord("a") → 97
      chr(n)将有效整数码点n转换为一个字符。chr(97) → "a"
      字母循环位移先减字母表起点变为下标,再位移、模26,最后加回起点转字符。小写起点为ord("a")
      chr(ord(a)+ord(b))把两个字符的码点相加,再将总和转成新字符。chr(ord("1")+ord("2")) → "c"
      字符串比较按首个不同位置的码点比较;共同前缀相同时较长者更大。"DCBA">"DC" → True

      凯撒位移:以小写字母为例

      c, shift = 'z', 1
      base = ord('a')
      index = ord(c) - base
      new_c = chr((index + shift) % 26 + base)
      print(new_c)  # a

      随堂练习

      K3-104 关于字符编码,正确的是?
      K3-104 作答

      答案与解析

      B ord接收单字符字符串,chr接收整数码点,参数方向不能颠倒。

      K3-105 哪个表达式为False?
      K3-105 作答

      答案与解析

      B 共同前缀相同时,较长字符串更大,因此DCBA大于DC。

      3.9 字符串函数与方法

      本节重点:逐项区分大小写转换、字符判断、前后缀和宽度填充。

      以上方法不原地修改s。若需保留转换结果,应写s=s.upper()等赋值语句。两侧各填n个字符时,center的总宽应为len(s)+2*n。

      函数 / 语法功能与参数调用示例 / 结果
      s.lower()将s中的字母转换为小写,其他字符保留。"AbC".lower() → "abc"
      s.upper()将s中的字母转换为大写,其他字符保留。"AbC".upper() → "ABC"
      s.swapcase()将大写变小写、小写变大写,其他字符保留。"AbC".swapcase() → "aBc"
      s.capitalize()首字符若是字母则大写,其余字母小写。"2-PEN".capitalize() → "2-pen"
      s.title()按单词边界转换为首字母大写;不同于仅处理整个字符串首字符。"hello world".title()
      s.isalpha()非空且所有字符均为字母时返回True。"abc".isalpha() → True
      s.isalnum()非空且所有字符均为字母或数字时返回True。"a1".isalnum() → True
      s.isspace()非空且所有字符均为空白字符时返回True。" ".isspace() → True
      s.isdecimal()判断是否为非空十进制数字字符序列,识别范围小于等于isdigit。"123".isdecimal() → True
      s.isdigit()判断是否为非空数字字符序列,包含部分不能直接用int解析的字符。不能用它代替所有输入合法性检查
      s.isnumeric()判断是否为非空数值字符序列,范围大于等于isdigit。包括部分中文数字等数值字符
      s.islower()至少有一个有大小写的字符,且这类字符均为小写时为True。"abc1".islower() → True
      s.isupper()至少有一个有大小写的字符,且这类字符均为大写时为True。"ABC1".isupper() → True
      s.startswith(prefix)判断s是否以完整子串prefix开头。"dislike".startswith("dis") → True
      s.endswith(suffix)判断s是否以完整子串suffix结尾。"playing".endswith("ing") → True
      s.center(width,c)以总宽width居中,空位用单字符c填充;c省略时为空格。"hi".center(6,"*") → "**hi**"
      s.ljust(width,c)以总宽width左对齐,在右侧填充。"hi".ljust(4,"*") → "hi**"
      s.rjust(width,c)以总宽width右对齐,在左侧填充。"hi".rjust(4,"*") → "**hi"
      s.zfill(width)在数字字符串左侧补0达到最小宽度;正负号保留在最前。"3".zfill(2) → "03"

      随堂练习

      K3-123 哪个描述正确?
      K3-123 作答

      答案与解析

      C 大写转换用s.upper();isnumeric返回布尔值。此处str为题目变量名,实际编码应避免覆盖内置str。

      3.10 拆分与连接

      本节重点:split返回列表;join连接字符串元素;指定分隔符会影响空项。

      函数 / 语法功能与参数调用示例 / 结果
      s.split()按连续空白拆分,忽略首尾空白,返回字符串列表。"a b".split() → ["a","b"]
      s.split(sep)按指定分隔串sep拆分;相邻分隔符之间可产生空字符串。"a,,b".split(",") → ["a","","b"]
      s.split(sep,n)最多从左侧拆分n次,可能留下包含分隔符的末项。"a,b,c".split(",",1) → ["a","b,c"]
      s.rsplit(sep,n)最多从右侧拆分n次。"a,b,c".rsplit(",",1) → ["a,b","c"]
      sep.join(items)用sep连接items中的全部字符串;非字符串元素须先转换。",".join(["1","2"]) → "1,2"
      " ".join(s.split())先按空白拆词,再用单个空格连接,用于规范连续空白。" a b ".split()后重接得"a b"

      随堂练习

      K3-141 ','.join([1,2,3,4,5])的结果是?
      K3-141 作答

      答案与解析

      C join要求元素全为字符串,可先用map(str, ...)转换。

      K3-142 下列代码输出什么?
      x = [12, 34, 56]
      print(','.join(str(x)))
      # [,1,2,,, ,3,4,,, ,5,6,]
      K3-142 作答

      答案与解析

      A str(x)先把整个列表转换为字符串,join随后遍历每个字符。准确输出见解析代码。选项A以文字说明替代原课件难辨的连续标点。

      3.11 替换与清理

      本节重点:replace替换子串;strip处理首尾字符集合;方法返回值须接收。

      strip的参数是字符集合,不是完整前后缀;replace可以替换中间内容。调用这些方法后,原字符串仍不变,需接收返回值。

      函数 / 语法功能与参数调用示例 / 结果
      s.replace(old,new)把所有old子串替换为new,返回新字符串。"aba".replace("a","x") → "xbx"
      s.replace(old,new,n)只替换从左向右的前n次出现。"aaa".replace("a","x",2) → "xxa"
      s.strip(chars)删除首尾属于chars字符集合的字符;省略chars时删除空白。"abca".strip("ab") → "c"
      s.lstrip(chars)只删除左侧属于指定字符集合的字符。" hi ".lstrip() → "hi "
      s.rstrip(chars)只删除右侧属于指定字符集合的字符。" hi ".rstrip() → " hi"
      s.find(sub)返回sub首次出现的索引;不存在时返回−1。"abc".find("b") → 1
      s.index(sub)返回sub首次出现的索引;不存在时引发ValueError。"abc".index("x")报错
      s.count(sub)返回sub不重叠出现的次数。"aaaa".count("aa") → 2
      s.removeprefix(prefix)删除完整前缀;没有该前缀时原样返回。Python 3.9起支持。"dislike".removeprefix("dis") → "like"
      s.removesuffix(suffix)删除完整后缀;没有该后缀时原样返回。Python 3.9起支持。"playing".removesuffix("ing") → "play"

      随堂练习

      K3-149 去掉s中的全部“哈”,应使用哪个方法?
      K3-149 作答

      答案与解析

      B 原s为“哈哈哈哈我知道哈,老师们还要洗头!哈哈哈哈哈”;replace也删除中间的哈,strip仅处理首尾。

      3.12 字符串格式化

      本节重点:f-string的花括号放表达式;冒号后的格式规定宽度、精度等。

      格式规格的常用顺序为“填充、对齐、宽度、精度、类型”。宽度是最小显示宽,不会截断过长内容;输出多个数值时,各自设置精度。

      函数 / 语法功能与参数调用示例 / 结果
      f"{expression}"f加在引号前;花括号内的表达式先求值,再插入字符串。f"{3+5}" → "8"
      f"{x:.2f}"冒号后是格式规格;.2f表示固定两位小数,不足补0。x=3时得到"3.00"
      f"{ratio:.3%}"将比例乘100,保留3位小数并加百分号;不应预先乘100。ratio=0.125时得到"12.500%"
      f"{s:<10}"最小总宽10,左对齐;右侧默认补空格。用于名称字段左对齐
      f"{s:>10}"最小总宽10,右对齐;左侧默认补空格。用于数值文本右对齐
      f"{s:^10}"最小总宽10,居中对齐。用于标题或图案居中
      f"{s:*>10}"在对齐符>之前给出填充字符*;其余空位填*。s="hi"时得到"********hi"
      f"{n:02d}"整数按十进制显示,最小宽2,不足补0。n=3时得到"03"
      f"{n:b}"将整数按二进制显示,不含0b前缀。n=10时得到"1010"
      f"{x:e}"以科学计数法显示浮点数;E使用大写指数标记。x=100时得到"1.000000e+02"
      f"{n:,}"以逗号作千位分隔符。n=12345时得到"12,345"
      f"{s:.3}"字符串精度表示最多显示3个字符,不是3位小数。s="Python"时得到"Pyt"
      template.format(values)用参数替换模板中的花括号槽;可按位置编号引用参数。"{:.2f}".format(3) → "3.00"
      {{与}}在format模板或f-string中输出字面花括号。f"{{{3}}}" → "{3}"

      拓展函数

      函数 / 语法功能与参数调用示例 / 结果
      %s、%d、%f旧式字符串格式化中的字符串、整数、浮点数占位符。"%.2f" % 3 → "3.00"
      整数其他类型码o为八进制,d为十进制,x/X为十六进制,c为码点对应字符。f"{65:c}" → "A"

      多个变量与表达式的输出

      name, score, ratio = 'Li', 92, 0.125
      print(f'{name}: {score:03d}, {ratio:.1%}')
      # Li: 092, 12.5%

      随堂练习

      K3-157 下列程序输出什么?
      a = 'CPR'
      b = 'AED'
      print('{:*>10}:{:*<10}'.format(a, b))
      K3-157 作答

      答案与解析

      A 第一个槽宽10、星号填充、右对齐;第二个槽宽10、左对齐。

      K3-158 下列代码的运行结果是?
      x = 3.1415926
      print('{} {:6}'.format(round(x), round(x, 3)))
      K3-158 作答

      答案与解析

      C round(x)为整数3;round(x,3)为3.142。第二个槽宽6,除了模板中的空格,还会产生一个前导空格。

      3.13 逻辑类型与短路

      本节重点:not返回布尔值;and/or短路并返回操作数;is不等于==。

      逻辑优先级从高到低为not、and、or。and/or短路并返回操作数,不保证结果是True或False。

      函数 / 语法功能与参数调用示例 / 结果
      True、False布尔类型的两个值,与整数1、0比较相等。True==1 → True
      真值判断0、空字符串、空容器、None等通常为假;非空字符串通常为真。bool("0") → True
      not x对x的真值取反,结果一定为布尔值。not 0 → True
      x and y先看x:x为假则返回x,否则计算并返回y。0 and 5 → 0
      x or y先看x:x为真则返回x,否则计算并返回y。3 or 0 → 3
      ==、!=、<、<=等比较对象的值;比较链可连续使用。1<x<=5
      is、is not判断是否同一对象,不等价于值相等。空值判断常写x is None
      in、not in判断元素是否属于容器,或子串是否存在于字符串。"ab" in "abc" → True

      随堂练习

      K3-186 输入2后,下面程序输出什么?
      x = eval(input('please input a number:'))
      if 100:
          print(True == 1)
      else:
          print('False == 0')
      K3-186 作答

      答案与解析

      C 条件100为真,因此打印True==1的计算结果。变量x的值不参与此条件。

      3.14 药品销售数据的类型选择

      本节重点:标识保留字符串;数量转整数;金额、日期按用途转换。

      函数 / 语法功能与参数调用示例 / 结果
      药品名称、卡号、商品编码使用str保存文本和标识,保留前导零;标识不用于算术。商品编码"00123"仍为str
      销售数量使用int进行计数和数量运算。int("6") → 6
      金额课件统计使用float;要求精确到分时可另用整数分或Decimal。float("12.50") → 12.5
      日期输入时是文本,后续可解析成日期对象,进行日期相关运算。不能仅因含数字就按int处理

      第4章 程序的控制结构

      4.1 结构与流程图

      本节重点:区分顺序、分支、循环;先明确输入、处理与输出。

      函数 / 语法功能与参数调用示例 / 结果
      顺序结构按语句出现的先后次序执行;其他结构内部也包含顺序。读入半径→计算面积→输出
      分支结构根据条件真值选择执行路径。if...elif...else
      循环结构按条件或可迭代对象重复执行语句块。while、for
      IPO分别说明输入、处理、输出,先确定程序的数据关系。输入n;处理求和;输出总和
      流程图基本符号起止框表示开始结束;输入输出框读写数据;处理框执行操作;判断框选择路径。箭头表示执行方向

      4.2 分支结构

      本节重点:elif链只执行一个分支;独立if可执行多个;区间端点须明确。

      语句头后必须有冒号,各分支语句头对齐,分支内部增加一级缩进。区间判断须明确端点是否包含。

      函数 / 语法功能与参数调用示例 / 结果
      if condition:condition为真时执行缩进语句块,为假时跳过。只需在符合条件时计数
      if...else条件为真执行if块,为假执行else块;二者只执行一个。回文输出yes,否则no
      if...elif...else从上到下检查,只执行第一个成立条件的语句块;都不成立则执行else。按年龄区间分类
      多个独立if每个条件独立检查,可以执行多个语句块,与elif链不同。同时删前缀与后缀
      复合条件and表示同时满足,or表示至少一个满足,not表示真值取反。temp>=37.5 and cough==1

      多分支分类语法

      age = int(input())
      if age <= 18:
          group = 1
      elif age <= 35:
          group = 2
      elif age <= 60:
          group = 3
      else:
          group = 4
      print(group)

      4.3 遍历循环与range

      本节重点:range不含终值;按元素与按索引遍历用途不同。

      函数 / 语法功能与参数调用示例 / 结果
      for item in items:依次取出items中的元素赋给item,对每个元素执行循环体。for c in text:逐字符遍历
      range(stop)生成0至stop−1的整数序列,不包含stop。range(3)对应0、1、2
      range(start,stop)从start开始按步长1取值,不含stop。range(1,4)对应1、2、3
      range(start,stop,step)按step增减;step不能为0,正负方向须与边界一致。range(5,0,-2)对应5、3、1
      range(len(s))生成字符串或列表的全部有效正索引,便于比较对应位置。for i in range(len(s)):
      累加与计数累加对象值用s+=x;统计命中个数用cnt+=1,二者初值通常为0。求积初值通常为1
      最值更新候选指标优于当前记录时,同时更新指标和对应对象。初值须能覆盖有效数据范围

      遍历与条件累加

      total = 0
      for i in range(1, 11):
          if i % 2 == 0:
              total += i
      print(total)  # 30

      4.4 条件循环与边界

      本节重点:while先判断;循环体必须更新状态;阈值题注意严格与非严格关系。

      函数 / 语法功能与参数调用示例 / 结果
      while condition:每轮先判断condition;为真执行循环体,再回到条件判断,为假退出。循环体可能一次也不执行
      循环状态更新循环体须改变相关状态,保证在预期条件下终止。i+=1、余额减少等
      while True:条件恒真,通常配合break在循环体内结束。重复读取猜测值,猜中break
      阈值边界若目标是首次总和>K,则总和≤K时都应继续。while total<=K:
      事件顺序模拟按真实操作顺序更新;某一步已经结束时,不执行之后的动作。青蛙:上爬→判断→未出井才下滑
      逆向递推已知末状态时,逐步应用正向操作的逆操作。猴子吃桃:p=2*(p+1)

      条件循环语法

      i, total = 1, 0
      while i <= 5:
          total += i
          i += 1
      print(total)  # 15

      4.5 嵌套循环

      本节重点:内层每轮重新执行;行内不换行,行结束后再换行。

      函数 / 语法功能与参数调用示例 / 结果
      外层与内层外层每执行一轮,内层重新执行全部迭代;内层计数应重新开始。画图案时外层管行、内层管列
      行内输出内层使用end控制不换行,外层每行结束后单独print。print(x,end=" ")
      三角形行规律i从1到n时,第i行左空格n−i,字符数2i−1。" "*(n-i)+c*(2*i-1)
      菱形行规律上半部递增、下半部递减;中间最宽行只输出一次。共2n−1行
      空心矩形首末行填满;其余行仅首末字符,内部为空格。c+" "*(w-2)+c

      三行乘法表的循环层次

      for i in range(1, 4):
          for j in range(1, i + 1):
              print(f'{j}*{i}={i*j:2}', end=' ')
          print()

      随堂练习

      K4-110 关于下面代码,哪个描述错误?
      i = 1
      while i < 8:
          j = 0
          while j < i:
              print('*', end='')
              j += 1
          print('\n')
          i += 1
      K4-110 作答

      答案与解析

      C(按内外层直接分工) 内层通过j<i打印i个星号,外层改变行号i。原代码print换行符还会产生空白行;“外层控制个数”从间接影响看也有歧义,应按直接分工理解。

      4.6 break与continue

      本节重点:break结束当前循环;continue仅跳过本轮剩余部分。

      函数 / 语法功能与参数调用示例 / 结果
      break立即结束当前所在的最内层循环,随后执行该循环之后的语句。发现因数后无需继续试除
      continue跳过本轮循环体的剩余语句,进入下一轮迭代或条件判断。过滤某类字符时跳过后续操作
      多重循环中的退出break只结束其所在的一层循环,不自动结束全部循环。内层break后外层仍可继续
      与return区分return结束当前函数调用;break/continue针对循环。函数内部可用return返回判断结果
      i%3==0与i/3==0前者判断3的倍数,后者判断除法结果是否为0。对i=1至5,i/3均不为0

      跳过一轮与结束循环

      for i in range(1, 6):
          if i == 2:
              continue
          if i == 4:
              break
          print(i)  # 依次输出1、3

      随堂练习

      K4-131 下面程序输出什么?
      for i in range(1, 6):
          if i % 3 == 0:
              break
          else:
              print(i, end=',')
      K4-131 作答

      答案与解析

      B 当i=3时终止循环,3不会被打印。

      K4-132 下面程序输出什么?
      for i in range(1, 6):
          if i % 4 == 0:
              continue
          else:
              print(i, end=',')
      K4-132 作答

      答案与解析

      C i=4时跳过本轮,i=5仍继续打印。

      K4-133 下面程序输出什么?
      for i in range(1, 6):
          if i / 3 == 0:
              break
          else:
              print(i, end=',')
      K4-133 作答

      答案与解析

      C 这里是除法/,不是取余%;对1至5,i/3都不等于0。

      K4-134 输入fish520,下面代码输出什么?
      w = input()
      for x in w:
          if '0' <= x <= '9':
              continue
          else:
              w.replace(x, '')
      print(w)
      K4-134 作答

      答案与解析

      D replace返回新字符串,未赋值给w时不会改变w。

      K4-135 单次输入哪个数不能触发break?
      while True:
          inp = eval(input('请输入一个数值:'))
          if inp // 3:
              break
      K4-135 作答

      答案与解析

      A 2//3为0,假值;其他选项//3为1。注意程序还会继续读取下一次输入,并非永远无法退出。

      K4-136 下列程序的输出是什么?
      Flower = ['梅花', '风信子', '桃花', '迷迭香', '茉莉花']
      for s in flower:
          if '花' in s:
              print(s, end='')
              continue
      K4-136 作答

      答案与解析

      原代码NameError;统一变量名后为A 原课件第一行是Flower,循环却用flower;Python区分大小写。若将循环改为for s in Flower,则输出A。这里保留原错字用于核对,不默认为代码能运行。

      4.7 循环else与综合应用

      本节重点:正常结束执行else;break退出跳过else;continue不取消else。

      函数 / 语法功能与参数调用示例 / 结果
      for...elsefor正常遍历完时执行else;若被break结束则跳过else。可表示“未发现不符合条件的元素”
      while...elsewhile条件变为假后执行else;被break结束则不执行。循环体一次未执行也可能进入else
      continue与elsecontinue只跳过本轮,不取消循环最终的else。正常遍历完仍执行else
      回文素数组合先试除判断素数,再转成字符串用逆序切片判断回文。s=str(n);s==s[::-1]

      for-else判断素数

      from math import isqrt
      n = int(input())
      if n < 2:
          print('no')
      else:
          for d in range(2, isqrt(n) + 1):
              if n % d == 0:
                  print('no')
                  break
          else:
              print('yes')

      函数、异常处理与题型回顾

      分支判断与边界

      函数 / 语法含义与使用条件
      if condition:条件成立时执行缩进内的语句。
      多个独立的if每条if都会依次判断;前面的语句可以改变后面的条件。
      if / elif / else只执行第一个成立条件的分支。
      A if condition else B条件表达式的结果是A或B。
      low <= x <= high链式比较包含两端;等价于两个比较通过and连接。
      isinstance(value, int)判断类型;1.0是float,不属于int。
      and与or短路and左侧为假时不求右侧;or左侧为真时不求右侧。

      M-4-021 用来判断当前Python语句属于分支语句块的是?

      选择答案

      答案与解析

      C 缩进层次决定语句归属的代码块。

      M-4-025 关于下面代码,描述错误的是?

      PM = int(input())
      if PM > 75:
          print('空气污染,请小心!')
      if PM < 35:
          print('空气良好,适度户外活动!')
      选择答案

      答案与解析

      C 20小于35,第二个独立的if成立。

      M-4-031 下面代码的输出结果是?

      a = 1.0
      if isinstance(a, int):
          print('{} is int'.format(a))
      else:
          print('{} is not int'.format(a))
      选择答案

      答案与解析

      A 1.0的类型是float。

      M-4-032 下面代码的执行结果是?

      a, b = 0, 1
      if (a > 0) or (b / a > 2):
          print('ok')
      else:
          print('error')
      选择答案

      答案与解析

      D or左侧为False,继续求右侧b/a,因a为0而发生异常。

      M-4-035 已知x=2、y=1,哪项语法正确且可执行?

      选择答案

      答案与解析

      D 条件表达式为A if condition else B,两侧都须为合法表达式。

      M-4-036 输入60,下面代码输出什么?

      s = int(input())
      k = '合格' if s >= 60 else '不合格'
      print(s, k)
      选择答案

      答案与解析

      A 60满足s>=60。

      M-4-058 关于分支结构,描述错误的是?

      选择答案

      答案与解析

      A 分支按条件选择路径;重复执行需要循环等控制结构。

      M-4-059 关于分支结构,描述不正确的是?

      选择答案

      答案与解析

      D 紧凑条件表达式使用if和else。

      M-4-060 下列关于链式比较的描述,正确的是?

      选择答案

      答案与解析

      B 链式比较合法;28<25为False,整体为False。

      M-4-017 以下哪项不是Python语言的基本控制结构?

      选择答案

      答案与解析

      B 基本控制结构为顺序、分支和循环。

      M-4-024 输入5,下面代码输出什么?

      n = int(input())
      s = 0
      if n >= 5:
          n -= 1
          s = 4
      if n < 5:
          n -= 1
          s = 3
      print(s)
      选择答案

      答案与解析

      B 第一个if把n改为4,随后第二个独立的if成立,最终s为3。

      循环遍历、索引与计数

      函数 / 语法含义与使用条件
      for value in values依次获得元素本身。
      for i in range(len(values))依次获得0至len(values)−1的索引。
      range(start,stop,step)包含start,不包含stop;step决定每轮增量。
      s[-0]−0仍为0,取首字符;不是末字符。
      s[-i]i从0开始时先取首字符,再向前取末尾字符。
      for ... else正常遍历结束执行else;被break终止时不执行。
      可遍历的对象字符串、列表、元组、集合、字典等;单个整数或复数不可直接遍历。

      M-4-073 for...in...不能直接遍历以下哪种类型?

      选择答案

      答案与解析

      B 复数是单个数值,不是可迭代对象。

      M-4-075 下面代码的输出结果是?

      S = 'Pame'
      for i in range(len(S)):
          print(S[-i], end='')
      选择答案

      答案与解析

      D i依次为0、1、2、3,对应索引0、−1、−2、−3。

      M-4-076 已知ls=["1","2","3"],以下描述错误的是?

      选择答案

      答案与解析

      B 前者i为整数索引0、1、2,后者i为字符串元素1、2、3。

      M-4-087 下面代码的输出结果是?

      sumn = 0
      for i in range(0, 100):
          if i % 2 == 0:
              sumn -= i
          else:
              sumn += i
      print(sumn)
      选择答案

      答案与解析

      D 每对相邻的偶数、奇数贡献1,共50对。

      M-4-088 下面代码输出多少个值?

      x = 15
      y = 2
      if x % 2 != 0:
          y = 1
      for i in range(y, x + 2, 2):
          print(i)
      选择答案

      答案与解析

      C x为奇数,y改为1;range(1,17,2)产生1至15的8个奇数。

      函数定义与调用

      函数 / 语法含义与使用条件
      def name(a, b):创建函数并绑定名称;此时不执行函数体。
      name(x, y)先求实参的值,再进入函数体;形参接收传入值。
      函数名与调用结果name表示函数对象;name(...)表示一次调用的返回值。
      定义顺序执行调用时,被调用函数必须已经完成定义。
      """说明"""函数体第一条字符串是文档字符串;用name.__doc__读取。
      return value返回结果并立即结束当前调用;return后面的本轮代码不再执行。
      无return或仅return返回None;print函数的返回值也是None。
      return a, b返回一个包含a和b的元组;可用x,y接收。

      M-5-008 以下关于Python函数的描述,错误的是?

      选择答案

      答案与解析

      B 调用同一个函数时可以传入不同的实参。

      M-5-013 Python中函数的常见分类不包括哪项?

      选择答案

      答案与解析

      B 参数用于向函数传递数据,不是函数来源的分类。

      M-5-021 函数定义可以不包括以下哪项?

      选择答案

      答案与解析

      D 没有形参时仍需保留函数名后的一对圆括号。

      M-5-024 下面代码的输出结果是?

      t = 10.5
      def above_zero(t):
          return t > 0
      选择答案

      答案与解析

      D 这里只定义函数,未调用函数,也未执行print。

      M-5-036 关于return语句,以下描述正确的是?

      选择答案

      答案与解析

      D 没有显式return时默认返回None;多个return可以出现在不同分支。

      M-5-037 下面代码的输出结果是?

      def fun(x, y):
          x = y
      x = 5
      print(fun(x, 6))
      选择答案

      答案与解析

      D fun中没有return,调用返回None。

      函数复用与组合

      函数 / 语法含义与使用条件
      isprime(n)把素数判断封装为返回布尔值的函数。
      gcd(gcd(a,b),c)逐次把两个数的计算推广到多个数。
      s == s[::-1]逆序切片判断回文;可与素数函数组合。
      if isprime(i) and isprime(n-i):两个加数都满足条件才构成所需方案。
      return与breakreturn结束当前函数;break只结束所在的最内层循环。
      嵌套函数与闭包嵌套定义本身不保证形成闭包;内部函数引用外层函数的变量时才涉及闭包。

      M-5-016 以下关于函数作用的描述,错误的是?

      选择答案

      答案与解析

      B 封装函数不能保证提高执行速度;它主要服务于复用和结构组织。

      M-5-042 下面代码的输出结果是?

      def split(s):
          return s.split('a')
      s = 'an apple a day'
      print(s.split())
      选择答案

      答案与解析

      A s.split()调用字符串的方法,与自定义的全局函数split无关。

      M-5-046 下面代码的输出结果是?

      def hello_world():
          print('ST', end='*')
      def three_hellos():
          for i in range(3):
              hello_world()
      three_hellos()
      选择答案

      答案与解析

      A 循环调用三次,每次输出ST且末尾使用星号。

      辗转相除与公倍数

      函数 / 语法含义与使用条件
      def gcd(m,n):定义接收两个整数的函数。
      while n:n不为0时继续迭代;除数为0时停止。
      m,n=n,m%n先按旧值计算右侧,再同时赋值。
      return abs(m)迭代结束后,m为非负最大公约数。
      while m%n: ...; return n两个输入均为正整数时,可采用这一课堂等价写法。
      result=gcd(result,value)将当前公约数与下一个数合并,推广到多个数。
      m*n//gcd(m,n)两个正整数的最小公倍数。
      from math import gcd导入标准库函数;允许使用等价方法。

      参数与变量作用域

      函数 / 语法含义与使用条件
      def f(a, b=1):a为必填参数,b有默认值;默认值在定义时确定。
      f(2, b=3)位置传入a,按参数名传入b;不能给同一参数重复赋值。
      def f(*args, **kwargs):args收集额外位置实参为元组,kwargs收集额外关键字实参为字典。
      f(*values, **mapping)调用时分别展开位置实参和关键字实参。
      def f(a, /, b, *, c):a仅限位置;c仅限关键字;b两种方式均可。
      局部赋值函数内对名称赋值,通常将该名称视为局部变量。
      global x声明函数中对x的赋值指向模块全局变量。
      nonlocal x重新绑定最近外层函数作用域中已有的变量。
      LEGB查找顺序依次查找局部、外层函数、模块全局、内置名称。
      lambda x: x*x单表达式匿名函数,表达式的值就是返回值。

      递推与递归

      函数 / 语法含义与使用条件
      两项递推前两项为1;a,b=b,a+b;返回第n项时核对循环次数。
      三项递推前三项为1;a,b,c=b,c,a+b+c;第4项是3。
      递归终止条件函数调用自身之前必须设定可到达的基本情形。
      return fib(n-1)+fib(n-2)直接递归会重复计算;本题n到50时优先使用循环。
      多组查询每次调用重新初始化状态;查询个数n与项号k含义不同。

      随机模拟与蒙特卡罗

      函数 / 语法含义与使用条件
      random.seed(d)固定随机序列起点;同样的调用顺序才能生成相同采样点。
      random.random()返回0≤x<1的浮点数。
      random.randint(a,b)返回a至b间的整数,包含a和b。
      value not in ls与ls.append(value)只有未出现的值才追加,直到数量满足要求。
      圆周率先生成x、y,再判断x²+y²≤1,最后计算4*hits/n。
      正弦积分先生成x=3.14*random()、y=random(),判断y≤sin(x),最后计算3.14*hits/n。
      f"{value:.4f}"两道蒙特卡罗题统一输出四位小数。

      异常处理

      函数 / 语法含义与使用条件
      try:执行可能产生运行异常的语句。
      except ValueError:处理例如int("a")等值转换失败。
      except ZeroDivisionError:处理除数为0的运算错误。
      except (TypeError, ValueError):同一个处理分支接收多种异常。
      多个except先写较具体的异常类型,再写较一般的异常类型。
      else:try语句块未发生异常时执行;不属于if的else。
      finally:执行离开try时的清理操作;通常无论是否发生异常都会运行。
      raise ValueError("说明")主动抛出异常;由匹配的except处理。
      continue与次数输入错误也占次数时,应让外层循环统一计数。
      type(m) is int and m>0确认输入为正整数,避免把浮点数或布尔值当作有效整数。