# 编程题涉及范围

在上机考试中，编程题的占比是 80%，也就是占 80 分。一题十分，一共八道。

编程题涉及的主要范围是基础知识、变量、选择、循环、序列（列表/元组/字典/集合）、字符串、正则表达式（有时不考）、函数这几个部分。

在 2023 年《转专业工作方案》中所提供的参考教材，赵雷、朱晓旭主编的《Python 编程导论——计算思维实现》中，这些内容分为 8 个章节，分别是计算思维和 Python 概述、基础知识、列表、选择、循环、元组/字典/集合、函数、字符串和正则表达式。后面的部分编程题则不会涉及。

下面的给出本参考教材的目录作为参考。

\**注：目录中标注星号的内容不考*

![第一页](https://pica.zhimg.com/80/v2-ccd6290db682931d5b3315533c5e7872_720w.jpeg)

![第二页](https://picx.zhimg.com/80/v2-fa72fa2f37978bb5a9658ef9166863e8_720w.jpeg)

![第三页](https://pica.zhimg.com/80/v2-bbcecf3377a1fba9486a6b12bcaac185_720w.jpeg)

![第四页](https://picx.zhimg.com/80/v2-b4eba25791e01af818481e6cf010b19f_720w.jpeg)

有些细节我都直接标上边了。顺便打星号的东西只是按照经验不考，不做保证。看不看随你。

然后强调一下，**任何涉及 Python 扩展库甚至标准库的内容基本都不会考到**。也就是说，**通常情况下代码中不需要你写“import”语句**。给的模板代码开头就给你 import 好了 math 和 re，不需要额外引入。也就是说一般只有 math 库和 re 库是可能会考到的。关于 re 库，即正则表达式标准库，编程题实际上最多只会出一道这样的题，且有很大概率不考（虽然每次模板代码中都会 import 进来）。

另外，虽然不会明着考，但一些数据结构的知识还是建议自学一下（这书上肯定没有，自己找资料学，或是刷 LeetCode 边刷边看题解学）。因为考试中一些难题可能涉及数据结构，如堆、树等（概率不会很大，通常倾向于考察动态规划与搜索），这些库一般是可以在代码里通过 import 导入的，例如 heapq 库中的堆结构，你可以直接导入 Python 内置的这些数据结构以简化操作。

> #### 关于正则表达式
>
> 在接触面向对象之前，正则表达式可能是第一个真正意义上的困惑点。毕竟正则表达式本身是不易于人类理解的，未接触过相关语法的人是无法从正则表达式里看出任何规律的。
>
> 尽管如此，正则表达式仍然是十分重要的。这不仅体现在它可能作为编程题的压轴题出现，也体现在其在实际项目中的大规模应用。可以说，凡是会涉及字符串匹配的项目，几乎都需要使用到正则表达式。
>
> 不过如果只是为了通过考试，正则表达式**不一定**要认真去学。尽管正则表达式的实际实现非常复杂，但简单的正则表达是非常容易被简单的循环与判断替代的，而考场上不可能出现不得不使用非常复杂的正则表达式才能完成的题目，因此考场实际遇到的**任何**似乎需要用正则表达式解决的题目都可以用简单的循环匹配代替，只是相对工程量要大得多。但考虑到选择题是题库抽题，有可能会抽到正则表达式有关的题目，稍微看下还是有必要的。

编程题对序列与字符串的内容涉及相当多，递归、矩阵、向量（这两个实际上就是用 List 模拟的）和字符串操作占了大部分，因此序列和字符串尤其需要好好学。

此外，尽管像 math、time 之类的标准库考的概率不大，因为考察的是通用计算思维而非对某一特定语言的使用，而且类似 random、time 这类标准库也很难出题考察，但仍然建议稍微有一些了解，以防万一真的出一道相关的题目。毕竟考试本来就没有严格限定范围，这方面的内容不会考这个结论只是根据经验得出的，并不绝对。

不过由于**机试时是可以带书进入考场的**，因此**完全不建议刻意去背标准库的使用**，建议只稍微了解一些常用函数，考试真遇到了可以翻书，时间也很充裕，完全足够。甚至考察最多的正则表达式标准库的使用，也可以现场查书，不需要每个字都记下来。

除某些情况下可能需要导入内置常规数据结构（栈、队列、堆、树等）外，不建议使用标准库，因为许多题目使用标准库过于简单地解决了问题是很可能扣分的，而且在某些情况下不了解函数的具体实现而贸然使用很可能造成答案错误。例如，2020 年的卷子中有一道小数转分数的题，题目本身不是很难，但有不少同学图方便而使用了 decimal 库，由于其中的函数存在精度丢失问题，白白丢了不少分。在 2021 年的卷子中，有一道全排列的题目可以用 itertool 库中内置函数直接一行解决，老师也不是傻子，代码也会稍微看一下，这种解法肯定是不会给分的。此外一般来说也不必导入标准库，即使难题也通常可以用动态规划、搜索等方法得到满分，不一定要使用涉及数据结构的解法。

不过，并没有规定一定不能导入内置标准库中的类或函数，适当使用（如导入堆结构）当然是可以的，只是最好掌握一个度。

目前看来，**机试主要的趋势是考察思维而非对 Python 语言本身的了解**，因此多半不会出一定需要使用非常规语句（如标准库中的一些函数，或者 Python 的一些特殊用法）相关的题目。
