计算机二级Python易忘考点整理

事先声明,这里记录的是我刷二级题时遇到的不熟悉的问题时记录下来的笔记。可能并不适合所有人,仅供参考。

任何问题请联系邮箱:admin@likehide.com (因为不常上网站,所以留言和私信可能无法及时回复)

个人介绍:业余“开发者”一枚,Python为其启蒙语言,但已经很久没有认真写过Python直到不久前突然想考计算机二级,于是慢慢开始刷二级Python题库。

一、语法或函数

本项主要记录刷题时经常遇到,但我使用较少,或完全没有使用过的语法或函数
以下函数解释多来自于:菜鸟教程

  1. id([object])
  • 获取对象内存地址
  • object -- 对象
  • 返回对象的内存地址。
  • 例:
x = "abc"
y = "abc"
print(id(x)==id(y))

输出:True
  1. list.extend(seq)
  • 添加列表内容
  • seq -- 元素列表。
  • 该方法没有返回值,但会在已存在的列表中添加新的列表内容。
  • 例:
aList = [123, 'xyz', 'zara', 'abc', 123];
bList = [2009, 'manni'];
aList.extend(bList)

print "Extended List : ", aList ;

输出:
Extended List :  [123, 'xyz', 'zara', 'abc', 123, 2009, 'manni']
  1. list.insert(index, obj)
  • 函数用于将指定对象插入列表的指定位置。
  • index -- 对象 obj 需要插入的索引位置。
    obj -- 要插入列表中的对象。
  • 该方法没有返回值,但会在列表指定位置插入对象。
aList = [123, 'xyz', 'zara', 'abc']

aList.insert( 3, 2009)

print "Final List : ", aList

输出:
Final List : [123, 'xyz', 'zara', 2009, 'abc']
  1. lambda 语法
    详见:lambda

  2. 三元运算:

val = 1 if 条件 else 2

条件为True时val=1
否则=2
  1. Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false。
下列对象的布尔值都是False:

NONE;

False(布尔类型)

所有的值为零的数

       0(整型)

       0.0(浮点型)

       0L(长整型)

       0.0+0.0j(复数)

""(空字符串)

[](空列表)

()(空元组)

{}(空字典)
  1. divmod(a, b)
  • 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。
  • a-- 数字
    b--数字
  • 例:
>>>divmod(7, 2)
(3, 1)
>>> divmod(8, 2)
(4, 0)
>>> divmod(1+2j,1+0.5j)
((1+0j), 1.5j)
  1. str.strip([chars])
  • 用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
    注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
  • chars -- 移除字符串头尾指定的字符序列。
  • 返回移除字符串头尾指定的字符生成的新字符串。
  1. str.count(sub, start= 0,end=len(string))
  • 用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。
  • sub -- 搜索的子字符串
    start -- 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
    end -- 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
  • 该方法返回子字符串在字符串中出现的次数。
  1. str.join(sequence)
  • 用于将序列中的元素以指定的字符连接生成一个新的字符串。
  • sequence -- 要连接的元素序列。
  • 返回通过指定字符连接序列中元素后生成的新字符串。
str = "-";
seq = ("a", "b", "c"); # 字符串序列
print str.join( seq );

输出:a-b-c
  1. str.upper()
  • 方法将字符串中的小写字母转为大写字母。
  • 返回小写字母转为大写字母的字符串。
  1. list.sort(cmp=None, key=None, reverse=False)
  • 用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
  • cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
    key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
  • 该方法没有返回值,但是会对列表的对象进行排序。
  1. chr(i)
  • chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
  • i -- 可以是10进制也可以是16进制的形式的数字。
  • 返回值是当前整数对应的ascii字符。
    注:在3.x 中,chr() 和 ord() 默认支持unicode
    ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。
  1. raise [Exception [, args [, traceback]]]
  • 使用raise语句自己触发异常
  • Exception 异常的类型(例如,NameError)参数标准异常中任一种
    args 自已提供的异常参数。
    traceback 在实践中很少使用该参数,跟踪异常对象。
一个异常可以是一个字符串,类或对象。 Python的内核提供的异常,大多数都是实例化的类,这是一个类的实例的参数。

