python《信息安全专业导论》期末考试知识点总结
1 ###数据类型:1.数字类型(不可变):整型(int)、浮点型(float)、布尔型(bool)、复数类型(Complex) 2 # int*float=float、int/int=float、int*str=str(3*'a'='aaa') 3 # 2.字符串(str)(包含在引号中的字符序列)(不可变) 4 # 3.序列:列表(可变)(x=[a,b,c···]) 5 # 元组(不可变)(x=(a,b,c···)) 6 # 字典(可变)(x=[a:h,b:i,c:j···]) 7 # 4.集合(可变/不可变) 8 9 ###运算符(优先级从高到低):0.() 10 # 1.[表达式]:abs(求绝对值) 11 # min(求最小值) 12 # max(求最大值) 13 # sqrt(开方) 14 # len(求字符串长度或列表、元组、字典的元素个数) 15 # 2.x[i](索引运算符)(访问字符串x的第i个字母或列表、元组、字典x的第i个元素) 16 # (i是索引:该字符相对于第一个字符的偏移量,第一个字符索引为0) 17 # 3.**(乘幂) 18 # 4.+x,-x(正号,负号) 19 # 5.*、/、//、%(乘法、除法、整除、取模/求余数) 20 # 6.+、-(加法、减法) 21 # 7.in、not in、<、<=、>、>=、!=、==(布尔运算符) 22 # 8.not x(布尔非) 23 # 9.and(布尔与) 24 # 10.or(布尔或) 25 26 ###列表运算符(一定有返回值):in lst、not in lst、lst+lst、lst*(int)、lst[i]、len(lst)、min(lst)、max(lst)、sum(lst) 27 # 列表方法(不一定有返回值):list.append(i)(把i添加到lst尾部) 28 # (print(无返回值的方法)会 lst.count(i)(返回i在lst中出现的次数)(有返回值) 29 # 输出None) lst.index(i)(返回i在lst中第一次出现的索引号)(有返回值) 30 # lst.insert(index,i)(在lst中索引index之前插入i)) 31 # lst.pop()(移除lst中的最后一项) 32 # lst.remove(i)(移除lst中的第一个i) 33 # lst.reverse()(将lst的项逆序排列) 34 # lst.sort()(将lst排序) 35 36 ###类型转换:int()、float()、str() 37 38 ###调用python库:1.import x(调用x库)(使用y方法:x.y) 39 # 2.from x import y(只调用x库的y方法)(使用y方法:y) 40 # 3.from x import *(调用x库的所有方法和变量名)(使用y方法:y) 41 42 ###输入与输出:print(i)(输出变量i的值) 43 # print(i,j,sep=';')(输出i,j,并用;间隔开) 44 # print(i,end='')(输出i,用空格结尾) 45 # print('a,{}:c,d:{},f'.format(b,e))(单引号之间是输出内容,大括号依次用format括号中的变量替换, 46 # 输出结果为a,b:c,d:e,f)(大括号中可以指定输出方式:{:3。2}为占三个宽度输出并保留两位小数, 47 # {:f/d}是以浮点型/整型输出,{:b/c/d/o/x}是以二进制/字符串/十进制/八进制/十六进制输出) 48 # x=input("")(输入一个字符串并赋值给变量x)(引号中为提示语,可省略) 49 # x=eval(input())(输入一个字符串并将其转换成整型后赋值给变量x)(引号中为提示语,可省略) 50 # x=list(input().split)(将用空格隔开的元素依次储存在列表中) 51 52 ###控制结构:if:1.if(判断条件): 53 # 缩进语句块 54 # elif(判断条件): 55 # 缩进语句块 56 # else: 57 # 缩进语句块 58 # 非缩进语句 59 #判断条件之间应互斥,执行if语句时先判断,当一个条件为True时执行对应的缩进语句,所有条件判断都为False时执行else对应的缩进语句块 60 61 ###循环结构:for···in···(遍历控制):1.for x in a(a为字符串、列表、元组、字典、集合): 62 # 缩进语句块(循环次数为a中元素个数) 63 # 非缩进语句 64 # 2.for x in range(a,b,c): (在a到b-1的范围中循环,c为步幅) 65 # 缩进语句块 66 # 非缩进语句 67 # while(条件控制):while (判断条件): (必须先初始化变量) 68 # 缩进语句块(当条件判断为True的时候执行) 69 # 非缩进语句 70 # while True: (循环无限次) 71 # 缩进语句块() 72 # 非缩进语句 73 74 ###迭代控制语句:1.break(执行break语句时,停止当前循环迭代,退出循环,继续执行紧跟在循环语句后面的语句,如果中断语句 75 # 在嵌套循环模式的循环体代码中,则只中断包含break语句的最内层循环) 76 # 2.continue(终止当前最内层的循环迭代,与break语句不同的是,执行continue语句后继续执行当前最内层 77 # 循环的下一次迭代) 78 #简单来说就是break停止整个循环,continue停止这一次迭代 79 80 ###定义函数:def x(a,b···): (定义一个函数x,带有若干参数a,b···) 81 # 缩进语句块(将变化后的结果赋值给变量y) 82 # ruturn y (将变量y返回) 83 #调用函数:z=x(a,b···)(最终会把变量y的值赋给变量z) 84 85 ###字符串切割:s[i:j](是字符串s从i到j-1结束的子字符串)(i=0时可省略i变为s[:j],j为最后一位时可省略j变为s[i:]) 86 # s[-i:-j](是字符串s从-i到-(j-1)结束的子字符串)(正向i从0开始,逆向i从1开始) 87 # 88 89 ###字符串方法:a.find(i)(检查i是否是a的子字符串,如果是,返回字符串a中第一次出现i的位置,否则返回-1) 90 # a.count(i)(返回i作为子字符串在a中出现的次数) 91 # a.replace(i,j)(返回一个副本,其中所有的子字符串i被替换为j,不改变a) 92 # a.split(i j)(切开所有空格,将所得结果储存在列表中,并返回该列表) 93 94 ###打开文件:a=open('x.txt','r')(打开名为x的文件并将其赋值给变量a)(读取模式) 95 # a=open('x.txt','w')(打开名为x的文件并将其赋值给变量a)(写入模式,如果文件已存在,则清除原内容) 96 # a=open('x.txt','a')(打开名为x的文件并将其赋值给变量a)(附加模式,将数据内容附加写入到文件末尾) 97 # a=open('x.txt','r')(打开名为x的文件并将其赋值给变量a)(b)(二进制模式) 98 99 ###文件对象方法:a.read(n)(从a中读取n个字符或直到文件末尾,并把读取的字符作为一个字符串返回) 100 # a.read()(从a中读取全部字符,并把读取的字符作为一个字符串返回) 101 # a.readline()(从a中读取一行数据,直到包括换行符或直到文件末尾,并把读取的字符作为一个字符串返回) 102 # a.write(s)(把字符串s写入到a中) 103 # a.close()(关闭文件) 104 105 ###字典:(可变类型)也叫映射,包含一系列键值对,用:隔开。比如x={a:b,c:d,e:b},索引键时会输出对应的值,比如x[a]=b,x[e]= 106 # (键和值都为字符串或已初始化的变量) 107 108 ###字典运算符:与列表运算符基本相同,不能使用+和*,由于字典没有顺序,也不能使用索引运算符。 109 110 ###字典方法:假设字典x{a:b,c:d,e:a} 111 # x.pop(a/c/e)(移除字典x的某个键) 112 # y.update(x)(将字典x的键值对添加到字典y中)(键相同时x中的键值对会覆盖掉y中的键值对) 113 # x.keys()(返回字典x的所有键) 114 # x.values()(返回字典x的所有值) 115 # x.items()(返回字典x的所有键值对) 116 117 ###集合:(不可变类型)用大括号定义,x={a,b,c}具有数学集合的全部特征,不允许重复项 118 119 ###集合方法:x.add(a)(把a添加到集合x中) 120 # x.remove(a)(把a从集合x中删除) 121 # x.clear(清空集合) 122 123 #随机方法:(调用random库)random.shuffle(x)(把列表x混排一次) 124 # y=random.choice(x)(从列表x中随机选择一项赋值给y) 125 # y=random.sample(x,n)(从列表x中随机选择n项组成列表并赋值给y) 126 127 ###名称空间:每个函数都有自己的一个名称空间,在主函数中定义的变量(全局变量)与在自定义函数中定义的同名变量(局部变量)互不干扰。 128 # 在自定义函数中使用全局变量时首先应该通过global x来声明变量x使用全局变量 129 130 ###递归:递归函数是调用自身的函数。包含1.一个或多个基本情况,为递归提供停止条件。 131 # 2.一个或多个递归调用,相对与输入参数,其输出参数必须更接近基本情况。 132 133 ###几个实例 134 #斐波那契数列 135 def fib(n):#累加器 136 previous=1 137 current=1 138 i=1 139 while i<n: 140 previous,current=current,previous+current 141 i+=1 142 return current 143 def rfib(n):#递归 144 if n<2: 145 return 1 146 return rfib(n-1)+rfib(n-2) 147 #二分查找 148 from collections import deque 149 def binary(x, y):#定义一个函数,带两个输入参数x,y。x为待检索列表,y为要检索的对象 150 first = 0#将first初始化为0 151 152 last = len(x)#将列表的长度赋值给last 153 x.sort()#将列表排序 154 for j in range(last):#迭代last次 155 i = (first+last)//2#取first和last的平均值 156 a = x[i]#把x的第i项赋值给a 157 if(y > a):#将y与a比较,如果y>a 158 first = i#把first赋值给i,舍弃i前的列表 159 elif(y < a):#将y与a比较,如果y<a 160 last = i #把last赋值给i,舍弃i后的列表 161 elif(y == a):#如果y=a 162 return True#返回真,即存在 163 return False#如果迭代结束后仍未搜索到,返回假 164 #快速排序 165 def quicksort(s):#定义函数 166 if len(s) < 2: 167 return s#如果列表小于2,不用排序 168 p = s[0]#选一个基准值 169 l = []#小于基准值的列表 170 e = []#等于基准值的列表 171 r = []#大于基准值的列表 172 while len(s) > 0:#当列表不为空时 173 if s[-1] < p:#如果列表最后一项小于基准值 174 l.append(s.pop())#把列表最后一项加入l中并将其从列表中删除 175 elif s[-1] == p: #如果列表最后一项等于基准值 176 e.append(s.pop()) # 把列表最后一项加入e中并将其从列表中删除 177 else: # 如果列表最后一项大于基准值 178 r.append(s.pop()) # 把列表最后一项加入r中并将其从列表中删除 179 quicksort(l)#递归l 180 quicksort(r)#递归r 181 s.extend(l) 182 s.extend(e) 183 s.extend(r)#经过上述变化后s是空列表,将l,e,r依次加入到s中 184 return s #返回s 185 186 #广度优先搜索 187 #题目:假设你经营着一个芒果农场,需要寻找芒果销售商,以便将芒果卖给他,你的人际关系如图,已知名字最后一位字母是m的是芒果 188 # 销售商,请找到和你关系最近的芒果销售商 189 graph = {} 190 graph["you"] = ["alice", "bob", "claire"] 191 graph["bob"] = ["anuj", "peggy"] 192 graph["alice"] = ["peggy"] 193 graph["claire"] = ["thom", "jonny"] 194 graph["anuj"] = {} 195 graph["peggy"] = {} 196 graph["thom"] = {} 197 graph["jonny"] = {}#以上部分为用字典构建图 198 199 def person_is_seller(name): 200 return name[-1] == 'm'#只有最后一行字母是m才返回 201 202 def search(name):#定义一个搜索函数 203 search_queue = deque()#创建一个队列 204 search_queue += graph[name]#把初始节点的子节点加入队列 205 searched = []#定义一个已搜索列表 206 while search_queue:#当队列不为空时一直循环 207 person = search_queue.popleft()#将队列最左边的元素赋值给person并将其从队列中删除 208 if person not in searched:#如果person未被检索 209 if person_is_seller(person):#如果person满足条件 210 print(person, "is a mango seller!")#输出 211 return True#返回真 212 else:#如果person不满足条件 213 search_queue += graph[person]#将person的子节点加入队列 214 searched.append(person)#将person标记为已检索 215 return False#如果直到循环结束都没有返回真就返回假,即未搜索到 216 search("you")#运行搜索函数 217 218 #深度优先搜索 219 graph = {} 220 graph["you"] = ["alice", "bob", "claire"] 221 graph["bob"] = ["anuj", "peggy"] 222 graph["alice"] = ["peggy"] 223 graph["claire"] = ["thom", "jonny"] 224 graph["anuj"] = {} 225 graph["peggy"] = {} 226 graph["thom"] = {} 227 graph["jonny"] = {} # 以上部分为用字典构建图 228 229 def person_is_seller(name): 230 return name[-1] == 'm' # 只有最后一行字母是m才返回 231 232 233 def search(name): # 定义一个搜索函数 234 search_queue = [name]#用列表来模拟栈 235 search_queue += graph[name] # 把初始节点的子节点加入列表 236 searched = [] # 定义一个已搜索列表 237 while search_queue: # 当列表不为空时一直循环 238 person = search_queue[-1]#把列表最后一项赋值给person 239 search_queue.pop()#把列表最后一项删除 240 if person not in searched: # 如果person未被检索 241 if person_is_seller(person): # 如果person满足条件 242 print(person, "is a mango seller!")#输出 243 return True#返回真 244 else: # 如果person不满足条件 245 search_queue += graph[person] # 将person的子节点加入列表 246 searched.append(person) # 将person标记为已检索 247 else:#如果person已检索 248 search_queue.pop() # 把列表最后一项删除 249 return False # 如果直到循环结束都没有返回真就返回假,即未搜索到 250 search("you")#运行搜索函数