# 计算机概率课程复习（开卷资料）

Canonical: https://www.mirstar.net/2026/01/15/python-preview/
Author: onlymatt
Published: 2026-01-15T01:32:25.000Z
Updated: 2026-10-21T11:21:55.785Z
Categories: Programming, Python
Tags: Course Review

# 📘《2025年编程模块考试速查手册》

[TOC]



## 字符串操作

### 1. 索引与切片
```python
s = "Python"
s[0]    # 'P' (索引从0开始)
s[-1]   # 'n' (负索引从-1开始)
s[0:3]  # 'Pyt' (切片: [起始:结束:步长])
s[:3]   # 'Pyt' (起始默认为0)
s[3:]   # 'hon' (结束默认为末尾)
s[::2]  # 'Pto' (步长为2)
s[::-1] # 'nohtyP' (反转字符串)
```

### 2. 常用方法
```python
s.split()          # 按空白字符分割为列表
s.split(',')       # 按逗号分割
s.strip()          # 去除两端空白字符
s.strip('!')       # 去除两端指定字符
s.replace('a','b') # 替换字符/子串
s.find('th')       # 查找子串，返回索引(-1为未找到)
s.index('th')      # 同find，但未找到时报错
s.count('n')       # 统计子串出现次数
s.upper()/s.lower()# 转大写/小写
s.isdigit()        # 是否全数字
s.isalpha()        # 是否全字母
s.startswith('Py') # 是否以指定字符串开头
s.endswith('on')   # 是否以指定字符串结尾
','.join(list)     # 列表连接为字符串
```

### 3. 运算符
```python
s1 + s2     # 字符串拼接
s * 3       # 字符串重复
'a' in s    # 判断子串是否存在
```

## 文件操作

### 1. 打开与关闭
```python
# 打开文件
f = open('file.txt', 'r', encoding='utf-8')  # 读取文本文件
# 模式: 'r'读 'w'写(覆盖) 'a'追加 'b'二进制 't'文本(默认)

# 关闭文件
f.close()

# 使用with自动关闭(推荐)
with open('file.txt', 'r') as f:
    content = f.read()
```

### 2. 读取文件
```python
# 读取全部内容
content = f.read()

# 读取一行
line = f.readline()

# 读取所有行(返回列表)
lines = f.readlines()

# 逐行读取(推荐)
for line in f:
    print(line.strip())
```

### 3. 写入文件
```python
# 写入字符串
f.write('Hello\n')

# 写入多行
lines = ['Line1\n', 'Line2\n']
f.writelines(lines)

# 注意: 写入后可能需要刷新缓冲区
f.flush()
```

### 4. 文件指针
```python
f.tell()     # 返回当前指针位置
f.seek(0)    # 移动指针到文件开头
f.seek(5)    # 移动指针到第5个字节
```

### 5. 二进制文件
```python
# 读取二进制文件
with open('file.bin', 'rb') as f:
    data = f.read()

# 写入二进制文件
with open('file.bin', 'wb') as f:
    f.write(b'\x00\x01\x02')
```

### 6. CSV文件处理
```python
import csv
# 读取CSV
with open('data.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

# 写入CSV
with open('output.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['Name', 'Age'])
    writer.writerow(['Alice', 25])
```

## 常用编码
```
utf-8     # 最常用，支持多语言
gbk       # 中文编码
ascii     # 英文字符
latin-1   # 西欧语言
```

## 注意事项
1. 文件操作后务必关闭或使用with语句
2. 注意文件路径（相对路径/绝对路径）
3. 处理中文文件时指定encoding='utf-8'
4. 大文件建议逐行读取，避免内存不足

---

## 运算优先级

1. **`()`** 括号（最高）
2. **`**`** 幂运算
3. **`+x` `-x` `~x` `not`** 一元运算
4. **`*` `/` `//` `%`** 乘除取余
5. **`+` `-`** 加减
6. **`<<` `>>`** 移位
7. **`&`** 按位与
8. **`^`** 按位异或
9. **`|`** 按位或
10. **`<` `<=` `>` `>=` `==` `!=` `is` `in`** 比较/成员
11. **`and`** 逻辑与
12. **`or`** 逻辑或
13. **`=` `+=` `-=`** 赋值（最低）
**口决：括号 > 幂 > 正负 > 乘除 > 加减 > 移位 > 位运算 > 比较 > 逻辑 > 条件 > 赋值**
## 一、组合数据类型详解

### 1. 列表（List）核心操作

**创建与基本操作**
```python
# 创建
lst = [1, 2, 3]
lst2 = list(range(10))
lst3 = [i*2 for i in range(5)]  # 列表推导式

# 访问与修改
lst[0]          # 访问第一个元素
lst[-1]         # 访问最后一个元素
lst[1:4]        # 切片访问
lst[1:4] = [10, 20]  # 切片修改
```

