├── README.md ├── 公共基础知识.md ├── 单选题常见错题集.md └── 基本语法.md /README.md: -------------------------------------------------------------------------------- 1 | # NCRE_python_study_notes 2 | 全国计算机等级考试二级python的学习笔记(适用2020年) 3 | 4 | 下面的推荐均是亲自用过的。 5 | 6 | --- 7 | 8 | ## 教材推荐: 9 | 《全国计算机等级考试二级教材-python语言程序设计》(2020年版) 10 | 《全国计算机等级考试二级教材-公共基础》(2020年版) 11 | 12 | ## 习题推荐: 13 | 《高教版 Python语言程序设计冲刺试卷》(第2版) 14 | python123 习题库 https://python123.io/index/ncre 15 | 16 | ## 辅导视频推荐 17 | 中国大学MOOC《Python语言程序设计》嵩天、黄天羽、礼欣 18 | 19 | ## 大纲涉及重点内容 20 | 1. 基本语法 21 | 2. 标准库:turtle 库、random库 、time 库 22 | 3. 第三方库:PyInstaller、jiaba、wordcloud 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /公共基础知识.md: -------------------------------------------------------------------------------- 1 | # 公共基础知识 2 | 主要参考: 3 | 4 | 全国计算机等级考试二级教程-公共基础知识(2020年版) 5 | 6 | 全国计算机等级考试二级公共基础知识考试大纲(2020年版) 7 | 8 | ## 考试大纲基本要求(2020) 9 | 1. 掌握计算机系统的基本概念,理解计算机硬件系统和计算机操作系统。 10 | 2. 掌握算法的基本概念。 11 | 3. 掌握基本数据结构及其操作。 12 | 4. 掌握基本排序和查找算法。 13 | 5. 掌握逐步求精的结构化程序设计方法。 14 | 6. 掌握软件工程的基本方法,具有初步应用相关技术进行软件开发的能力。 15 | 7. 掌握数据库的基本知识,了解关系数据库的设计。 16 | 17 | ## 考点概览 18 | ### 一、计算机系统 19 | 20 | #### 1.1 掌握计算机系统的结构。 21 | 22 | #### 1.2 掌握计算机硬件系统结构,包括 CPU 的功能和组成,存储器分层体系,总线和外部设备。 23 | 24 | #### 1.3 掌握操作系统的基本组成,包括进程管理、内存管理、目录和文件系统、I / O 设备管理。 25 | 26 | ### 二、基本数据结构与算法 27 | 28 | #### 2.1 算法 29 | **算法的基本概念;算法复杂度的概念和意义(时间复杂度与空间复杂度)。** 30 | 31 | ##### 2.1.1 算法的基本概念 32 | **算法**:解题方案的准确而完整的描述 33 | **算法的基本特征**:1.可行性;2.确定性;3.有穷性;4.拥有足够的情报 34 | 35 | ##### 2.1.2 算法复杂度的概念和意义(时间复杂度与空间复杂度) 36 | **算法的时间复杂度**:执行算法所需的计算工作量 37 | **算法的空间复杂度**:执行算法所需的内存空间 38 | 39 | #### 2.2 数据结构 40 | **数据结构的定义;数据的逻辑结构与存储结构;数据结构的图形表示;线性结构与非线性结构的概念。** 41 | 42 | ##### 2.2.1 数据结构的定义 43 | **数据结构**:反映数据元素之间关系的数据元素集合的表示; 44 | 45 | ##### 2.2.2 数据的逻辑结构与存储结构 46 | **数据的逻辑机构**:反映数据元素之间逻辑关系的数据结构; 47 | **数据的存储结构**:数据的逻辑结构在计算机存储空间中的存放形式; 48 | 49 | ##### 2.2.3 线性结构与非线性结构的概念 50 | **线性结构(线性表)**: 51 | 一个非空的数据结构满足下列两个条件: 52 | 1.有且只有一个根结点; 53 | 2.每一个结点最多只有一个前件,也最多只有一个后件; 54 | **非线性结构**:不是线性结构,则为非线性结构 55 | 56 | #### 2.3 线性表 57 | **线性表的定义;线性表的顺序存储结构及其插入与删除运算。** 58 | 59 | ##### 2.3.1 线性表的定义 60 | 数据元素可以是简单向,也可以由若干数据组成,即复杂线性表。 61 | 在复杂线性表中,由若干项数据元素组成的数据元素称为记录(record),而由多个记录构成的线性表又称为文件(file)。 62 | 线性表中,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。 63 | 64 | ##### 2.3.2 线性表的顺序存储结构 65 | **线性表的顺序存储结构(顺序分配)两个基本特点**: 66 | (1)线性表中所有元素的所占的存储空间是连续的; 67 | (2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。 68 | 线性表的顺序存储结构适用于小线性表,但对于元素经常需要变动的大线性表不适用,因为插入与删除操作效率较低。 69 | 70 | #### 2.4栈和队列 71 | **栈和队列的定义;栈和队列的顺序存储结构及其基本运算。** 72 | 73 | ##### 2.4.1 栈 74 | **栈** (中文zhan四声,英文stack):限定在一端进行插入与删除的线性表。 75 | **栈顶**:允许插入与删除的一端,指针top来指示栈顶; 76 | **栈底**:不允许插入与删除的一端,bottom指向栈底; 77 | 又称LIFO(先进后出表)或FILO(后进先出表),栈具有记忆作用。 78 | **栈的基本运算** 79 | **入栈运算**:在栈顶位置中插入一个新元素; 80 | **退栈运算**:取出栈顶元素并赋给一个指定变量; 81 | **读栈顶元素**:将栈顶元素赋给一个指定变量。 82 | 83 | ##### 2.4.2 队列 84 | **队列(Queue)**:允许在一端进行插入、而在另一端进行删除的线性表。 85 | **队尾**:允许插入的一端,由尾指针(rear)指向队尾元素 86 | **队头(排头)**:允许删除的一端,由排头指针(front)指向排头元素的前一个位置 87 | 又称“先进先出”(first in first out ,FIFO)或“后进后出”(last in last out , LILO)的线性表 88 | **循环队列**:将队列存储位置的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。 89 | **入队运算(enqueue)**:在循环队列的队尾加入一个新元素 90 | **退队运算(dequeue)**:在循环队列的排头位置退出一个元素并赋值给指定的变量 91 | s = 0 表示队列空 92 | s = 1 表示队列非空 93 | 判断队列空与队列满的条件: 94 | 队列空: s=0 95 | 队列满: s=1 且 front = rear 96 | 97 | #### 2.5 线性单链表、双向链表与循环链表的结构及其基本运算。 98 | 99 | **存储结点(结点)**:数据结构中每一个数据结点对应的存储单元 100 | **链式存储结构**:在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的) 101 | 每个存储单元由数据域和指针域两部分组成: 102 | **数据域**:用于存放数据的元素值 103 | **指针域**:用于存放指针 104 | **指针**:用于指向该结点的前一个或后一个结点(即前件或后件) 105 | 在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。 106 | 链式存储方式即可用于表示线性结构,也可用于表示非线性结构。 107 | 108 | **线性链表**:线性表的链式存储结构 109 | 头指针:HARD,指向线性链表中第一个数据元素的结点; 110 | 线性链表的最后一个结点的指针域为空(用NULL或0表示),表示链表终止。 111 | **线性单链表**:每一个结点只有一个指针域,由这个指针只能找到后结点,但不能找到前件结点。 112 | **双向链表**:每个结点有两个指针,一个左指针(Llink),用以指向其前件结点;另一个成为右指针(Rlink),用以指向其后件结点。 113 | 114 | **带链的栈**: 115 | **可利用栈**:实际应用中可以用来收集计算机存储空间中所有空闲的存储结点。 116 | **带链栈的基本操作** 117 | 栈的初始化:即建立一个空栈 118 | 入栈运算 119 | 退栈运算 120 | 读栈顶元素 121 | 122 | **带链的队列** 123 | 124 | 125 | **循环链表**统一空表和非空表的运算 126 | **特点**: 127 | 1.增加表头结点,指针域指向第一元素结点; 128 | 2.最后一个结点指针域不是空,而是指向表头结点。 129 | **优势**: 130 | 1.只要指出任意一个结点的位置,就可以从它出发的访问到表中其他所有结点 131 | 2.至少有一个结点存在,从而使空表与非空表运算统一。 132 | 133 | #### 2.6 树的基本概念;二叉树的定义及其存储结构;二叉树的前序、中序和后序遍历。 134 | 135 | **树**: 136 | **父结点**:每个结点只有一个前件; 137 | **根结点(树的根)**:没有前件的结点; 138 | **子结点**:结点的多个后件; 139 | **叶子结点**:没有后件的结点; 140 | **度**:一个结点所拥有的后件个数; 141 | **树的度**:所有结点中最大的度; 142 | **树的深度**:树的最大层次; 143 | **子树**以某结点为根构成的树; 144 | **表达式树**:表示表达式的树; 145 | 可以用树结构表示算术表达式 146 | 147 | **二叉树的特点**: 148 | 1.非空二叉树只有一个跟结点; 149 | 2.每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。 150 | 151 | **二叉树的基本性质** 152 | 性质1:在二叉树的第k层上,最多有2^(k-1)(k>=1)个结点; 153 | 性质2:深度为m的二叉树最多有2^m-1个结点; 154 | 性质3:任意一颗二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个; 155 | 性质4:具有n个结点的二叉树,其深度至少为[log2 n]+1,其中[log2 n]表示[log2 n]以2为底的n的整数部分。 156 | 157 | **满二叉树**:除最后一层外,每一层上的所有结点都有两个子结点。 158 | **完全二叉树**:除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点; 159 | 160 | 性质5:具有n个结点的完全二叉树的深度为[log2 n]+1 161 | 性质6:设完全二叉树共有n个结点。如果从根结点开始,按层序(每一层从左到右)用自然数1,2,...,n结点进行编号,则对于编号为k(k=1,2,3,...,n)的结点有以下结论: 162 | (1)若k=1,则1.若k=1,则该结点为根结点,它没有父结点;若k>1,则该结点的父结点编号为INT(k/2) 163 | (2)若2k<=n,则编号为k的结点的左子结点编号为2k;否则该结点无右子结点。 164 | (3)若2k+1以下选项中描述正确的是‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 257 | A、软件工程主要解决软件产品的生产率问题 258 | B、软件工程的主要思想是强调软件开发过程中需要应用工程化原则 259 | C、软件工程只是解决软件项目的管理问题 260 | D、软件工程只是解决软件开发中的技术问题 261 | 正确答案 B 262 | 263 | ##### 4.1.2 软件生命周期概念 264 | 265 | 软件生命周期 266 | 定义阶段 267 | 开发阶段 268 | 维护阶段 269 | 270 | ##### 4.1.3 软件工具与软件开发环境 271 | 272 | 273 | 274 | #### 4.2 结构化分析方法,数据流图,数据字典,软件需求规格说明书。 275 | 276 | ##### 4.2.1 结构化分析方法 277 | 实质是着眼于数据流,自顶向下,逐层分解,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型。 278 | 279 | 关于结构化程序设计方法原则的描述,以下选项中错误的是‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 280 | A、模块化 281 | B、多态继承 282 | C、逐步求精 283 | D、自顶向下 284 | 正确答案 B 285 | 286 | 287 | > 例题:为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,这种图的名称是‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 288 | > A、PAD图 289 | > B、结构图 290 | > C、数据流图 291 | > D、N-S图 292 | > 293 | > 正确答案 D 294 | 295 | ##### 4.2.4 软件需求规格说明书(SRS,Software Requirement Specification) 296 | 297 | 是需求分析阶段得出的最主要的文档。 298 | **软件需求规格说明书的作用**: 299 | 300 | 1. 便于用户、开发人员进行理解 301 | 2. 反映出用户问题的结构,可以作为软件开发工作的基础和依据。 302 | 3. 作为确认测试和验收测试的依据 303 | 4. 为成本估算和编制计划进度提供基础 304 | 5. 软件不断改进的基础 305 | 306 | >例题:软件需求规格说明书的作用不包括‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 307 | >A、便于用户、开发人员进行理解和交流 308 | >B、作为确认测试和验收的依据 309 | >C、反映出用户问题的结构,可以作为软件开发工作的基础和依据 310 | >D、只便于开发人员进行需求分析 311 | > 312 | >正确答案 D 313 | 314 | **软件需求规格说明书的特点**:有正确性、无歧义性、完整性、可验证性、一致性、可理解性、可修改性和可追踪性。其中最重要的是无歧义性。 315 | 316 | #### 4.3 结构化设计方法,总体设计与详细设计。 317 | 318 | 软件设计基本原理: 319 | 320 | 1. 抽象 321 | 322 | 2. 逐步求精和模块化 323 | 324 | 3. 信息隐蔽和局部化 325 | 326 | 信息隐蔽是指所设计的模块是的 327 | 328 | 4. 模块独立性 329 | 330 | 331 | 332 | 333 | 334 | 335 | 从技术观点上看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。 336 | (1)结构设计定义软件系统各主要部件之间的关系; 337 | (2)数据设计将分析时创建的模型转化为数据结构的定义; 338 | (3)接口设计是描述软件内部、软件和协作系统之间以及软件与人之间如何通信; 339 | (4)过程设计则是把系统结构部件转换为软件的过程性描述。 340 | 341 | 从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。 342 | (1)概要设计将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式; 343 | (2)详细设计确立每个模块的实现算法和局部数据结构,用适当方法表示算法和数据结构的细节。 344 | 345 | 346 | >软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 347 | >A、软件开发过程 348 | >B、模块间的关系 349 | >C、软件层次结构 350 | >D、系统结构部件转换成软件的过程描述 351 | > 352 | >正确答案 D 353 | 354 | #### 4.4 软件测试 355 | 软件测试的方法,白盒测试与黑盒测试,测试用例设计,软件测试的实施,单元测试、集成测试和系统测试。 356 | ##### 4.4.1 软件测试的方法 357 | **软件测试的准则:** 358 | 1. 所有测试都应追溯到需求 359 | 2. 严格执行测试计划,排除测试的随意性 360 | 3. 充分注意测试中的群集现象。程序中存在错误的概率与该程序中已发现的错误数成正比。**为了提高测试效率,测试人员应该集中对付哪些错误群集的程序。** 361 | 4. 程序员应避免检查自己的程序 362 | 5. 穷举测试不可能。穷举测试是把程序所有可能的执行路径都进行检查,即使小规模的程序的执行路径数也相当大,不可能穷尽,说明测试只能证明程序有错,不能证明程序中无错。 363 | 6. 妥善保存测试计划,测试用例、出错统计和最终分析报告,为维护提供方便。 364 | 365 | 366 | 367 | >为了提高测试的效率,应该‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 368 | A、集中对付那些错误群集的程序 369 | B、在完成编码以后制定软件的测试计划 370 | C、随机选取测试数据 371 | D、取一切可能的输入数据作为测试数据 372 | > 373 | >正确答案 A 374 | 375 | ##### 4.4.2 白盒测试与黑盒测试 376 | 377 | **白盒测试(结构测试或逻辑驱动测试)** 378 | 379 | 白盒测试的基本原则: 380 | 381 | (1)保证所测模块中每一独立路径至少执行一次。 382 | 383 | (2)保证所测模块所有判断的每一分支至少执行一次。 384 | 385 | (3)保证所测模块每一循环都在边界条件和一般条件下至少各执行一次。 386 | 387 | (4)验证所有内部数据结构的有效性。 388 | 389 | 按照白盒测试的基本原则,“白盒”法是穷举路径测试。 390 | 391 | 白盒测试的主要方法:逻辑覆盖,基本路经测试。 392 | 393 | >例题:在软件工程中,白盒测试法可用于测试程序的内部结构。下列选项中描述正确的是‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 394 | >白盒测试法将程序看作地址的集合 395 | >白盒测试法将程序看作目标的集合 396 | >白盒测试法将程序看作循环的集合 397 | >白盒测试法将程序看作路径的集合 398 | > 399 | >正确答案 D 400 | 401 | **黑盒测试(功能测试或数据驱动测试)** 402 | 403 | 是把程序看成一只黑盒子,测试者完全不了解,或不考虑程序的结构和处理过程。它根据规格说明书的功能来设计测试用例,检查程序的功能是否符合规格说明的要求。 404 | 405 | 黑盒测试的方法:等价划分法,边界值分析法,错误推测法。 406 | 407 | ##### 4.4.3 测试用例设计 408 | 409 | ##### 4.4.4 软件测试的实施 410 | 411 | ##### 4.4.5 单元测试、集成测试和系统测试。 412 | 413 | **单元测试**: 414 | **集成测试**: 415 | **确认测试(验收测试)**:验证软件功能和性能及其他特性是否满足了需求规格说明中确定的各种需求以及软件配置是否完全正确。 416 | **系统测试**: 417 | 418 | > 例题:检查软件产品是否符合需求定义的测试是‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 419 | > A、验证测试 420 | > B、确认测试 421 | > C、集成测试 422 | > D、系统测试 423 | > 424 | > 答案:B 425 | 426 | #### 4.5 程序的调试,静态调试与动态调试。 427 | 428 | **程序调试的任务**是诊断和改正程序中的错误。 429 | 430 | **程序调试和软件测试的区别**: 431 | (1)软件测试是尽可能多地发现软件中的错误,而程序调试先要发现软件的错误,然后借助于一定的调试工具去执行找出软件错误的具体位置。 432 | (2)软件测试贯穿整个软件生命期,调试主要在开发阶段。 433 | 434 | > 软件调试的目的是‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 435 | > A、改善软件的性能 436 | > B、挖掘软件的潜能 437 | > C、发现错误 438 | > D、改正错误 439 | > 440 | > 正确答案 D 441 | 442 | **程序调试的基本步骤**: 443 | 444 | (1)错误定位。从错误的外部表现形式入手,研究有关部分的程序,确定程序中出错位置,找出错误的内在原因; 445 | 446 | (2)修改设计和代码,以排除错误; 447 | 448 | (3)进行回归测试,防止引进新的错误。 449 | 450 | **软件调试可分为静态调试和动态调试。** 451 | 452 | 静态调试主要是指通过人的思维来分析源程序代码和排错,是主要的设计手段,而动态调试是辅助静态调试的。 453 | 454 | **软件调试方法**: 455 | 456 | 1. 强行排错法 457 | 2. 回溯法 458 | 3. 原因排除法,包括演绎法,归纳法和二分法。 459 | 460 | > 例题:以下选项中,不属于软件调试技术的是‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 461 | > A、原因排除法 462 | > B、强行排错法 463 | > C、回溯法 464 | > D、集成测试法 465 | > 466 | > 答案:D 467 | 468 | ### 五、数据库设计基础 469 | 470 | #### 5.1 数据库的基本概念:数据库,数据库管理系统,数据库系统。 471 | 472 | ##### 5.1.1 数据、数据库、数据库管理系统 473 | 474 | **数据(Data)**是数据库存储的基本对象,是描述事物的符号记录。 475 | 476 | **数据库(DB)**是长期储存在计算机内、有组织的、可共享的大量数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享,所以数据库技术的根本目标是解决数据共享问题。 477 | 478 | **数据库管理系统(DBMS)**是数据库的管理机构,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等。数据库管理系统是数据库系统的核心。数据库系统包含数据库和数据库管理系统。 479 | 数据库管理系统的功能: 480 | (1)数据模式定义:即为数据库构建其数据框架; 481 | (2)数据存取的物理构建:为数据模式的物理存取与构建提供有效的存取方法与手段; 482 | (3)数据操纵:为用户使用数据库的数据提供方便,如查询、插入、修改、删除等以及简单的算术运算及统计; 483 | (4)数据的完整性、安全性定义与检查; 484 | (5)数据库的并发控制与故障恢复; 485 | (6)数据的服务:如拷贝、转存、重组、性能监测、分析等。 486 | 487 | **数据语言** 488 | 数据定义语言(DDL):负责数据模式定义和数据物理存取构建。 489 | 数据操纵语言(DML):负责数据的操纵,包括查询及增删改等操作。 490 | 数据控制语言(DCL):负责数据完整性,安全性的定义与检查以及并发控制,故障恢复等功能。 491 | 数据语言按使用方式具有两个结构形式:交互式命令语言(自含型和自主型语言)和宿主型语言。 492 | 493 | **数据库管理员(DBA)的工作**:数据库设计,数据库维护,改善系统性能,提高系统效率。 494 | 495 | **数据库系统(DBS)**是指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统、应用系统、数据库管理员和用户构成。 496 | 497 | **数据库应用系统(DBAS)**是数据库系统再加上应用软件及应用界面这三者所组成,具体包括:数据库、数据库管理系统、数据库管理员、硬件平台、软件平台、应用软件、应用界面。 498 | 499 | ##### 5.1.2 数据库系统的基本特点 500 | 1.数据的高集成性 501 | 2.数据的高共享性和低冗余性 502 | 3.数据高独立性 503 | 4.数据统一管理与控制。 504 | 505 | **数据独立性**是数据与程序间的互不依赖性,即数据库中的数据独立于应用程序而不依赖于应用程序。数据的独立性一般分为物理独立性与逻辑独立性两种。 506 | (1)**物理独立性**:当数据的物理结构(包括存储结构、存取方式等)改变时,其逻辑结构,应用程序都不用改变。 507 | (2)**逻辑独立性**:数据的逻辑结构改变了,如修改数据模式、增加新的数据类型、改变数据间联系等,用户的应用程序可以不变。 508 | 509 | ##### 5.1.3 数据库系统的内部结构体系:三级模式、两级映射 510 | 511 | 512 | 513 | 概念模式:数据库系统中全局数据逻辑结构的描述,全体用户(应用)公共数据视图。 514 | 515 | 外模式(子模式或用户模式):用户的数据视图,由概念模式推导而出。 516 | 517 | 内模式(物理模式):数据库物理存储结构与物理存取方法。 518 | 519 | 520 | 521 | #### 5.2 数据模型,实体联系模型及 E-R 图,从 E-R 图导出关系数据模型。 522 | 523 | ##### 5.2.1 数据模型 524 | 525 | **数据模型**是数据特征的抽象,从抽象层次描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供一个抽象框架。 526 | 527 | 数据模型描述内容包括:**数据结构、数据操作和数据约束**。 528 | 529 | **概念数据模型(概念模型)**:是一种面向客观世界,面向用户的模型,不涉及具体的硬件环境和平台也与具体的软件环境无关的模式,它是整个数据模型的基础。 530 | **逻辑数据模型(数据模型)**:它是一种面向数据库的模型。分为层次模型,网状模型,关系模型和面向对象模型,其中层次模型和网状模型统称为非关系模型。层次模型用树型结构表示实体之间联系的模型。 531 | **物理数据模型(物理模型)**:它是一种面向计算机物理表示的模型。数据模型在计算机上的物理结构的表示。 532 | 533 | ##### 5.2.1 E-R模型(实体联系模型) 534 | 535 | 536 | 537 | E-R 图 538 | 539 | 从 E-R 图导出关系数据模型 540 | 541 | #### 5.3 关系代数运算,包括集合运算及选择、投影、连接运算,数据库规范化理论。 542 | 543 | 关系代数运算 544 | 545 | 集合运算及选择、投影、连接运算, 546 | 547 | 数据库规范化理论 548 | 549 | 关系代数是一种抽象的查询语言,关系代数的运算对象是关系,运算结果也是关系。运算对象,运算符和运算结果是运算的三大要素。集合运算符,专门的运算符,算术比较符和逻辑运算符。 550 | 551 | 关系模型的基本运算:(1)插入 (2)删除 (3)修改 (4)查询(包括投影、选择、笛卡尔积运算)还有扩充运算交、除、连接及自然连接运算。 552 | 553 | 关系代数的5个基本操作中并,差,交,笛卡尔积是二目运算。 554 | 555 | 设关系R和S具有相同的关系模式 556 | 557 | 1、并:R和S的并是由属于R或属于S的所有元组构成的集合。 558 | 559 | 2、差:R和S的差是由属于R但是不属于S的元组构成的集合 560 | 561 | 3、笛卡尔积:设R和S的元数分别为r和s,R和S的笛卡尔积是一个(r+s)元的元组集合,每个元组的前r个分量来自R的一个元组,后s个分量来自S的一个元组。运算后得到的新表的元组数是R*S,属性是r+s。 562 | 563 | 4、交:属于R又属于S的元组构成的集合。 564 | 565 | 5、投影:一元运算,对一个关系进行垂直切割,消去某些列,并重新按排列的顺序。 566 | 567 | 6、选择:一元运算,根据某些条件对关系进行水平分割。即选择符合条件的元组。 568 | 569 | 7、除:给定关系R(X,Y)和S(Y,Z),其中X,Y,Z是属性组,R中的Y和S中Y可以有不同的属性名,但必须出自相同的域集。 570 | 571 | 8、连接:也称θ连接运算,是一种二元运算,它的操作是从两个关系的笛卡尔积中选取属性间满足一定条件的元组,以合并成一个大关系。连接运算包括等值连接和不等值连接。连接运算后得到的新表的属性是运算前表中属性相加。即多于原来关系中属性的个数。 572 | 573 | 9、自然连接:自然连接满足的条件是(1)两关系间有公共域(2)通过公共域的相等值进行连接。 574 | 575 | 576 | 577 | 一个低一级范式的关系模式,通过模式分解可以转化为若干个高一级范式的关系模式的集合,这种过程就叫规范化。 578 | 579 | 580 | 581 | #### 5.4 数据库设计方法和步骤:需求分析、概念设计、逻辑设计和物理设计的相关策略。 582 | 583 | 数据库设计中有两种方法,面向数据的方法和面向过程的方法。 584 | 585 | 面向数据的方法是以信息需求为主,兼顾处理需求;面向过程的方法是以处理需求为主,兼顾信息需求。由于数据在系统中稳定性高,数据已成为系统的核心,因此面向数据的设计方法已成为主流。 586 | 587 | 数据库设计方法和步骤:需求分析、概念设计、逻辑设计、物理设计 588 | 589 | ##### 5.4.1 需求分析 590 | 591 | 通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统的工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。 592 | 593 | 1. 信息要求 594 | 2. 处理要求 595 | 3. 安全性和完整性要求 596 | 597 | 方法: 598 | 599 | 结构化分析法(structured analysis SA方法):自顶向下、逐层分解。 600 | 601 | 面向对象的方法 602 | 603 | 用数据流图表达数据和处理过程的关系 604 | 605 | 通过数据字典对系统中数据详尽描述,是各类数据属性的清单; 606 | 607 | 数据字典包括5个部分: 608 | 609 | 1. 数据项:数据最小的单位; 610 | 611 | 2. 数据结构; 612 | 613 | 3. 数据流; 614 | 615 | 4. 数据存储; 616 | 617 | 5. 处理过程 618 | 619 | 620 | 621 | ##### 5.4.2 概念设计 622 | 623 | 将需求分析阶段得到的用户需求抽象为信息结构即概念模型的过程,它是整个数据库设计的关键。 624 | 625 | ###### 5.4.2.1 集中式模式设计法 626 | 627 | ###### 5.4.2.2 视图集成设计法 628 | 629 | 1. 选择局部应用 630 | 631 | 2. 视图设计 632 | 633 | 三种设计次序: 634 | 635 | 自顶向下:先从抽象级别较高且普遍性较强的对象开始逐步细化、具体化与特殊化 636 | 637 | 由底向上: 638 | 639 | 由内向外。 640 | 641 | 3. 视图集成:将所有的局部视图统一与合并成一个完整的数据模型。 642 | 643 | 解决局部设计冲突:命名冲突、概念冲突、域冲突、约束冲突 644 | 645 | 消除冗余 646 | 647 | ##### 5.4.3 逻辑设计 648 | 649 | ###### 5.4.3.1 从E-R图向关系模式转换 650 | 651 | 将E—R图转换成关系数据库管理系统(Relational Database Management System **RDBMS**) 652 | 653 | | E-R模型 | 关系 | 654 | | ------- | ---- | 655 | | 属性 | 属性 | 656 | | 实体 | 元组 | 657 | | 实体集 | 关系 | 658 | | 联系 | 关系 | 659 | 660 | 规范化 661 | 662 | 数据冗余、插入异常、删除异常、修改异常 663 | 664 | 665 | 666 | ##### 5.4.4 数据库的物理设计 667 | 668 | 对数据库内部物理结构作调整并选择合理的存取路径,以提高数据库访问速度及有限利用存储空间。 669 | 670 | 671 | 672 | -------------------------------------------------------------------------------- /单选题常见错题集.md: -------------------------------------------------------------------------------- 1 | # 选择题错题集 2 | 3 | ## 第一季卷1 4 | 5 | 1.关于数据的存储结构,以下选项描述正确的是‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 6 | 7 | A 存储在外存中的数据 8 | 9 | B 数据所占的存储空间量 10 | 11 | C 数据在计算机中的顺序存储方式 12 | 13 | D 数据的逻辑结构在计算机中的表示 14 | 15 | **正确答案 D ** 16 | 17 | 数据的存储结构在计算机存储空间中存放形式称为数据的存储结构 18 | 19 | 20 | 21 | 2.关于线性链表的描述,以下选项中正确的是‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 22 | 23 | A 存储空间不一定连续,且前件元素一定存储在后件元素的前面 24 | 25 | B 存储空间不一定连续,且各元素的存储顺序是任意的 26 | 27 | C 存储空间必须连续,且前件元素一定存储在后件元素的前面 28 | 29 | D 存储空间必须连续,且各元素的存储顺序是任意的 30 | 31 | **正确答案 B ** 32 | 33 | 34 | 35 | 3.满二叉树中,叶子结点的总个数是‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 36 | 37 | 在深度为 7 的满二叉树中,叶子结点的总个数是‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 38 | 39 | A 64 40 | 41 | B 32 42 | 43 | C 31 44 | 45 | D 63 46 | 47 | **正确答案 A** 48 | 49 | 50 | 51 | 4.关于结构化程序设计所要求的基本结构,以下选项中描述错误的是‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 52 | 53 | A goto 跳转 54 | 55 | B 选择(分支)结构 56 | 57 | C 顺序结构 58 | 59 | D 重复(循环)结构 60 | 61 | **正确答案 A** 62 | 63 | 结构化程序设计方法的主要原则包括自顶向下、逐步求精、模块化和限制使用沟通goto语句。其基本结构有顺序结构、重复(循环)结构、选择(分支)结构。 64 | 65 | 66 | 67 | 5.关于面向对象的继承,以下选项中描述正确的是‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 68 | 69 | A 继承是指各对象之间的共同性质 70 | 71 | B 继承是指类之间共享属性和操作的机制 72 | 73 | C 继承是指一个对象具有另一个对象的性质 74 | 75 | D 继承是指一组对象所具有的相似性质 76 | 77 | **正确答案 B ** 78 | 79 | 80 | 81 | 14.关于 Python 语言的注释,以下选项中描述错误的是‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 82 | 83 | A Python 语言有两种注释方式:单行注释和多行注释 84 | 85 | B Python 语言的单行注释以单引号 ' 开头 86 | 87 | C Python 语言的多行注释以 ' ' '(三个单引号)开头和结尾 88 | 89 | D Python 语言的单行注释以#开头 90 | 91 | **正确答案 B ** 92 | 93 | 单行#,多行三个单引号或三个多引号 94 | 95 | 96 | 97 | 21.关于函数,以下选项中描述错误的是‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 98 | 99 | A 函数能完成特定的功能,对函数的使用不需要了解函数内部实现原理,只要了解函数的输入输出方式即可。 100 | 101 | B Python 使用 del 保留字定义一个函数 102 | 103 | C 函数是一段具有特定功能的、可重用的语句组 104 | 105 | D 使用函数的主要目的是减低编程难度和代码重用 106 | 107 | **正确答案 B** 108 | 109 | 定义函数保留字是def;del保留字的含义是删除变量或序列的值 110 | 111 | 112 | 113 | 22.关于 Python 组合数据类型,以下选项中描述错误的是‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 114 | 115 | A 组合数据类型可以分为 3 类:序列类型、集合类型和映射类型 116 | 117 | B 序列类型是二维元素向量,元素之间存在先后关系,通过序号访问 118 | 119 | C Python 的 str、tuple 和 list 类型都属于序列类型 120 | 121 | D Python 组合数据类型能够将多个同类型或不同类型的数据组织起来,通过单一的表示使数据操作更有序、更容易 122 | 123 | **正确答案 B** 124 | 125 | 序列是一维元素向量,不是二维 126 | 127 | 128 | 129 | 27.以下选项中不是 Python 语言的保留字的是‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬ 130 | 131 | A except 132 | 133 | B pass 134 | 135 | C while 136 | 137 | D do 138 | 139 | **正确答案 D** 140 | 141 | pass 代表空操作,do不是Python保留字 142 | 143 | 144 | 145 | ## 第一季卷2 146 | 147 | -------------------------------------------------------------------------------- /基本语法.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # 考点一:程序基本语法元素 4 | 5 | ## 一、基本语法元素 6 | 7 | ### 1.变量命名规则 8 | 9 | 1. **首字母不能是数字** 10 | 2. **中间不能有空格** 11 | 3. 大小写敏感 12 | 13 | ### 2.注释 14 | 15 | 单行注释 :行首用# 16 | 17 | 多行注释 :每一行用#,或使用多行注释用三个单引号 **'''** 或者三个双引号 **"""** 将注释括起来 18 | 19 | ### 3.冒号 20 | 21 | if、elif、else、for、while、def、try、except均需添加英文冒号 22 | 23 | ### 4.缩进 24 | 一般空四个格 25 | 26 | ### 5.函数的引用 27 | #### (1)全命名空间引用:import<库名> 28 | **注意:后续必须写库名**
29 | ``` 30 | import turtle 31 | turtle.down() 32 | ``` 33 | #### (2)全函数引用: form <库名> import * 34 | **注意:后续不必写库名,直接写函数,否则会报错**
35 | ``` 36 | from turtle import * #引用turtle所有函数 37 | down() 38 | ``` 39 | #### (3)具体函数引用:form <库名> import(<函数名>) 40 | ``` 41 | from turtle import up #引用turtle的up函数 42 | up() 43 | ``` 44 | #### (4)别名引用:form <库名> as <别名> 45 | **注意:后续必须写库名**
46 | 47 | ## 二、基本输入输出函数 48 | ### 1.input函数 49 | <变量>=input(<提示性文字>) 50 | 51 | ### 2.eval函数 52 | 将输入的字符串转化为python语句, 53 | 去掉参数最外侧引号并执行余下语句的函数 54 | ``` 55 | >>> eval('print("Hello")') 56 | 57 | Hello 58 | ``` 59 | ### 3.print函数 60 | 61 | ## 三、python语言特点(可能单选) 62 | 63 | 主要特点: 64 | 65 | 1. 通用 66 | 2. 简洁 67 | 3. 生态高产 68 | 69 | 次要特点: 70 | 71 | 1. 平台无关 72 | 2. 强制可读(缩进) 73 | 3. 支持中文 74 | 4. 模式多样 75 | 5. 类库便捷 76 | 77 | # 考点二:基础数据类型 78 | 79 | ## 一、数字类型 80 | 81 | ### 1.进制 82 | 83 | | 进制种类 | 引导符号 | 84 | | -------- | -------- | 85 | | 二级制 | 0b或0B | 86 | | 八进制 | 0o或0O | 87 | | 十六进制 | 0x或0X | 88 | 89 | ### 2.浮点运算问题 90 | 91 | 存在不确定小尾数问题,round(x,d) 92 | 93 | d控制小数点精读 94 | 95 | ### 3.复数问题 96 | a+bj 97 | z.real 获取实数部分 98 | z.imag 获取虚数部分 99 | 100 | ## 二、数字类型运算符 101 | ### 1.运算操作符 102 | 103 | | 操作符 | 含义 | 104 | | :----: | :------: | 105 | | x//y | 整数商 | 106 | | x%y | 余数 | 107 | | +x | x本身 | 108 | | x**y | x的y次幂 | 109 | 110 | ### 2.内置运算函数 111 | 112 | | 函数 | 含义 | 113 | | :---------: | :----------------------: | 114 | | abs() | 绝对值 | 115 | | divmod(x,y) | (x//y,x%y) | 116 | | pow(x,y) | x**y | 117 | | round(x,d) | 对x四舍五入,保留d位小数 | 118 | | max() | | 119 | | min() | | 120 | 121 | ## 三、字符串类型及格式化 122 | 123 | ### 1.字符串索引 124 | 125 | <字符串>[序号] 126 | 127 | ### 2.字符串切片 128 | 129 | <字符串>[<首序号>:<尾序号,**不含尾序号**>:<步长>] 130 | 131 | ### 3.字符串类型的格式化:"".format() 132 | 133 | <模板字符串>.format(<逗号间隔的参数>) 134 | 槽用{}表示
135 | {<参数序号>:<格式控制标记>} 136 | 137 | : | 填充|对齐|宽度|,|.精读|类型 138 | ---|---|---|---|---|---|--- 139 | 引导符号| 用于填充的单个字符|<左对齐
>右对齐
^居中对齐|槽设定的输出宽度|数字的千分符|浮点数小数部分的精度或字符串的最大输出长度|整数:b、c、d、o、x、X
浮点数:e、E、f、%
字符串:s 140 | ##### 整数 141 | b:整数的二级制形式
142 | c:整数对应的Unicode字符
143 | d:整数的十进制形式
144 | o:整数的八进制形式
145 | x:整数的小写十六进制形式
146 | X:整数的大写十六进制形式
147 | ##### 浮点数 148 | e:e的指数形式
149 | E:E的指数形式
150 | f:标准浮点形式
151 | %:百分数形式 152 | 153 | ``` 154 | #例题:获得用户输入的一个字符串,格式如下: 155 | #M OP N‪‪ 156 | #其中,M和N是任何数字,OP代表一种操作,表示为如下四种:+, -, *, /(加减乘除) 157 | #根据OP,输出M OP N的运算结果,统一保存小数点后2位。‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬ 158 | #注意:M和OP、OP和N之间可以存在多个空格,不考虑输入错误情况。 159 | 160 | n = input() 161 | print("{:.2f}".format(eval(n))) 162 | ``` 163 | 164 | ## 四、字符串操作 165 | 166 | | 操作符 | 含义 | 167 | | -------------- | ---- | 168 | | x+y | | 169 | | x * n 或 n * x | | 170 | | x in s | | 171 | 172 | | 函数 | 含义 | 173 | | ------------------- | ------------------------ | 174 | | len(x) | 返回字符串长度 | 175 | | str(x) | | 176 | | chr(x) | 返回Unicode编码 | 177 | | ord(x) | 将Unicode编码返回x | 178 | | hex(x) | 将整数x转化为十六进制字符串 | 179 | | oct(x) | 将整数x转化为八进制字符串 | 180 | | str.lower() | 变小写 | 181 | | str.upper() | 变大写 | 182 | | str.split(s) | 返回类别列表,被s分割 | 183 | | str.count(s) | 返回s字符串出现次数 | 184 | | str.replace(old,new) | 返回字符串,new替换old | 185 | | str.center(width [ , fillchar ] ) | 字符串居中,width:字符串的总宽度;fillchar :填充字符 | 186 | | str.strip(chars) | 去除收尾chars字符串 | 187 | | str.join(sequence) | 除最后一个元素外,每个元素末尾增加sequence,常用于字符串连接 | 188 | 189 | ``` 190 | a="张 木 楠" 191 | a.split() 192 | ['张', '木', '楠'] 193 | ``` 194 | 195 | 196 | 197 | ## 五、类型判断和类型间转换 198 | 199 | ### 1.类型判断 type(x) 200 | 201 | ``` 202 | type(3) 203 | 204 | 205 | ``` 206 | 207 | ### 2.类型间转换 208 | 209 | | 函数 | 含义 | 210 | | :------: | :------: | 211 | | int(x) | 变整数 | 212 | | float(x) | 变浮点 | 213 | | str(x) | 变字符串 | 214 | 215 | 216 | 217 | # 考点三:程序控制结构 218 | 219 | ## 一、3种控制结构:顺序、分支、循环 220 | 221 | ``` 222 | #赋值语句 223 | t=x 224 | 225 | x,y=y,x #同步赋值语句 226 | ``` 227 | 228 | 229 | ## 二、分支结构 if-elif-else 230 | if <条件1>:
231 | <语块1>
232 | elif <条件2>:
233 | <语块2>
234 | ...
235 | else:
236 | <语块N>
237 |
238 | 注意:条件后面要加冒号: 239 | ``` 240 | #例如: 241 | 分段函数求值 242 | 3x - 5 (x > 1) 243 | f(x) = x + 2 (-1 <= x <= 1) 244 | 5x + 3 (x < -1) 245 | 246 | x = eval(input("x = ")) 247 | if x > 1: 248 | y = 3 * x - 5 249 | elif x >= -1: 250 | y = x + 2 251 | else: 252 | y = 5 * x + 3 253 | print("f({:.2f}) = {:.2f}".format(x, y)) 254 | ``` 255 | 256 | ## 三、循环语句 257 | 包含两种,分别为for-in循环和while循环 258 | ### 1.for-in循环 259 | ``` 260 | #用for循环实现1~10之间的求和 261 | sum = 0 262 | for x in range(1, 11): 263 | sum += x 264 | print(sum) 265 | ``` 266 | 267 | #### range(start, stop[, step]) 268 | 参数 | 含义| 举例 269 | ---|---|--- 270 | start| 计数从 start 开始。默认是从0开始。|range(5)等价于range(0, 5) 271 | stop | 计数到 stop结束,但不包括stop。|range(0, 5) 是[0, 1, 2, 3, 4]没有5 272 | step |步长,默认为1。|range(0, 5) 等价于 range(0, 5, 1) 273 | 274 | ``` 275 | #生成从0开始到9的整数序列: [1, 2, 3, 4, 5, 6, 7, 8, 9,10] 276 | list(range(1,10)) 277 | ``` 278 | 279 | ### 2.while循环 280 | 281 | 相关函数|含义 282 | ---|--- 283 | break |结束当前循环 284 | continue | 跳过当前循环,继续下一个循环 285 | 286 | ``` 287 | #猜数字游戏 288 | #计算机出一个1~1000之间的随机数由人来猜 289 | #计算机根据人猜的数字分别给出提示大一点/小一点/猜对了 290 | 291 | import random 292 | answer = random.randint(1, 1000) 293 | counter = 0 294 | while True: 295 | counter += 1 296 | number = int(input('请输入: ')) 297 | if number < answer: 298 | print('大一点') 299 | elif number > answer: 300 | print('小一点') 301 | else: 302 | print('恭喜你猜对了!') 303 | break 304 | print('你总共猜了%d次' % counter) 305 | if counter > 15: 306 | print('你的智商余额明显不足') 307 | ``` 308 | 309 | ### 四、异常处理:try-except 310 | 311 | try: 312 | 313 | ​ <正常运行时执行代码> 314 | 315 | except: 316 | 317 | ​ <报错执行代码> 318 | 319 | 320 | 321 | # 考点四:函数与代码复用 322 | 323 | ## 一、函数的定义和使用 324 | def <函数名>: 325 | <函数体> 326 | return<返回值列表> 327 | ## 二、函数的参数传递:可选参数的传递、参数名称传递、函数的返回值 328 | ### 1.可选参数的传递 329 | def <函数名>(<非可选参数>,<可选参数>=<默认值>): 330 | <函数体> 331 | return<返回值列表> 332 | 333 | ### 2.参数名称传递 334 | def <函数名>(<参数名>=<默认值>): 335 | <函数体> 336 | return<返回值列表> 337 | ### 3.函数的返回值 338 | 可以没有return 339 | 可有多个return 340 | 341 | ## 三、变量的作用域:局部变量和全局变量 342 | global <全局变量> 343 | 没有声明的函数体内变量默认为局部变量 344 | 345 | 346 | 347 | # 知识点五:组合数据类型 348 | 349 | ## 一、组合数据类型的基本概念:集合类型、序列类型、映射类型 350 | 351 | 集合类型:一个元素集合,元素之间无序,各元素在集合中唯一存在; 352 | 353 | 序列类型:一个元素向量,元素之间存在先后关系,通过序号访问,元素之间不排他,包括:字符串类型、元组类型、列表类型; 354 | 355 | 映射类型:”键-值“数据项的组合,每个元素是一个键值对。 356 | 357 | | 组合数据类型 | 表示方法 | 358 | | ------------ | ------------------------------------------------------------ | 359 | | 集合类型 | { } | 360 | | 字符串类型 | 单引号(必须在一行)、双引号(必须在一行)、三引号(可以多行) | 361 | | 元组类型 | { } | 362 | | 列表类型 | [ ] | 363 | | 映射类型 | { } | 364 | 365 | ## 二、列表类型:定义、索引、切片 366 | 367 | 与字符串类型索引、切片相同 368 | 369 | ## 三、列表类型的操作:列表的操作函数、列表的操作方法 370 | ### 1.操作函数 371 | 372 | | 操作函数 | 含义 | 373 | | -------- | --------------- | 374 | | len() | 求元素个数 | 375 | | min() | | 376 | | max() | | 377 | | list(x) | 将x变成list类型 | 378 | 379 | ### 2.操作方法: 380 | |操作函数 | 含义 | 381 | |:------- | ---- | 382 | |ls.append(x)| 在列表最后添加x | 383 | |ls.insert(i,x)| 在第i位置,添加x | 384 | |ls.clear() | 清空列表 | 385 | |ls.pop(i) | 取出第i位置的值,并删除该元素 | 386 | |ls.remove(x) | 将列表中第一出现的x删除 | 387 | |ls.reverse()| 列表中元素反转 | 388 | |ls.copy() | 复制一样的新列表 | 389 | 390 | 391 | 392 | ## 四、字典类型:定义、索引 393 | ​ 定义:<变量名>={键1:值1,键2:值2,……,键n:值n} 394 | ​ 索引:值=变量名[键] 395 | 396 | ## 五、字典类型的操作:字典的操作函数、字典的操作方法 397 | ### 1.操作函数 398 | 399 | | 操作函数 | 含义 | 400 | | -------- | -------------- | 401 | | len() | 求元素个数 | 402 | | min() | | 403 | | max() | | 404 | | dist() | 生成一个空字典 | 405 | 406 | ### 2.操作方法: 407 | 408 | | 操作函数 | 含义 | 409 | | :----------------- | ----------------------------------------------------------- | 410 | | d.keys() | 返回所有键信息 | 411 | | d.values() | 返回所有值信息 | 412 | | d.items() | 返回所有键值对 | 413 | | d.get(key,defaut) | 键存在则返回对应值,否则返回默认值 | 414 | | d.pop(key,default) | 键存在则返回对应值,同时删除该键值对,否则返回默认值 | 415 | | d.popitem() | 随机从字典中取出一个键值对,以元组形式(key,value)形式返回 | 416 | | d.clear() | 删除所有的键值对 | 417 | 418 | # 知识点六:文件和数据格式化 419 | 420 | ## 一、文件的使用:文件打开、关闭和读写 421 | 422 | ### 1.文件打开 423 | 424 | <变量名>=open(<文件路径及文件名>,<打开模式>) 425 | 426 | | 打开模式 | 含义 | 427 | | -------- | ----------------------------------------------------------- | 428 | | 'r' | 只读模式,文件不存在,则返回异常FileNotFoundError | 429 | | 'w' | 覆盖写模式,文件不存在则创建,存在则完全覆盖 | 430 | | 'x' | 创建写模式,文件不存在则创建,存在则返回异常FileExistsError | 431 | | 'a' | 追加写模式,文件不存在则创建 | 432 | | 'b' | 二进制文件模式 | 433 | | 't' | 文本文件模式 | 434 | | '+' | 与r/w/x/a一同使用,在原有功能基础上增加同时读写功能 | 435 | 436 | ### 2.文件关闭 437 | 438 | <变量名>.close( ) 439 | 440 | ### 3.文件读取 441 | 442 | | 方法 | 含义 | 443 | | -------------------- | ------------------------------------------------------------ | 444 | | f.read(size=-1) | | 445 | | f.readline(size=-1) | | 446 | | f.readlines(size=-1) | | 447 | | f.seek(offset) | 改变当前文件操作指针,offset的值:0文件开头;1当前位置;-1文件结尾。 | 448 | 449 | ### 4.文件写入 450 | 451 | | 方法 | 含义 | 452 | | ------------------- | ------------------------------ | 453 | | f.write(s) | | 454 | | f.writelines(lines) | 将一个元素为字符串列表写入文件 | 455 | 456 | ## 二、数据组织的维度:一维数据、二维数据 457 | 458 | 459 | 460 | ## 三、一维数据的处理:表示、存储和处理 461 | 462 | .join( ) 463 | 464 | .split( ) 465 | 466 | ## 四、二维数据的处理:表示、存储和处理 467 | 468 | for row in ls: 469 | 470 | ​ for item in row: 471 | 472 | ​ <对第row行第item列元素进行处理> 473 | 474 | ## 五、采用CSV格式对一二维数据文件读写 475 | 476 | 477 | 478 | 479 | 480 | # 知识点七:标准库 481 | 482 | ## 一、turtle函数库语法 483 | 484 | ### 1.绘图窗体坐标体系 485 | 486 | turtle.setup(width,height,startx,starty)
487 | setup不是必须的 488 | 489 | | 参数 | 意思 | 备注 | 490 | | ------ | ---------------------- | ---------------------------------- | 491 | | width | 窗口宽度 | 整数表示像素值,小数表示与屏幕比例 | 492 | | height | 窗口高度 | 整数表示像素值,小数表示与屏幕比例 | 493 | | startx | 窗口左侧与屏幕左侧距离 | None,位于水平中央 | 494 | | starty | 窗口顶部与屏幕顶部距离 | None,位于垂直中央 | 495 | 496 | 497 | ### 2.画笔控制函数 498 | 499 | | 函数 | 简称 | 意思 | 参数含义 | 500 | | ---------------------------------------------------- | --------------------- | -------- | ------------------------------------------------------------ | 501 | | turtle.penup() | turtle.up或turtle.pu | 抬笔 | | 502 | | turtle.pendown() | turtle.down或turle.pd | 落笔 | | 503 | | turtle.pensize(width) | turtle.width | 画笔尺寸 | width:画笔线条宽度,
若为None或空,则返回当前画笔宽度 | 504 | | turtle.color(colorstring)
或turtle.color((r,g,b)) | | 画笔颜色 | colorstring:表示颜色的英文字符,如:"red";
(r,g,b):对应RGB值 | 505 | 506 | ### 3.形状绘制函数 507 | 508 | | 函数 | 简称 | 意思 | 参数含义 | 509 | | ---------------------------- | --------------------------- | -------- | ---------------------------------- | 510 | | turtle.fd(distance) | turtle.forward(distance) | 前进 | distance:距离 | 511 | | turtle.seth(to_angle) | turtle.setheading(to_angle) | 改变方向 | to_angle:绝对方向的角度值 | 512 | | turtle.circle(radius,extent) | | 绘制弧形 | radius:半径;
extent:弧形角度 | 513 | | turtle.goto(x,y) | | | | 514 | 515 | ## 二、random库 516 | 517 | | 函数 | 含义 | 参数 | 518 | | ----------------------------- | ------------------------------------------------------------ | ------------------------------------------ | 519 | | .seed(a) | 设置初始化随机种子a | a:随机种子,可以整数、浮点数 | 520 | | .random() | 生成一个[0.0,1.0)之间的随机小数 | | 521 | | .randiant(a,b) | 生成一个[a,b]之间的随机整数 | a:开始数,整数;b:结束数,包括结束值整数 | 522 | | .getrandbits(k) | 生成一个k比特长度的随机整数 | k:长度的整数 | 523 | | .randrange(start,stop[,step]) | 生成一个[start,stop)之间以step为步长的随机整数 | step:步长,即结果必是其a+n*step,默认是1 | 524 | | .uniform(a,b) | 生成一个[a,b]之间的随机小数 | | 525 | | .choice(seq) | 从序列中随机返回一个元素 | seq:序列类型,例如列表类型 | 526 | | .shuffle(seq) | 将序列类型seq中元素随机排列,返回打乱后的的序列;调用该函数后,序列类型变量seq将被改变 | | 527 | | .sample(seq,k) | 从pop类型中随机选取k个元素,以列表类型返回 | | 528 | 529 | 530 | 531 | ## 三、time库 532 | 533 | ### 1.时间处理 534 | 535 | | 函数 | 含义 | 参数 | 536 | | ------------ | --------------------------------------------- | ---- | 537 | | .time() | 返回当前时间戳 | | 538 | | .gmtime() | 返回当前时间戳对应的struct_time对象 | | 539 | | .localtime() | 返回当前时间戳对应的本地时间的struct_time对象 | | 540 | | .ctime() | 返回当前时间戳所对应的易读字符串 | | 541 | 542 | ``` 543 | >>> from time import * 544 | >>> time() 545 | 1582716310.8309927 546 | >>> gmtime() 547 | time.struct_time(tm_year=2020, tm_mon=2, tm_mday=26, tm_hour=11, tm_min=25, tm_sec=18, tm_wday=2, tm_yday=57, tm_isdst=0) 548 | >>> localtime() 549 | time.struct_time(tm_year=2020, tm_mon=2, tm_mday=26, tm_hour=19, tm_min=26, tm_sec=52, tm_wday=2, tm_yday=57, tm_isdst=0) 550 | >>> ctime() 551 | 'Wed Feb 26 19:27:27 2020' 552 | ``` 553 | 554 | ### 2.时间格式化 555 | 556 | | 函数 | 含义 | 参数 | 557 | | ------------------------ | ------------------------------------------------------------ | -------------------------------- | 558 | | .mktime(t) | 将struct_time对象变量t转换为时间戳 | t:代表时间的struct_time对象变量 | 559 | | .strftime(format,t) | 根据format格式定义打印输出t | | 560 | | .strptime(string,format) | 根据format格式定义,解析字符串string,返回struct_time类型时间变量 | | 561 | 562 | ``` 563 | >>> from time import * 564 | >>> >>> t = (2009, 2, 17, 17, 3, 38, 1, 48, 0) 565 | >>> mktime( t ) 566 | 1234861418.0 567 | ``` 568 | 569 | | 格式化字符串 | 星期/时间 | | 570 | | ------------ | ----------- | ---- | 571 | | %Y | 年份 | | 572 | | %m | 月份 | | 573 | | %B | 月名 | | 574 | | %b | 月名缩写 | | 575 | | %d | 日期 | | 576 | | %A | 星期 | | 577 | | %a | 星期缩写 | | 578 | | %H | 小时(24h) | | 579 | | %I | 小时(12h) | | 580 | | %p | 上午/下午 | | 581 | | %M | 分钟 | | 582 | | %S | 秒 | | 583 | 584 | 585 | 586 | ### 3.计时 587 | 588 | | 函数 | 含义 | 参数 | 589 | | --------------- | ------------------------------------------------------------ | -------------------- | 590 | | .sleep(secs) | 将当前程序挂起secs秒,挂起即停止执行 | secs:表示时间的数值 | 591 | | .perf_counter() | 返回一个代表时间的精确浮点数,两次或多次调用,其差值用来计时 | | 592 | 593 | # 考点八:第三方库 594 | ## 一、pip命令 595 | ### pip工具的安装 596 | 在cmd下操作 597 | 598 | ### 获取帮助 599 | ``` 600 | pip -h 601 | ``` 602 | ### 安装第三方安装包 pip install <库名> 603 | 安装包不区分大小写 604 | ``` 605 | pip install pyinstaller 606 | ``` 607 | ``` 608 | pip install jiaba 609 | ``` 610 | ### 获取已安装第三方包列表 611 | 612 | ``` 613 | pip list 614 | ``` 615 | ### 检查是否有需要更新的第三方库 616 | ``` 617 | pip list -o 618 | ``` 619 | ### 更新第三方库 pip install --upgrade <库名> 620 | ``` 621 | pip install --upgrade colorama 622 | ``` 623 | ### 查询库信息 pip show pip install --upgrade 624 | ``` 625 | pip show panda 626 | ``` 627 | ### 卸载第三方库 pip uninstall <卸载库名> 628 | ``` 629 | pip uninstall panda 630 | ``` 631 | ### 搜索 pip search <库名> 632 | ``` 633 | pip search panda 634 | ``` 635 | ### 下载但不安装pip download <库名> 636 | pip download pandas 637 | ### 配置国内镜像安装地址(非考点) 638 | 解决网速过慢问题 639 | 清华大学pypi镜像站 640 | ``` 641 | pip install pip -U 642 | pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 643 | ``` 644 | ## 二、PyInstaller库 645 | 在cmd执行 646 | 647 | | | | 648 | | -------------------------------------------------------- | ------------------ | 649 | | pyinstaller | 打包 | 650 | | pyinstaller -F | 生成独立可执行文件 | 651 | | pyinstaller -I <.ico图标文件名> -F | 指定一个图标文件 | 652 | 653 | 文件名包括绝对或相对路径 654 | 655 | ## 三、jieba库 656 | 657 | | 函数 | 作用 | 参数 | 658 | | --------------------- | --------------------- | ---- | 659 | | .lcut(x) | 精准模式 | | 660 | | .lcut(x,cut_all=Ture) | 全模式 | | 661 | | .lcut_for_search(x) | 搜索引擎模式 | | 662 | | .add_word(w) | 向分词词典中增加新词w | | 663 | 664 | 665 | 666 | ## 四、wordcloud库 667 | 668 | ``` 669 | import wordcloud 670 | w = wordcloud.WordCloud().generate(txt) 671 | w.to_file("wordcloud.png") 672 | ``` 673 | 674 | # 考点九:Python计算生态 675 | 676 | 1. 标准库:turtle 库、random库 、time 库(可选) 677 | 678 | 2. 第三方库:PyInstaller、jiaba、wordcloud(可选) 679 | 680 | 3. 更广发的计算生态 681 | 682 | | 领域 | 库名 | 683 | | ------------ | ------------------------------------- | 684 | | 网络爬虫 | requests、scrapy、pyspider | 685 | | 数据分析 | numpy、pandas、scipy | 686 | | 文本处理 | pdfminer、python-docx、beautifulsoup4 | 687 | | 数据可视化 | matplotlib、seaborn、mayavi | 688 | | 用户图形界面 | PyQt5、wxPython、PyGObject | 689 | | 机器学习 | scikit-learn、pyramid、flask | 690 | | web开发 | Django、pyramid、flask | 691 | | 游戏开发 | pygame、Panda3d、cocos2d | 692 | | 大数据分析 | opencv-python、NLTK、networkx | 693 | 694 | 695 | --------------------------------------------------------------------------------