定义一个异常非常简单,如下所示:
def functionName( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行

s = None
if s is None:
    raise NameError 
print 'is here?' #如果不使用try......except这种形式,那么直接抛出异常,不会执行到这里
  1. str.center(width[, fillchar])
  • 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串。默认填充字符为空格。
  • width -- 字符串的总宽度。
    fillchar -- 填充字符
  • 该方法返回一个原字符串居中,并使用空格填充至长度 width 的新字符串。
>>>str = 'runoob'
>>> str.center(20, '*')
'*******runoob*******'
>>> str.center(20)
'       runoob       '
  1. format
print("{0:{2}^{1}}".format("a", 10, "*"))

输出:
****a*****
  1. 字符串的比较
1、比较字符串是否相同:

==:使用==来比较两个字符串内的value值是否相同

is:比较两个字符串的id值。

2、字符串的长度比较

len():显示字符串的长度,返回数字整型。可以进行长度的比较。

3、使用比较运算符

>、<、> = 、< =、比较的规则为:从第一个字符开始比较,排序在前边的字母为小,当一个字符串全部字符和另一个字符串的前部分字符相同时,长度长的字符串为大。
  1. 转义字符:


    转义字符.png
  2. ** 运算是右结合的:

>>> 2**2**3
256
而非:
>>> 2**2**3
64

运算时先运算 2**3 = 8
再运算 2**8 = 256
  1. file.isatty()
    判断文件是否连接到一个终端设备,如果是,返回True,如果否,返回False。

  2. a = [0,1,2,3,4,5,6,7,8,9]
    b = a[i:j] 表示复制a[i]到a[j-1],以生成新的list对象
    b = a[1:3] 那么,b的内容是 [1,2]
    当i缺省时,默认为0,即 a[:3]相当于 a[0:3]
    当j缺省时,默认为len(alist), 即a[1:]相当于a[1:10]
    当i,j都缺省时,a[:]就相当于完整复制一份a了
    b = a[i:j:s]这种格式呢,i,j与上面的一样,但s表示步进,缺省为1.
    所以a[i:j:1]相当于a[i:j]
    当s<0时,i缺省时,默认为-1. j缺省时,默认为-len(a)-1
    所以a[::-1]相当于 a[-1:-len(a)-1:-1],也就是从最后一个元素到第一个元素复制一遍。所以你看到一个倒序的东东

  3. 链式比较:
    a < b < c 等价于 a < b and b < c
    而非 (a < b) < c

  4. for else
    当迭代的对象迭代完并为空时,位于else的子句将执行,而如果在for循环中含有break时则直接终止循环,并不会执行else子句。

for i in range(10):
    if i == 5:
        print 'found it! i = %s' % i
else:
    print 'not found it ...'

输出:
found it! i = 5
not found it ...

for i in range(10):
    if i == 5:
        print 'found it! i = %s' % i
        break
else:
    print 'not found it ...'

输出:
found it! i = 5
  1. str.isdigit()
  • 检测字符串是否只由数字组成。
  • 如果字符串只包含数字则返回 True 否则返回 False。
  1. str.isalpha()
  • 检测字符串是否只由字母组成。
  • 如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
  1. pow()
  • math.pow( x, y ) 或内置
  • pow(x, y[, z])
  • 函数是计算x的y次方,如果z在存在,则再对结果进行取模,其结果等效于pow(x,y) %z

注意:pow() 通过内置的方法直接调用,内置方法会把参数作为整型,而 math 模块则会把参数转换为 float。

>>> type(pow(2, 3))
<class 'int'>
>>> type(pow(2.0, 3))
<class 'float'>
>>> pow(2, 3)
8
>>> pow(2.0, 3)
8.0
>>> 8 == 8.0
True
>>> 8.0 == 8
True
  1. dict.get(key, default=None)
  • 返回指定键的值,如果值不在字典中返回默认值
  • key -- 字典中要查找的键。
    default -- 如果指定键的值不存在时,返回该默认值值。
  • 返回指定键的值,如果值不在字典中返回默认值None。
dict = {'Name': 'Zara', 'Age': 27}

print "Value : %s" %  dict.get('Age')
print "Value : %s" %  dict.get('Sex', "Never")

输出:
Value : 27
Value : Never
  1. str.split(str="", num=string.count(str))
  • 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
  • str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
    num -- 分割次数。默认为 -1, 即分隔所有。
  • 返回分割后的字符串列表。
str = "Line1-abcdef \nLine2-abc \nLine4-abcd";
print str.split( );       # 以空格为分隔符,包含 \n
print str.split(' ', 1 ); # 以空格为分隔符,分隔成两个

输出:
['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
['Line1-abcdef', '\nLine2-abc \nLine4-abcd']
ls =list({'shandong':200, 'hebei':300, 'beijing':400})
print(ls)

输出:
['shandong', 'hebei', 'beijing']

二、常见 Python 框架

  1. caffe:是一个清晰,可读性高,快速的深度学习框架
  2. RoboBrowser:轻量级爬虫、自动化测试库
  3. newspaper:python爬取新闻常用的库
  4. Grab:爬虫框架
  5. scipy:数据分析与处理
  6. pandas:数据分析与处理
  7. moviepy:视频处理
  8. prefile:代码性能分析
  9. openpyxl:读写excel
  10. Django:WEB框架
  11. PyGObject:图形界面
  12. wxPython:图形界面
思维导图

三、常用第三方库--jieba

基本用法

  1. 精准模式:
    将字符串分割成等量的中文词组,返回结果是列表类型。
>>>import jieba
>>>ls = jieba.lcut("全国计算机等级考试Python科目")
>>>print(ls)
['全国','计算机','等级','考试','Python','科目']
  1. 全模式:
    将字符串的所有分词可能均列出来,返回结果是列表
    类型,冗余性最大。
>>>import jieba
>>>ls = jieba.lcut("全国计算机等级考试Python科目", cut_all=True)
>>>print(ls)
['全国','国计','计算','计算机','算机','等级','考试','Python','科目']
  1. 搜索引擎模式:
    该模式首先执行精确模式,然后再对其中长词进一步切分获得最终结果。
>>>import jieba
>>>ls = jieba.lcut_for_search("全国计算机等级考试Python科目")
>>>print(ls)
['全国','计算','算机','计算机','等级','考试','Python','科目']
  1. 增加单词:
>>>import jieba
>>>jieba.add_word("Python科目")
>>>ls = jieba.lcut("全国计算机等级考试Python科目")
>>>print(ls)
['全国,'计算机','等级','考试','Python科目']

模式选择

搜索引擎模式更倾向于寻找短词语,这种方式具有一定冗余度,但冗余度相比全模式较少。 如果希望对文本准确分词,不产生冗余,只能选择jieba.lcut(s)函数,即精确模式。如果希望对文本分词更准确,不漏掉任何可能的分词结果,请选用全模式。如果没想好怎么用,可以使用搜索引擎模式。

实例

统计红楼梦词频,并输出前十五的词语和词频

import jieba
f = open("红楼梦.txt", "r")
txt = f.read()
f.close()
words = jieba.lcut(txt)
counts = {}
for word in words:
  if len(word) == 1: #排除单个字符的分词结果
    continue
  else:
    counts[word] = counts.get(word,0) + 1
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
for i in range(15):
  word, count = items[i]
  print ("{0} {1}".format(word, count))

输出:

宝玉 3748
什么 1613
一个 1451
贾母 1228
我们 1221
那里 1174
凤姐 1100
王夫人 1011
你们 1009
如今 999
说道 973
知道 967
老太太 966
起来 949
姑娘 941

排除无用词语:

excludes = {"什么","一个","我们","那里","你们","如今", \
"说道","知道","老太太","起来","姑娘","这里", \
"出来","他们","众人","自己","一面","太太", \
"只见","怎么","奶奶","两个","没有","不是", \
"不知","这个","听见"}
for word in excludes:
  del(counts[word])

四、数据结构与储存

数据结构

  1. 数据结构包括存储结构和逻辑结构。
  2. 同一种逻辑结构的数据可以采用不同的存储结构,但影响数据处理的效率。
  3. 数据结构:
    逻辑结构:线性结构{顺序、链表、栈、队列}、非线性结构{树、二叉树、图}〉、
    存储结构〈顺序、链接、索引〉
  4. 在树的结构中,一个结点所拥有的后件(子树)的个数称为该结点的度;所有结点中最大的度称为树的度;树的最大层次称为树的深度。
    例题:一棵树的度为4,其中度为4,3,2,1的结点的个数分别为2,3,3,求叶子结点的个数
    答案:16个(树状图法求解)
  5. 在二叉树的第k层上最多有2的(k-1)次方(k≥1)个结点。
    满二叉树的叶子节点数为 2的(n-1)次方个。
    深度(层数)为m的二叉树最多有2的m次方-1个结点。
    在任意一棵二叉树中,度数为0的结点(即叶子结点)总比度为2的结点多一个。
  6. 二叉树遍历:
    前序遍历:根左右
    中序遍历:左根右
    后序遍历:左右根
    参见
  7. 二分法查找最坏情况下,需要比较的次数为(log以2为底n的对数)次
  8. 树的根结点数量可以为0或1
  9. 关系表中的每一横行称为一个元组
  10. 相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和冗余性

数据库

  1. 数据库系统(DBS) :由数据座(数据)、数据库管理系统(软件)、数据库管理员(人员)、硬件平台(硬件)、软件平台(软件)五个部分构成的运行实体。
  2. 数据库系统的三级模式
    概念模式:数据库系统中全局数据逻辑结构的描述,是全体用户(应用)公共数据视图。
    外模式:也称子模式或用户模式,它是用户的数据视图,也就是用户所见到的数据模式,它由概念模式推导而出。
    内模式:又称物理模式,它给出了数据库物理存储结构与物理存取方法。
  3. 在数据库技术中, 为提高数据库的逻辑独立性和物理独立性, 数据库的结构被划分为用户级、 存储级和概念级。
  4. 数据库技术的根本目标是要解决数据的共享问题
  5. 数据结构作为计算机的一门学科,主要研究数据的逻辑结构、对各种数据结构进行的运算,以及数据的储存结构
  6. 数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和物理设计
  7. 对于数据库系统,负责定义数据库内容,决定存储结构和存取策略及安全授权等工作的是:数据库管理员
  8. 数据库系统依靠模式分级,各级模式之间的映射支持数据的独立性。

五、杂项(公共基础知识)

  1. Python是一种解释型、面向对象、动态数据类型的高级程序设计语言
  2. 程序设计风格:清晰第一,效率第二。
    结构化程序设计原则:自顶向下,逐步求精,模块化,限制使用goto语句(Python无 goto 语句)。
    模块设计要求:高内聚,低耦合。
  3. 面对对象基本特点:继承性、多态性、封装性
  4. 软件的概念:
    软件包括程序、数据、及相关文档的完整集合。
    机器能执行的是程序、数据,不能执行的是文档。
    工程化的3个要素:方法、工具、过程
    软件的生命周期:提出、实现、使用、维护、停止使用、退役
    原则:抽象、信息屏蔽、模块化
    具有:局部化、确定性、一致性、完备性、可验证性
  5. 在程序流程图中,用带有箭头的线段表示控制流;在数据流程图中,用带有箭头的线段表示数据流。
  6. 软件测试目的:尽可能多地发现程序中的错误,不能也不可能证明程序没有错误。
  7. 测试方法:白盒测试(测试软件内部方法:逻辑覆盖基本路径测试)黑盒测试(测试软件外部即在软件接口处进行,主要完成软件功能验证方法:等价步、划分法、边界值、分析法、错误推断法、因果图等)
  8. 软件设计包括软件的结构、数据接口和过程设计(系统结构部件转换成软件的过程描述)
  9. 软件开发模型包括 Ⅰ、瀑布模型 Ⅱ、扇形模型 Ⅲ、快速原型法模型 Ⅳ、螺旋模型Ⅰ、Ⅲ、Ⅳ
  10. 软件生命周期的主要活动阶段:需求分析
  11. pip升级pip:pip install -U pip
  12. 忘记模块用法?使用 dir(模块名) 即可查看该模块包含的函数;使用help(模块名)即可查看详细文档
    dir

    help
  1. 整数类型有4种进制表示,十进制、二进制(0b)、八进制(0o)、十六进制(0x)
  2. 软件需求规格说明书的作用不包括:软件可行性研究的依据
  3. 将E—R图转换到关系模式时,实体与联系都可以表示成
  4. 数据处理的最小单位是数据项
  5. 软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指:系统结构部件转换成软件的过程描述
  6. 软件开发离不开系统环境资源的支持,其中必要的测试数据属于:辅助资源
  7. 下列路径表示错误的是:F:\PythonTest\abc.txt
    可用表示方式:F:\PythonTest\abc.txt F:/PythonTest/abc.txt F://PythonTest//abc.txt
  8. 映射类型是“键值”数据项的组合,每个元素是一个键值对,元素之间是无序的。
  9. binary 二进制的
    octal 八进制的
    hexadecimal 十六进制的
    decimal 十进制的
  10. 如果改变一个数值类型变量的值,变量的内存地址就会改变
  11. 单分支结构指只有if语句,没有else语句的分支结构
  12. 以下选项,不属于程序流程图基本元素的是:
    A.判断框
    B.循环框
    C.连接点
    D.起始框
    答案:B
  13. 函数:
    函数是一种功能抽象
    使用函数后,代码的维护难度降低了
    函数名可以是任何有效的Python标识符
    使用函数的目的只是为了增加代码复用(错误)
  14. 软件开发的结构化生命周期方法将软件生命周期划分成:
    定义、开发、运行维护
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容