**增删改查**
```python
# 增加元素
lst.append(4)           # 末尾添加单个
lst.extend([5,6])       # 合并列表
lst.insert(2, 99)       # 在索引2处插入99

# 删除元素
lst.remove(99)          # 删除第一个匹配值
del lst[0]              # 删除索引0的元素
value = lst.pop()       # 删除并返回最后一个元素
value = lst.pop(1)      # 删除并返回索引1的元素
lst.clear()             # 清空列表

# 查找与统计
lst.index(2)            # 返回值的索引（无则报错）
lst.count(2)            # 统计值出现次数
2 in lst                # 判断是否存在
```

**排序与遍历**
```python
# 排序
lst.sort()                      # 原地排序
lst.sort(reverse=True)          # 降序排序
sorted_lst = sorted(lst)        # 返回新列表
lst.sort(key=lambda x: x%3)     # 按自定义规则排序

# 遍历
for i in range(len(lst)):       # 方式1：索引遍历
    print(i, lst[i])

for item in lst:                # 方式2：直接遍历
    print(item)

for i, item in enumerate(lst):  # 方式3：枚举遍历
    print(i, item)
```

### 2. 字典（Dict）核心操作

**创建与基本操作**
```python
# 创建
d = {}                          # 空字典
d = dict()                      # 空字典
d = {'a': 1, 'b': 2}
d = dict([('a',1), ('b',2)])    # 元组列表转换

# 访问与修改
d['a'] = 10                     # 修改或添加
value = d.get('a', 0)           # 安全访问，不存在返回0
value = d.setdefault('c', 100)  # 不存在则设置默认值并返回
```

**增删改查**
```python
# 增加/修改
d.update({'c':3, 'd':4})        # 批量更新
d['e'] = 5                      # 单个添加

# 删除
del d['a']                      # 删除键'a'
value = d.pop('b')              # 删除并返回值
key, value = d.popitem()        # 删除最后一个键值对
d.clear()                       # 清空字典

# 查找与遍历
'a' in d                        # 判断键是否存在
len(d)                          # 键值对数量

# 遍历
for key in d:                   # 遍历键
    print(key, d[key])

for key in d.keys():            # 明确遍历键
    print(key)

for value in d.values():        # 遍历值
    print(value)

for key, value in d.items():    # 遍历键值对
    print(key, value)
```

**字典进阶操作**
```python
# 字典推导式
{x: x**2 for x in range(5) if x%2==0}

# 排序
sorted_by_key = dict(sorted(d.items()))                # 按键排序
sorted_by_value = dict(sorted(d.items(), key=lambda x: x[1]))  # 按值排序
sorted_by_value_desc = dict(sorted(d.items(), key=lambda x: x[1], reverse=True))  # 按值降序
```

### 3. 元组与集合

**元组（Tuple）不可变序列**
```python
t = (1, 2, 3)
t = 1, 2, 3                    # 不加括号也是元组
len(t), t[0], t[1:3]           # 长度、索引、切片
a, b, c = t                    # 解包
t.index(2), t.count(2)         # 查找、计数
```

**集合（Set）不重复元素**
```python
s = {1, 2, 3}
s = set([1, 2, 2, 3])          # 列表转集合，自动去重
s.add(4)                       # 添加元素
s.remove(2)                    # 删除元素（不存在则报错）
s.discard(99)                  # 安全删除（不存在不报错）
s.pop()                        # 随机删除一个元素

# 集合运算
s1 | s2                        # 并集
s1 & s2                        # 交集
s1 - s2                        # 差集
s1 ^ s2                        # 对称差集
s1 <= s2                       # 子集判断
```

---

## 二、Pandas数据处理详解

### 1. 数据结构创建

**Series创建**
```python
import pandas as pd

# 从列表创建
s = pd.Series([1, 3, 5, 7], index=['a', 'b', 'c', 'd'])

# 从字典创建
s = pd.Series({'a': 1, 'b': 3, 'c': 5})

# 从标量创建（重复值）
s = pd.Series(5, index=['a', 'b', 'c'])
```

**DataFrame创建**
```python
# 从字典创建（最常用）
df = pd.DataFrame({
    '姓名': ['张三', '李四', '王五'],
    '年龄': [20, 25, 30],
    '成绩': [85, 90, 88]
})

# 从列表创建
df = pd.DataFrame(
    [['张三', 20, 85], ['李四', 25, 90], ['王五', 30, 88]],
    columns=['姓名', '年龄', '成绩']
)

# 从Series创建
df = pd.DataFrame({'列1': s1, '列2': s2})
```

