一、基础编程
Python输入输出
01_Print输出函数
print()用于打印输出,是最常见的一个函数 语法:print(*objects, sep=' ',end=\n', file=sys.stdout, flush=False) 参数说明: 1、objects:表示输出一个或者多个对象。输出多个对象需要用sep分隔 2、sep:输出多个对象时使用sep分隔,默认值是一个空格 3、end:输出结束以end结尾,默认值是换行符,可以换成其他字符串 4、file:要写人的文件对象,默认为终端输出 5、flush:输出是否被缓存通常决定于file,但如果fush关键字参数为True,流会被强制刷新
02_Input输入函数
语法:input([prompt]) 参数说明:prompt:提示信息 输入的变量均为 str 字符串类型 int()可以转换成整数
常量、变量与运算符
01_常量与变量
常量:程序中使用的具体的数、字符。在运行过程中,值无法更改 变量:表示一个存储单元,其中存储的值可以修改 变量命名: 1、只能包含字母、数字、下划线 2、只能以字母、下划线开头 3、不要使用关键字作为变量名称
02_基础数据类型
整数:int 浮点数:float 字符串:str 布尔:bool 获取变量类型:type函数
int转foat:直接转换 float转int:舍弃小数 int转bool:非0:True、0:False bool转int:False:0、True:1 转str:直接转换
03_运算符
算术运算符:+、*、/、//(整除)、%(求余)、**(幂) 关系运算符:>、<、==、!=、>=、<= 赋值运算符:=、+=、-=、*=、/=、%=、//=、**= 逻辑运算符:and、or、not 成员运算符:in、not in 身份运算符:is、is not
二、选择结构与循环结构
条件表达式和逻辑表达式
01_条件表达式:关系运算符
关系运算符用于数值的大小比较,一般用于条件表达式 包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种 它们都是双目运算符 关系运算符运算的结果是bool型,值只有两种:False或True False代表关系不成立,True代表关系成立
02_逻辑表达式
Python语言中提供了三种逻辑运算符: 与运算(and)、或运算(or)、非运算(not) 与运算符和或运算符均为双目运算符,具有左结合性 非运算符为单目运算符,具有右结合性
短路操作:在Python 中,and 和or不一定会计算右边表达式的值,有时候只计算左边表达式的值就能得到最终结果另外,and和or运算符会将其中一个表达式的值作为最终结果,而不是将True或者False作为最终结果
对于 and 运算符,两边的值都为真时最终结果才为真,但是只要其中有一个值为假,那么最终结果就是假,所以 Python 按照下面的规则执行and 运算:如果左边表达式的值为假,那么就不用计算右边表达式的值了,因为不管右边表达式的值是什么都不会影响最终结果,最终结果都是假,此时 and 会把左边表达式的值作为最终结果
如果左边表达式的值为真,那么最终值是不能确定的,and 会继续计算右边表达式的值,并将右边表达式的值作为最终结果
对于or运算符,情况是类似的,两边的值都为假时最终结果才为假,只要其中有一个值为真,那么最终结果就是真,所以 Python 按照下面的规则执行or运算:如果左边表达式的值为真,那么就不用计算右边表达式的值了,因为不管右边表达式的值是什么,都不会影响最终结果,最终结果都是真,此时or会把左边表达式的值作为最终结果
如果左边表达式的值为假,那么最终值是不能确定的,or会继续计算右边表达式的值,并将右边表达式的值作为最终结果
if语句
01_if语句
格式:if 表达式: 代码块 代码块需要缩进、“表达式”可以是一个单一的值或者变量,也可以是由运算符组成的复杂语句,形式不限,只要它能得到一个值就行
02_if-elif-else语句
格式:if 表达式1: 代码块1 elif 表达式2: 代码块2 elif 表达式3: 代码块3 ...其他elif语句 else: 代码块n 含义: 如果满足表达式1,则执行代码块1 否则如果满足表达式2,则执行代码块2 ... 否则,则执行代码块n
for语句
01_range 函数
range()函数用于生成一系列数字,用于循环结构的遍历 在python2中生成一个数字列表,python3中是一个可迭代对象(可遍历的)range(start, stop,step) 从start开始(默认为0),到stop结束(不含stop),步长为step(默认为1) range(5)等价于 range(0,5)等价于 range(0,5,1):0,1,2,3,4 range(0,10,3):从0开始到10结束(不含10),步长3:0,3,6,9 range(0,9,3):从0开始到9结束(不含9),步长3:0,3,6 range(10,-1,-2):从10开始到-1结束(不含-1),步长-2:10,8,6,4,2,0
02_for语句
格式:for <variable> in <sequence>: 代码块: <variable>:循环变量,一般为i,j,k <sequence>:序列或者可迭代的对象,一般为range(xx)
while语句
01_while语句
格式:while条件表达式: 代码块
条件表达式成立,执行代码块
02_break和continue
break语句可以跳出for和while的循环体 continue语句被用来告诉Python跳过当前循环块中的剩余语句,然后继续进行下一轮循环
循环嵌套
01_两种循环的区别
for循环:常用于已知循环次数的情况,或者遍历List、Dict等数据结构 while循环:不知道循环次数,但是可以通过终止条件停止循环 在一定程度上两者可以互相转换 eg.从1遍历到99:用for循环 从1+2+….,加到和超过1000停止:用while循环
02_循环嵌套
当2个(甚至多个)循环结构相互嵌套时,位于外层的循环结构常简称为外层循环或外循环,位于内层的循环结构常简称为内层循环或内循环 for i in range(3): for j in range(3): print("i =",i,"j=",j) 先执行外循环,对于外循环的每一个i,执行内循环
循环嵌套中的break和continue break语句适用于嵌套循环中,它的作用只是使程序跳出本层循环结构 continue语句也可以适用于循环结构中,作用仍然跳过本次循环,执行下一次循环
如何跳出多重循环? 可以设置一个跳出循环的标记 如果需要一次跳出多重循环的时候,可以将这个标记为标记成true 那么在下一层循环也判断一下是否需要继续跳出循环
三、基础数据结构
列表与元组
01_列表
列表(list)由一系列按照特定顺序排列的元素组成 []表示列表,逗号分隔元素 [element 1, element 2, element 3, ., element n] elementi表示列表中的元素,个数没有限制,可以是任意数据
列表——访问列表 列表是有顺序的,访问任何元素需要通过“下标”访问 所谓“下标”就是指元素在列表中从左往右为第几个,下标从0开始 下标只能为[-n,n-1],分为[0,n-1](顺数第几个)、[-n,-1](倒数第几个)
列表——添加元素 在末尾添加单个元素: a.append(x):列表a末尾添加元素x
在末尾添加多个元素: a.expend(x):列表a末尾添加x,x为可迭代对象,包括列表、元组、字符串等不可为单个数字 在中间插入元素: a.insert(idx,x):列表a在下标为idx位置插人元素x,原来下标大于等于idx的元素往右移动一个位置
列表——删除元素 利用del删除列表中的元素 del a[idx]:删除列表a中下标为idx的元素 利用pop删除列表中的元素 a.pop(idx):删除列表a中下标为idx的元素 a.pop():删除列表a中最后一个元素 区别: del 删除没有返回值,pop删除返回的是删除的那个元素
根据值删除元素: a.remove(x):删除列表a中值为x的第一个元素
如何删除列表中所有的x? 利用循环结构+remove in 表达式:x in a:判断x是否在列表a中,在为True,否则为False
列表——查找元素 a = ['apple','banana','cat','dog','apple'] print(a.count('apple')) #在整个列表中查找第一个'cat' print(a.index('cat')) #从下标3开始查找第一个'cat' print(a.index('cat',3))
列表——翻转列表 a.reverse():列表a进行翻转,调用2次则变回原列表
列表——求出列表长度 len(a):求出列表a的长度
02_操作列表——遍历整个列表
利用 for 循环遍历列表,同时获取下标 a = ['apple','banana','cat','dog'] for idx, x in enumerate(a): print(idx,x) enumerate(a,start=0) 将列表a每个元素和对应的下标组合为一个带索引的序列,下标默认从0 开始,遍历的时候同步遍历下标和值
操作列表——创建数值列表 利用range函数+list a = list(range(5)) b=list(range(0,10,3)) c=list(range(10,-1,-2))
操作列表——列表操作符 +:连接两个列表 a*x:a是list,x是int,构成一个新列表,其内容为a复制x次
操作列表——内置函数 sum(a):求序列a的和 max(a):求序列a中的最大值 min(a):求序列a中的最小值
操作列表——列表解析式 列表解析式:可以基于已有列表生成相关的新列表 [expression for member in iterable] 对于可迭代对象iterable的每个元素member,都执行expression构成新的列表 a = [x**2 for in range(11)] print(a) [0,1,4,9,16,25,36,49,64,81,100] 对于range(11)中的每个元素x,新列表的元素为x^2
操作列表——列表解析式 列表解析式:可以基于已有列表选并生成相关的新列表 [expression for member in iterable if conditional] 对于可迭代对象iterable的每个元素member,如果满足条件conditional,才执行expression构成新的列表 a = [x**2 for xin range(ll)if x % 2 == 0] print(a) [0,4,16,36,64,100] 对于range(11)中的每个元素x,需要满足x为偶数,才加入新列表,新列表元素为x^2
操作列表——列表切片 切片:列表的部分元素组成的新列表 a[starts: end: tep] start:切片的下标起点(包含起点),默认为0 end:切片的下标终点(不包含终点),默认为列表长度 step:切片的步长,默认为1 与range用法基本类似,只是range是数字序列,而切片面向的是任意list
操作列表——复制列表 利用切片:b=a[:] 利用copy函数:b=a.copy()
03_元组
元组:与列表类似,是由一系列按额定顺序排序的元素组成 用()创建,或者用tuple创建 与List区别: List是可修改的序列,而元组是不可修改的,即创建无法修改当前元组
元组无法修改内部元素,如果需要修改,可以转换成List或者直接构建新的元组 元组与列表用法基本类似,大多数工具均可以直接照搬使用
字符串
01_字符串简介
字符串:一系列字符,用单引号或者双引号括起 Python不支持单字符类型,单个字符也被看作为字符串,许多用法与List一致: 访问字符串中的元素:使用方括号+下标(从0开始) 切片:s[starts: end: tep],在字符串s下标为[start,end)中,步长为step len(s):求字符串的长度 +:字符串连接 *:重复字符串 in、no tin:存在、不存在 str(x):把x强制转换成字符串
字符串简介——转义字符 转义字符是以反斜杠()开头的特殊字符,用于表示不能直接键入的字符,例如换行符、制表 符、引号和反斜杠本身 \:续行符,在行尾 \:反斜杠 ':单引号 ":双引号 \n:换行符 \t:横向制表符
字符串简介——ord和chr Python将字符编码成Unicode码:简单理解为所有语言的字符(所有字母、数字、中文等所有符号)一一对应一个数字(编码) 我们常用的一般是ASCI码,包括字母、数字、一些标点符号和控制符号 字符=>Unicode码:ord(x),x为字符,ord(x)为整数 Unicode码=>字符:chr(x),x为整数,chr(x)为字符
02_字符串常用方法——判断类方法
字符串包含很多内建函数,合理使用相关函数可以极大提升效率 下面所有函数,满足条件为True,否则为False isalnum():判断字符串是否都是字母或者数字 isalpha():判断字符串是否都是字母或中文字符 isdigit():判断字符串是否只包含数字 islower():判断字符串是否全小写 isupper():判断字符串是否全大写 isspace():判断字符串是否只包含空白 istitle():判断字符串是否标题化
字符串常用方法——转换类方法 下面所有函数,返回一个在s基础上转换的字符串,s本身不会变 titl():"标题化"的字符串 lower():转换成小写 upper():转换成大写 swapcase():字符串中大写转换为小写,小写转换为大写 lstrip([chars]):截掉字符串左边的空格或指定字符chars rstrip([chars]):截掉字符串右边的空格或指定字符chars strip([chars]):调用lstrip([chars])和rstrip([chars]) replace(old, newl, max]):将字符串中的 old 替换成 new,如果max指定,则替换不超过max次 ljust(width[, fillchar]):左对齐,并使用空格(或者fllchar)填充至指定长度width的新字符串 rjust(width,[, fillchar]):右对齐,并使用空格(或者fllchar)填充至指定长度width的新字符串 zfill (width):右对齐,并使用0填充至指定长度width的新字符串 center(width, fillchar):居中对齐,使用空格或者fillchar填充
字符串常用方法——查找类方法 下面所有函数,返回查找结果 count(str, beg= 0,end=len(string)):求str在字符串中出现次数,如果指定查找范围则在[beg,end)中查找 find(str, beg= 0,end=len(string)):判断st是否在字符串中,如果指定查找范围则在[beg,end)中查找返回找到的起始下标,不存在返回-1 rfind(str, beg-0,end=len(string)):从右往左查找 index(str, beg 0,end=len(string)):与fnd相同,只是如果str不存在,则抛出异常 rindex(str, beg-0,end=len(string)):从右往左查找 startswith(substr, beg 0,end=len(string)):判断是否以substr开头 endswith(suffix, beg-0, end=len(string)):判断是否以suffix结尾
字符串常用方法——字符串和List 字符串转换成list(由于字符串本身是不可修改的,转换成list可以进行修改) 利用split0方法对字符串进行分割: str.split(str="", num=string.count(str)): str表示分割符,默认为空字符,包括空格、换行、制表符等 num--分割次数,如果设置了这个参数,则最多分割成num+1 个子字符串。默认为-1,即分隔所有
一行输入两个整数 split将输入的字符串进行分割 map(function,sequence):把序列sequence里面的每一个元素利用fumction进行转化,最终 结果是一个可迭代的对象,一般需要将其转换成list
字符串常用方法——修改字符串 如何修改字符串? 直接在字符串上修改是不行的,因为字符串不可修改 1、转换成List,修改后再转换成字符串 2、利用切片 3、重新赋值 4、利用replace函数
字典
01_字典
字典存储一系列的键值对:key:value 字典等价于数学中的映射,即一个key对应着一个value 键:key,值:value,通过key来找value,key必须唯一,因此同一个key只能对应着一个value
字典——创建字典 Python中用{表示字典,可以使用台创建一个字典 字典中的key和value之间用冒号:分隔,元素之间用逗号,分隔 字典的key只能为数字、字符串、元组,大多数情况使用字符串作为key value的类型没有限制
利用dict创建字典: a=dict(keyl=value1,key2=value2,key3=value3) 此时key只能是字符串
利用dict创建字典: a=dict([[key1,value1],[key2,value2],[key3,value3]]) 可以传入一个列表或者元组,每个元素也是一个包含两个元素的列表或者元组 则此时可以按照第一个元素作为key,第二个元素作为value
zip(sequence1, sequence2,...) 把多个序列相同下标的元素组装成元组,结果是一个可迭代对象 结果可以转换成list,但是首次转换后迭代器就为空
字典——访问字典 Python的字典通过key来获取value,把key看做下标即可 a[x]: a为dict、x为a中的一个key,必须存在否则会报错
如果实现并不知道x是否在字典的key中,需要查询字典中x对应的value,可以使用get方法 a.get(x,value=None):a表示字典,x表示查询的key,value表示默认值 如果x在字典的key中,则上述的结果为a[x],如果不存在,上述结果为value
02_字典基本操作——添加和修改元素
字典通过直接利用key可以访问对应的value,类似的,添加元素、修改元素也是直接利用key 和value就能进行添加或者更新
字典基本操——删除元素
删除字典中的键值对,可以用Python本身的删除语法del
删除字典中的键值对,也可以用字典的删除方法pop
字典基本操作——遍历字典 与List一样,直接利用for语句就可以遍历字典 for x in a:其中x是循环变量,a是字典,此时遍历的是a的key列表 s={'a':123','b':456','c':789'} for x in s: print(x) 利用a.keys()、a.values()、a.items()可以分别循环遍历key、value、二元组(key,value) s={'a':123,'b':456,'c':789} for x in s.keys(): print(x) for y in s.values(): print(y) for x,y in s.items() print(x, y)
字典基本操作——判断是否存在元素 字典中可以使用in、not in判断某元素是否在字典中 x in a、x in a.keys():判断x是否在a的key中 x in a.values():判断x是否在a的value中 (x,y) in a.items():判断x是否在a的key中,并且对应的value为y
字典基本操作——拷贝字典 与List类似,直接赋值无法进行复制,需要使用copy函数完成复制 直接赋值相当于是“引用”,就是添加一个别名
字典基本操作——合并两个字典 字典利用update方法可以将另一个字典的key-value对更新到已有字典中 a.update(b):把字典b中的每一个元素放入a中更新: 如果b中的key在a中没有,则直接在a中添加一组新的key-value对 如果b中的key在a中有,则直接更新对应的value
集合
01_集合
Python中的集合和数学中的集合概念一样,存储不重复的元素 集合中的元素都是唯一的,互不相同 集合中只能存储不可变的数据:数字、字符串、元组 Python用{}表示集合,其中的元素用逗号分隔 Python集合是无序的
集合——创建集合 创建集合的方式: 1、{元素1,元素2,元素3..}:把大括号中的所有元素构造成一个集合,如果有重复元素,只保留 1个 2、{}:这是空字典,不是空集合 3、set(x):把x转换成集合,x一般为列表、元组等 4、set():空集
集合——遍历集合 与遍历list一样,forxina:,其中a是set,x是循环变量 s={1,2,3,4} for x in s: print(x) print(sum(s),max(s),min(s)) s.clear():清空集合 x in s:判断是否存在 len(s):集合元素个数
02集合基本操作
添加元素 s.add(x):集合s加入元素x s.update(t):集合s中加入t,t是另一个集合或者元素
删除元素 s.remove(x):集合s删除元素x,如果x不存在则报错 s.discard(x):集合s删除元素x,如果x不存在不会报错 s.pop():集合s随机删除一个元素 s.clear():集合s清空
判断类方法 s. isdisjoint(t):判断集合s和集合t是否不相交 s. issubset(t):判断集合s是否为集合t的子集 s.issuperset(t):判断集合s是否为集合t的超集