目录
前言
对于python 二级的难易大家往往褒贬不一,但若是掌握了其中规律,证书会变得很容易拿到
一、选择题部分知识难点
盲目的对选择题狂刷只会事倍功半,需要对难点错点着重注意
公共基础部分
树的总的结点数为树中所有结点的度数之和再加1
如度为3,2,1的结点个数为3,0,4;有 3+0+4+n=3x3+2x0+1x4+0xn+1
总结点数 | 等于 | 所有结点度数之和 | 加1 |
3+0+4+n | = | 3x3+2x0+1x4+0xn | +1 |
度数为0的结点数即叶子结点数
对任何一棵二叉树,度为0的结点(即叶子结点)总是比度为2的结点多一个。如若二叉树共有375个结点,度为2的结点个数为187,则度为0的结点个数为187+1=188,则度为1的结点个数为375-187-188=0。
二叉树遍历可以分为3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。如二叉树的前序序列为ABCDEF,可确定二叉树的根结点为A,若中序序列也为ABCDEF,可知以A为根的这棵二叉树不存在左子树,且由前序序列和中序序列相同可判断出每棵子树均不存在左子树(即只有右子树),后序序列先访问处于右子树上的结点F
整数在计算机中存储和运算通常采用的格式是补码
设循环队列的存储空间为Q(1,m),当front=rear=m时,循环队列为空;当front=rear且不等于m时,循环队列可能为空,也可能为满。当为空时,可以插入元素;当为满时,插入元素会发生“上溢”错误。
对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。一个对象通常可由对象名(标识)、属性和操作三部分组成。
软件工程包含方法、工具和过程3个要素。方法是完成软件开发各项任务的技术手段,工具支持软件的开发、管理、文档生成,过程支持软件开发的各个环节的控制、管理。
黑盒测试又称功能测试或数据驱动测试,着重测试软件功能。黑盒测试依据需求规格说明书的功能描述
概念数据模型,简称概念模型,它是一种面向客观世界、面向用户的模型,它与具体的数据库管理系统和具体的计算机平台无关。概念模型着重于对客观世界复杂事物的描述及对它们内在联系的刻画。目前,最著名的概念模型有实体-联系模型和面向对象模型。
python语言知识
python是一种脚本解释语言,与C/C++和Java有很大的区别,没有主函数的说法,python整个程序自顶向下顺序执行
在python中,字符编码以Unicode编码存储。chr(x)返回Unicide编码对应的字符,ord(x)函数返回单字符x对应的Unicode编码
文件包括文本文件和二进制文件两种类型。Рython对文本文件和二进制文件采用统一的操作步骤,即“打开-·操作-关闭”。采用文本方式读入文件,文件经过编码形成字符串,打印出有含义的字符;采用二进制方法打开文件,文件被解析为字节流。
二维数据也称表格数据,由关联关系数据构成
局部变量指在函数内部定义的变量,仅在函数内部有效,且作用域也在函数内部,当函数退出时变量将不再存在。全局变量一般指在函数之外定义的变量,在程序执行全过程有效,一般没有缩进。全局变量和局部变量的命名可以相同。全局变量在函数内部使用时,需要提前使用保留字global声明,语法形式: global <全局变量>
python语言保留字(关键字)
and,as,assert,async,await,break,class,continue,def,eilf,else,except,False,finally,for,from,
global,if,import,in,is,lambda,None,nonlocal,not,or,pass,raise,return,True,try,while,with,yield
用关键字 class 来定义类
进制表示
后缀区分
B:二进制
H:十六进制
O:八进制
D:十进制
前缀区分
0x:十六进制(零)
0:八进制(零)
0b:二进制(零)
列表操作
ls.copy():生成一个新列表,复制 ls 的所有元素
ls.remove(x):删除列表 ls 中出现的第一个元素x
ls.append(x):在 ls 最后增加一个元素
ls.reverse():反转列表 ls 中所有元素,该方法本身无返回值,即直接在原列表中改变
字典操作
字典使用花括号({})建立,键值对之间没有顺序且不能重复,键必须是唯一的,必须是不可变数据类型(不能为列表),值可以是任何数据类型。键与值都不可为未加引号的保留关键字
文件读写部分
writelines()方法是将一个元素为字符串的列表整体写入文件;
write()方法是向文件写入一个字符串或字节流,每次写入后会记录一个写入指针;
二维列表对象输出为csv格式文件采用遍历循环和字符串的join()方法相结合,如:
# 将ls列表中内容遍历
f=open('cpi.csv','w') # csv 格式每列以逗号分开,每行以换行符分开
ls=[['语文','英语','科学'],['数学','物理'],['英语','日语']]
s=','
for row in ls: # row为ls中第一层,如['语文','英语','科学']
f.write(s.join(row)+'\n')
# str.join(se) 通过指定字符连接序列中元素后生成的新字符串
'''
join把每层row中元素以 s 的符号分隔,后在row末尾加上换行符,如写入为:
语文,英语,科学
数学,物理
英语,日语
'''
f.close()
str.replace(old,new) # 用new换old,可print打印出结果,但不会改变原str内容
open('文件名','模式')
r:只读模式,如果文件不存在,返回异常FileNotFoundError,默认值。
x:创建写模式,文件不存在则创建,存在则返回异常FileExistsError。
w:覆盖写模式,文件不存在则创建,存在则完全覆盖原文件。
a:追加写模式,文件不存在则创建,存在则在原文件最后追加内容。
f.read():从文件中读入整个文件内容
f.readline():从文件中读入一行内容
f.readlines():从文件中读入所有行,以每行为元素形成一个列表
f.seek():改变当前文件操作指针的位置 seek(偏移量,起始位置)
f=open(' 文件名','r')函数打开一个文件,并返回可以操作这个文件的变量f,r只是表明该文件以读的方式打开,若想输出文件内容,需要把文件的内容读入,如f1=f.read
偏移量:需要移动偏移的字节数 起始位置:默认为0,代表从开头算起,1为从当前位置算起,2为从文件末尾算起
一维数据采用线性方式组织,在python中主要采用列表形式表示,集合不属于线性结构,二维数据采用二维表格方式组织
第三方库汇总
python 数据分析及可视化 的第三方数据库有:
numpy,scipy,pandas,matplotlib,TVTK,mayavi
python web开发方向 的第三方生态库有:
Django,pyramid,Flask
python 自然语言处理 的第三方库有:
snowNPL,loso
python 机器学习 的第三方库有:
Tensorflow
算数运算
- input()返回类型为字符串,需用eval(input())、int(input())或float(input())处理后才可进行数值运算 eval()实现各种数据类型与str之间的转换,字符串中包含的是什么,通过eval函数就可以输出什么
- 算数运算符'//'表示整数除法,返回不大于结果的一个最大整数,而‘/’则单纯表示浮点数除法,返回浮点结果
- python语言中,由于为二进制计算,1/2、1/4、1/8可以被精确表示,而1/5、1/10等变成了循环小数。如 >>>print(0.1+0.2==0.3) False
- complex(a)返回 a 的复数,如 >>>a=10.9 >>>print(complex(a)) (10.9+0j)
- random.uniform(a,b) 生成一个[a,b]之间随机小数
- x = '5' x*4 为将字符 5 复制4次,即‘5555’
- ‘A’ 的ASCLL码值为65,B,C...依次 ‘a’ 为97
二、程序编写题规律
format 格式化输出
print('{:4.3f}'.format(a)) #表示占位format输出宽度为4(右对齐)的3位小数,其中4可省略,表示自动调整适当宽度
print('{:b}'.format(n) 表示输出 n 的二进制数
对于整数类型,输出格式包括6种: b:输出整数的二进制方式; c:输出整数对应的Unicode字符; d:输出整数的十进制方式; o:输出整数的八进制方式; x:输出整数的小写十六进制方式; X:输出整数的大写十六进制方式。(十六进制 a-f 字符大小写)
s = input("请输入一个字符串:")
print("{:*^30}".format(s))
# 格式为print('{引导符 填充符号 字符填充方式 输出宽度}'.format(字符))
# ':'为固定引导符,填充符号可任意输入,填充方式有 < 左对齐、 > 右对齐、 ^ 居中对齐
# 例:运行输入 abcdefg ,输出结果为 ***********abcdefg************
a,b = a+b,a
# 此种赋值方式两者运算同步进行,无先后之分,即 a = a+b 与 b = a 同步进行eval() 可灵活转换格式用于数学计算
pow(x,y) 意为 x 的 y 次方
调用random库随机输出
import random #调用 random 库
brandlist = ['三星','苹果','vivo','OPPO','魅族']
random.seed(0) #设置初始化随机数种子,可重复再现相同的随机数序列
name = brandlist[random.randint(0,4)] #random.randint(a,b)产生一个[a,b]之间的随机整数
print(name)
分支判断
if 条件 :
结果
elif 条件:
结果
elif 条件:
...
else:
结果
fo = open("PY202.txt","w")
def prime(num):
for i in range(2,num): # 1与其本身除外
if num%i==0:
return False
return True
ls = [51,33,54,56,67,88,431,111,141,72,45,2,78,13,15,5,69]
lis = []
for i in ls:
if prime(i) == False:
lis.append(i) #为False则意味着能被除1与其本身外的其他数整除,非素数
fo.write(">>>{},列表长度为{}".format(lis,len(lis)))
fo.close()
jieba分词的使用
import jieba #jieba分词
s = '我爱老师' # jieba 分词只能分词字符串类型,不可为列表
ls = jieba.lcut(s) #jieba.lcut()函数返回的是一个列表,且列表中每个元素都是一个中文词语
for i in ls[::-1]: #列表切片 ls[start:end:step] [::-1] 表示列表的全部内容并以-1步长排序
print(i,end='') #print(i,end='任意字符') 可以让print免除换行输出,且以 任意字符 连接
# 输出为 老师爱我
len(s) 可得中文字符长度
len(jieba.lcut(s)) 可得分词后的词语数,若包含标点符号,则标点符号也算词语数
列表切片
>>>list=[1,2,3,4,5]
>>>list[1:3] #索引从0开始,冒号右边不取
[2, 3]>>>list[:]
[1, 2, 3, 4, 5]>>>list[::2]
[1, 3, 5]>>>list[::-1]
[5,4,3,2,1]
>>>list.reverse()
>>>list
[5, 4, 3, 2, 1]
turtle库图形绘制
import turtle #引入图形绘制turtle库
turtle.pensize(2) #使用二号笔绘制
for i in range(3): #三次循环绘制三条线
turtle.seth(120*i) #turtle.seth(角度) 以水平向右为基准逆时针度数
turtle.fd(100) #turtle。fd(长度) 以像素为单位绘制任意长度直线,值为负数时表示向相反
#方向绘制
turtle.exitonclick() #点击任意位置后退出图像绘制页面
from turtle import * #可直接使用项目名称,如line 3,4,5
for i in range(5):
fd(200)
right(144) #以水平向右为基准,顺时针旋转度数;left为逆时针
exitonclick() #点击后关闭画图页面
import turtle
turtle.color('red','yellow') # 绘图所用颜色 前者为线条颜色,后者为填充颜色
turtle.begin_fill() # 填充开始
for i in range(36):
turtle.fd(200)
turtle.left(170)
turtle.end_fill() # 填充结束
import turtle 是导入 turtle 包,不能使用未声明的变量。因此,要对每项加上包的前缀。如 turtle.Pen
from turtle import * 未导入turtle包,但实际上从这个命名空间导入了所有的成员,所以直接使用命名空间内已经定义好的项目名称即可。如直接使用 Pen
统计元素个数
‘统计元素个数’问题非常适合采用字典类型表达,即构成‘元素:次数’的键值对
str_1 = str.split('任意符号') #对字符串可用split()方法生成以 任意符号 为分界的列表
# 如>>>ss='A B C D E F G'
>>>s_1=s.split(' ')
>>>s_1
['A', 'B', 'C', 'D', 'E', 'F', 'G']扩展:split 方法以多种符号分割
>>>import re
>>>re.split('[,./;]','A,B.C/D;E')
['A', 'B', 'C', 'D', 'E']str.strip([cahrs])
一、默认用法:去除空格
str.strip() : 去除字符串两边的空格
str.lstrip() : 去除左边的空格
str.rstrip() : 去除字符串右边的空格
注:此处的空格包含'\n', '\r', '\t', ' '
输入型数据统计
# 对输入的以空格分开的序列进行元素个数统计
fo = open("元素个数统计.txt","w")
txt = input("请输入类型序列: ")
split_txt=txt.split(' ')
d = {} # 创建字典变量d,利用‘d[键]=值’方式为字典增加新的键值对变量
for i in split_txt:
d[i]=d.get(i,0)+1 """ d.get(i,k)方法:判断字典 d 中是否存在键 i ,存在则返回该键的值,不
存在则返回所设置的值 k """
ls = list(d.items()) # d.item() :使字典形成每个元素都是一个键值对形成的元组 list:构建列表
ls.sort(key=lambda x:x[1], reverse=True) """ 按照列表中ls[1]的大小进行排序 reverse值为True为
从大到小排序,为False为从小到大排序 """
for k in ls:
fo.write("{}:{}\n".format(k[0], k[1])) # 遍历ls,format占位输出
fo.close()
给定文本型数据统计
fi = open('小女孩.txt','r')
fo = open("小女孩字符频次统计.txt","w")
fi_1=fi.read()
d = {}
exclude = ",。!?、()【】<>《》=;:+-*——“”···‘’"
for word in fi_1:
if word in exclude: # 遍历循环判断跳过标点符号统计
continue
else:
d[word]=d.get(word,0)+1 # 字符统计计数
ls=list(d.items())
ls.sort(key=lambda x:x[1],reverse=True)
fo.write("{}:{}".format(ls[0][0],ls[0][1])) # 输出字符出现最多的及其数量
fo.close()
fi.close()
# 计入标点符号,不计入回车符
fi = open('小女孩.txt','r')
fo = open("小女孩字符频次输出.txt","w")
txt = fi.read()
d = {}
for word in txt:
d[word]=d.get(word,0)+1
del d['\n'] # 字符统计不包括回车符
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 此行可以按照词频由高到低排序
for i in range(10):
fo.write('{}'.format(ls[i][0])) # 输出字符数前十的
fi.close
fo.close
#计入标点符号,不计入换行符和空格
fi = open('小女孩.txt','r')
fo = open('小女孩-频次排序.txt','w')
txt = fi.read()
d = {}
for word in txt:
d[word]=d.get(word,0)+1
del d[' '] # 删除空格
del d['\n'] # 删除换行
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 此行可以按照词频由高到低排序
for i in range(len(ls)): # 遍历列表ls长度次
fo.write('{}:{}'.format(ls[i][0],ls[i][1]))
fi.close
fo.close
fo = open("PY202.txt","w")
data = input("请输入课程名及对应的成绩:") # 课程名 考分
course_score_dict={}
while data:
course,score=data.split(' ')
course_score_dict[course]=eval(score)
data = input("请输入课程名及对应的成绩:")
course_list=sorted(list(course_score_dict.values())) #字典的 values() 方法返回字典所有值,
#sorted()函数默认生成从小到大排列的列表
max_score,min_score=course_list[-1],course_list[0]
average_score=sum(course_list)/len(course_list)
max_course,min_course='','' #赋空值
for item in course_score_dict.items(): items() 方法使字典转换为键值对的元组
if item[1] == max_score:
max_course=item[0]
if item[1] ==min_course:
min_course=item[0]
fo.write("最高分课程是{} {}, 最低分课程是{} {}, 平均分是{:.2f}".format(max_course,max_score,min_course,min_score,average_score))
fo.close()
'''
fi=open('earpa001.txt','r')
fo=open('earpa001_count1.txt','w')
d = {}
for line in fi:
split_data=line.strip('\n').split(',')
floor_area=split_data[-2]+'-'+split_data[-1]
if floor_area in d: #等效于d[s]=d.get(s,0)+1
d[floor_area]+=1
else:
d[floor_area]=1
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 该语句用于排序
#for i in ls:
# fo.write('{},{}\n'.format(i[0],i[1]))
for i in range(len(ls)):
fo.write('{},{}\n'.format(ls[i][0],ls[i][1]))
fi.close
fo.close
'''
fi=open('earpa001.txt','r')
fo=open('earpa001_count.txt','w')
d = {}
for line in fi:
split_data=line.strip('\n').split(',')
floor_area=split_data[-2]+'-'+split_data[-1]
d[floor_area]=d.get(floor_area,0)+1
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 该语句用于排序
for i in range(len(ls)):
fo.write('{},{}\n'.format(ls[i][0],ls[i][1]))
fi.close
fo.close
fi = open("论语.txt",'r')
fo = open("论语-原文.txt",'w')
flag=False
for line in fi:
if '【' in line:
flag=False
if '【原文】' in line:
flag=True
continue
if flag==True: #标识符判断
fo.write(line.lstrip())
fi.close
fo.close
fi = open("论语-原文.txt", 'r')
fo = open("论语-提纯原文.txt", 'w')
for line in fi:
for i in range(1,23):
line=line.replace('({})'.format(i),'') # line.replace(s,d) 替换s为d
fo.write(line)
fi.close
fo.close
数据处理输出
fo = open("数据显示.txt","w")
data = input("请输入一组人员的姓名、性别、年龄:") # 姓名 性别 年龄
women_num=0 #设置空量
age_amount=0
person_num=0
while data: # 空字符串的布尔值为False,结束循环
name,sex,age=data.split(' ') # 以空格分割字符串为三部分列表元素
if sex == '女': # 条件判断
women_num+=1
age_amount+=int(age) #对字符串进行强制类型转换
person_num+=1
data = input("请输入一组人员的姓名、性别、年龄:")
ave_age=age_amount/person_num
fo.write("平均年龄是{:.1f} 女性人数是{}".format(ave_age,women_num))
fo.close()
# 打开csv文件并写入列表
fi=open('PY301-vacations.csv','r')
ls = []
for line in fi: # 遍历表格的每一行
ls.append(line.strip('\n').split(',')) # 去除每行首尾换行符并以逗号分割字符串成列表
fi.close
# 输入名称输出假日信息
name=input('请输入节日名称:')
for line in ls:
if name==line[1]:
print("{}的假期位于{}-{}之间".format(line[1],line[2],line[3]))
# 输入多个序号输出假日美观信息
s=input('请输入节假日序号:').split(' ')
fi.close
while True:
for i in s:
for line in ls:
if i==line[0]:
print("{}({})假期是{}月{}日至{}月{}日之间".format(line[1],line[0],line[2][0]+line[2][1],line[2][2]+line[2][3],line[3][0]+line[3][1],line[3][2]+line[3][3]))
s=input('请输入节假日序号:').split(' ')
# 输入多个序号判断有无后输出假日美观信息
s=input('请输入节假日序号:').split(' ')
fi.close
while True:
for i in s:
flag=False # 标志符
for line in ls:
if i==line[0]:
print("{}({})假期是{}月{}日至{}月{}日之间".format(line[1],line[0],line[2][0]+line[2][1],line[2][2]+line[2][3],line[3][0]+line[3][1],line[3][2]+line[3][3]))
flag=True
if flag==False:
print('输入节假日编号{}有误!'.format(i))
print('输入节假日编号%s有误!'% i)
s=input('请输入节假日序号:').split(' ')
总结
以上就是今天要讲的内容,python二级其实很简单,找对方法是关键