### 2. 数据查看与基本信息

```python
df.head()                    # 前5行
df.head(10)                  # 前10行
df.tail()                    # 后5行
df.shape                     # (行数, 列数)
df.info()                    # 数据类型信息
df.describe()                # 数值列统计摘要
df.columns                   # 列名
df.index                     # 索引
df.dtypes                    # 每列数据类型
df.isnull().sum()            # 每列缺失值数量
```

### 3. 数据读取与写入

```python
# 读取
df = pd.read_csv('data.csv')                 # 读取CSV
df = pd.read_excel('data.xlsx')              # 读取Excel
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')  # 指定工作表

# 写入
df.to_csv('output.csv', index=False)         # 写入CSV（不保存索引）
df.to_excel('output.xlsx', index=False)      # 写入Excel
df.to_excel('output.xlsx', sheet_name='结果')  # 指定工作表名
```

### 4. 数据选择与过滤

**列选择**
```python
df['姓名']                    # 单列（返回Series）
df[['姓名', '年龄']]          # 多列（返回DataFrame）
```

**行选择**
```python
df.iloc[0]                   # 按位置选择第0行
df.iloc[0:5]                 # 按位置选择0-4行
df.iloc[[0,2,4]]             # 按位置选择多行

df.loc[0]                    # 按索引选择第0行
df.loc[0:5]                  # 按索引选择0-5行
df.loc[df['年龄'] > 25]      # 按条件选择
```

**条件过滤**
```python
# 单条件
df[df['成绩'] > 85]

# 多条件（注意括号）
df[(df['成绩'] > 85) & (df['年龄'] < 30)]   # 且
df[(df['成绩'] > 85) | (df['年龄'] < 25)]   # 或

# 模糊匹配
df[df['姓名'].str.contains('张')]          # 包含"张"
df[df['姓名'].str.startswith('张')]        # 以"张"开头
```

### 5. 数据清洗与处理

```python
# 处理缺失值
df.dropna()                  # 删除包含NaN的行
df.fillna(0)                 # 填充NaN为0
df.fillna(method='ffill')    # 向前填充
df.fillna(method='bfill')    # 向后填充
df.fillna(df.mean())         # 用列均值填充

# 重复值处理
df.drop_duplicates()         # 删除重复行
df.drop_duplicates(subset=['姓名'])  # 基于指定列去重

# 类型转换
df['年龄'] = df['年龄'].astype(float)   # 转换为浮点型
```

### 6. 数据排序与分组

```python
# 排序
df.sort_values('成绩')                      # 按成绩升序
df.sort_values('成绩', ascending=False)     # 按成绩降序
df.sort_values(['年龄', '成绩'])             # 多列排序

# 分组统计
grouped = df.groupby('班级')                # 按班级分组
grouped['成绩'].mean()                      # 每班平均成绩
grouped['成绩'].agg(['mean', 'max', 'min']) # 多统计指标
grouped.agg({'成绩':'mean', '年龄':'max'})  # 不同列不同统计

# 透视表
pd.pivot_table(df, values='成绩', index='班级', columns='性别', aggfunc='mean')
```

### 7. 数据合并与重塑

```python
# 合并
pd.concat([df1, df2])                      # 上下合并
pd.concat([df1, df2], axis=1)              # 左右合并

# 连接（类似SQL JOIN）
pd.merge(df1, df2, on='学号')              # 内连接
pd.merge(df1, df2, on='学号', how='left')  # 左连接

# 数据重塑（宽表转长表）
df_melted = df.melt(id_vars=['姓名'], value_vars=['语文', '数学'])
```

---

## 三、Matplotlib可视化详解

### 1. 图形基本设置

```python
import matplotlib.pyplot as plt
import numpy as np

# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))  # 10x6英寸

# 或使用传统方式
plt.figure(figsize=(10, 6))

# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文字体
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题

# 添加标题和标签
plt.title('图表标题', fontsize=16)
plt.xlabel('X轴标签')
plt.ylabel('Y轴标签')

# 设置坐标轴范围
plt.xlim(0, 10)
plt.ylim(0, 100)

# 设置刻度
plt.xticks([0, 2, 4, 6, 8, 10])
plt.xticks(rotation=45)                     # X轴标签旋转45度

# 添加网格
plt.grid(True, linestyle='--', alpha=0.5)

# 添加图例
plt.legend(['数据1', '数据2'], loc='upper left')

# 保存图形
plt.savefig('chart.png', dpi=300, bbox_inches='tight')

# 显示图形
plt.show()
```

### 2. 折线图（重点）

```python
# 准备数据
x = np.arange(0, 10, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)

# 绘制多条折线
plt.plot(x, y1, label='sin(x)', color='red', linestyle='-', linewidth=2, marker='o', markersize=4)
plt.plot(x, y2, label='cos(x)', color='blue', linestyle='--', linewidth=1, marker='s', markersize=4)

# 或使用简写格式
plt.plot(x, y1, 'r-o', label='sin(x)')    # r:红色, -:实线, o:圆点标记
plt.plot(x, y2, 'b--s', label='cos(x)')   # b:蓝色, --:虚线, s:方形标记

# 标记特殊点
plt.scatter(x[50], y1[50], color='green', s=100, zorder=5)  # 散点标记
plt.annotate('峰值', xy=(x[50], y1[50]), xytext=(x[50]+1, y1[50]+0.2),
             arrowprops=dict(arrowstyle='->'))  # 添加标注

# 填充区域
plt.fill_between(x, y1, y2, where=(y1>y2), color='green', alpha=0.3)
```

### 3. 条形图（重点）

```python
# 准备数据
labels = ['A', 'B', 'C', 'D']
values = [25, 40, 30, 45]

# 垂直条形图
plt.bar(labels, values, color=['red', 'green', 'blue', 'orange'], alpha=0.7, width=0.5)

# 水平条形图
plt.barh(labels, values, color='skyblue', alpha=0.7, height=0.5)

# 分组条形图
x = np.arange(len(labels))
width = 0.35
plt.bar(x - width/2, values1, width, label='第一组')
plt.bar(x + width/2, values2, width, label='第二组')
plt.xticks(x, labels)

# 堆叠条形图
plt.bar(labels, values1, label='部分1')
plt.bar(labels, values2, bottom=values1, label='部分2')

# 在条形上添加数值
for i, v in enumerate(values):
    plt.text(i, v + 1, str(v), ha='center')
```

### 4. 饼图（重点）

```python
# 准备数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]
colors = ['red', 'green', 'blue', 'orange']
explode = (0, 0.1, 0, 0)  # 突出显示第二块

# 绘制饼图
plt.pie(sizes, labels=labels, colors=colors, explode=explode,
        autopct='%1.1f%%', shadow=True, startangle=90)

# autopct格式选项
# %1.1f%% 表示1位整数和1位小数的百分比
# %d%% 表示整数百分比

# 使饼图为正圆形
plt.axis('equal')

# 添加标题
plt.title('饼图示例')
```

### 5. 子图绘制

```python
# 创建2x2的子图网格
fig, axes = plt.subplots(2, 2, figsize=(12, 8))

# 在第0行第0列绘制
axes[0, 0].plot(x, y1)
axes[0, 0].set_title('子图1')

# 在第0行第1列绘制
axes[0, 1].bar(labels, values)
axes[0, 1].set_title('子图2')

# 在第1行第0列绘制
axes[1, 0].scatter(x, y2)
axes[1, 0].set_title('子图3')

# 在第1行第1列绘制
axes[1, 1].pie(sizes, labels=labels)
axes[1, 1].set_title('子图4')

# 调整子图间距
plt.tight_layout()
```

### 6. 常用样式和颜色

```python
# 线型
'-'   # 实线
'--'  # 虚线
':'   # 点线
'-.'  # 点划线

# 颜色
'b'  # 蓝色
'g'  # 绿色
'r'  # 红色
'c'  # 青色
'm'  # 品红
'y'  # 黄色
'k'  # 黑色
'w'  # 白色

# 标记点
'.'  # 点
','  # 像素
'o'  # 圆
's'  # 方形
'^'  # 上三角
'v'  # 下三角
'*'  # 星形
```

### 7. 多Y轴图形

```python
fig, ax1 = plt.subplots()

# 第一个Y轴
ax1.plot(x, y1, 'r-', label='数据1')
ax1.set_xlabel('X轴')
ax1.set_ylabel('Y1轴', color='red')
ax1.tick_params(axis='y', labelcolor='red')

# 第二个Y轴
ax2 = ax1.twinx()
ax2.plot(x, y2, 'b--', label='数据2')
ax2.set_ylabel('Y2轴', color='blue')
ax2.tick_params(axis='y', labelcolor='blue')

# 合并图例
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper left')
```

---

## 📌 考试重点提示

1. **组合数据类型**：重点掌握列表推导式、字典的遍历与排序、集合的去重操作
2. **Pandas**：重点掌握数据筛选、分组统计、合并与透视表
3. **Matplotlib**：重点掌握折线图、条形图、饼图的绘制与样式设置
4. **代码规范**：注意缩进、注释、变量命名规范
5. **调试技巧**：使用`print()`输出中间结果，使用`type()`检查数据类型

---
