python小甲鱼电子版,小甲鱼入门学python
墨初 知识笔记 117阅读
P3
查看内置函数

dir(__builtins__)
P4
变量名命名规则

1、变量名不能以数字打头
2、变量名可以是中文
字符串可以是
1、单引号文本中存在双引号时使用单引号
2、双引号文本中存在单引号时使用双引号
当文本中既有单引号又有双引号时使用转义字符。
P5
原始字符串在字符串前加 r 转义字符将不再有效
>>> print(D:\three\two\one\now)D: hree wo\oneow>>> print(rD:\three\two\one\now)D:\three\two\one\now
反斜杠不能放在字符串的末尾若某行的末尾是反斜杠则说明字符串还没有结束。反斜杠可以让字符串跨行。
三引号分为三单引号或三双引号前后要对应可以实现字符串的跨行而不需要行末的反斜杠。
字符串的加法和乘法
1、加法拼接
2、乘法复制
P6
字符串的输入input方法输入的是字符串如需要数字则需要强转一下。
>>> tempinput(你是谁)你是谁我是你霸霸>>> temp我是你霸霸>>> numinput(请输入一个数字)请输入一个数字8>>> num8>>> NUMint(num)>>> NUM8
P7
if...else...语句
a 1if a < 3: print(a is small)else: print(a is big)a 5if a < 3: print(a is small)else: print(a is big)
a is smalla is big
while循环
counts 3while counts > 0: print(I love HZQ) counts counts - 1
I love HZQI love HZQI love HZQ
break语句
跳出一层循环体。
P8
random模块
1、random.randint(a,b)函数返回一个a~b的伪随机数
2、random.getstate()函数返回随机数种子
3、random.setstate(x)函数设置随机数种子
随机数种子相同时生成的伪随机数顺序相同。
P9
1、python可以随时随地进行大数的计算。
2、python存储浮点数存在误差浮点数并不是百分之百精确的
>>> 0.10.20.30000000000000004>>> i0>>> while i<1:... ii0.1... print(i)...0.10.20.300000000000000040.40.50.60.70.79999999999999990.89999999999999990.99999999999999991.0999999999999999
3、python要想精确地计算浮点数需要 decimal 模块。
>>> import decimal>>> adecimal.Decimal(0.1)>>> bdecimal.Decimal(0.2)>>> print(ab)0.3>>> cdecimal.Decimal(0.3)>>> cabTrue
4、科学计数法
>>> 0.00000000000055e-13>>> 0.000000000040030020504034.003002050403e-11
5、复数
复数的实部和虚部都是浮点数的形式存储的
>>> a1-2j>>> a(1-2j)>>> a.real1.0>>> a.imag
P10
1x//y地板除结果向下取整。
2abs(x)返回x的绝对值x为复数时返回模值。
3complex(ab)函数括号中可以是两个数字表示实部和虚部也可以是复数对应的字符串。
>>> complex(1,3)(13j)>>> complex(38j)(38j)
P11
1布尔值为False的情况
2
and和or都是短路逻辑下方代码中几种情况需要记住。
>>> 3 and 44>>> 3 or 43>>> HZQ and LOVELOVE>>> HZQ and LOVELOVE>>> HZQ or LOVEHZQ
P12
1运算符优先级
P13
流程图
P14
P15、P16
1基本结构if.... elif.... else....
2条件表达式
score 76level (D if 0 < score < 60 else C if 60 < score < 70 else B if 70 < score < 80 else A if 80 < score < 100 else S if score 100 else print(请输入0~100之间的数字))print(level)运行结果B
P17
P18
1continue结束本轮循环开始下一轮循环
2while...else...语句while后的条件不成立时执行一次else后的操作
P19
1for循环
for 变量 in 可迭代对象 :statement(s)
>>> for each in FishC:... print(each)...FishC>>> eachC
1000不是可迭代对象故以下代码报错>>> for each in 1000 :... print(each)...Traceback (most recent call last): File <stdin>, line 1, in <module>TypeError: int object is not iterable
2range()函数用于生成数字序列将数字变为可迭代对象形式如下
range(stop)
range(start,stop)
range(start,stop,step)
生成的序列包括start不包括stop
>>> for i in range(10):... print(i)...0123456789>>> for i in range(8,17,2):... print(i)...810121416
P20
列表索引列表切片
P21
1append()方法列表添加一个元素
>>> a[1,2,3]>>> a[1, 2, 3]>>> a.append(q)>>> a[1, 2, 3, q]
2extend()方法列表添加一个可迭代对象
>>> a[1, 2, 3, q]>>> a.extend([5,56,gf])>>> a[1, 2, 3, q, 5, 56, gf]
3切片添加元素
>>> a[1,2,3,4,5]>>> a[len(a):][6]>>> a[1, 2, 3, 4, 5, 6]>>> a[len(a):][qq,2,ed]>>> a[1, 2, 3, 4, 5, 6, qq, 2, ed]
4insert()方法 指定位置插入元素
>>> a[1,3,4,5]>>> a.insert(1,2)>>> a[1, 2, 3, 4, 5]>>> a.insert(0,0)>>> a[0, 1, 2, 3, 4, 5]>>> a.insert(len(a),6)>>> a[0, 1, 2, 3, 4, 5, 6]
5remove()方法删除列表元素若有多个待删除元素未指定时删除下标最小的一个。
>>> a[1,2,3,4,5]>>> a.remove(3)>>> a[1, 2, 4, 5]>>> a[1,2,4,3,4,4,5,6,7]>>> a.remove(4)>>> a[1, 2, 3, 4, 4, 5, 6, 7]
6pop()方法通过下标删除元素同时返回删除的元素
>>> a[1, 2, 3, 4, 4, 5, 6, 7]>>> a.pop(3)4>>> a[1, 2, 3, 4, 5, 6, 7]>>> a.pop(5)6>>> a[1, 2, 3, 4, 5, 7]
7clear()清空列表
>>> a[1, 2, 3, 4, 5, 7]>>> a.clear()>>> a[]
P22
1s.sort(keyNone,reverseFalse)方法对列表中的元素进行原地排序(key 参数用于指定一个用于比较的函数;reverse 参数用于指定排序结果是否反转)
2reverse()方法纯数字列表从大到小排序
3count(a)返回元素出现的次数
4index(astartend)返回元素的索引
5copy()拷贝列表
6切片和copy都是浅拷贝
*P23
1对于嵌套列表用乘法进行拷贝时内存中开辟的空间是同一个
判断是否在内存中开辟空间是同一个用 is 关键词
列表元素用*复制指向同一内存空间用*复制后在分别赋值则指向不同空间
>>> A[0]*3>>> for i in range(3):... A[i][0]*2...>>> A[[0, 0], [0, 0], [0, 0]]>>> B[[0]*2]*3>>> B[[0, 0], [0, 0], [0, 0]]>>> A[1][1]1>>> B[1][1]1>>> A[[0, 0], [0, 1], [0, 0]]>>> B[[0, 1], [0, 1], [0, 1]]
2两个相同的字符串分别赋值即使不是用*复制的内存空间也是指向同一个因为字符串和列表不同字符串是不可变的。
>>> a[1,2,3]>>> b[1,2,3]>>> a is bFalse>>> cWAHZQ>>> dWAHZQ>>> c is dTrue
P24
1等号赋值单个变量只是让两个变量地址相同改变一个变量时这个变量的地址将会改变两个变量地址将不相同。
>>> a2>>> ba>>> a is bTrue>>> a3>>> b2>>> a is bFalse
等号赋值列表是让两个变量列表地址相同当改变其中一个列表的某一元素时另一个列表中对应元素也改变。当对整个列表赋值时这个列表的地址将会改变。
>>> a[1,2,3,qwe]>>> ba>>> b is aTrue>>> b[1, 2, 3, qwe]>>> a[1]5>>> b[1, 5, 3, qwe]>>> b[1,5,3,qwe]>>> b is aFalse
2copy()方法切片
copy()方法和切片不仅拷贝列表的引用拷贝的是整个列表拷贝后的列表与被拷贝的列表的地址不同改变一个元素另一个列表中对应元素的值不变。
>>> a[1,2,3]>>> ba.copy()>>> b[1, 2, 3]>>> a[1]5>>> b[1, 2, 3]>>> a is bFalse>>> ca[:]>>> a[0]8>>> c[1, 5, 3]>>> a is cFalse
3深拷贝
copy()方法和切片可以拷贝一维列表当二维列表时将不能完成内层的拷贝。
>>> a[[1,2,3],[4,5,6],[7,8,9]]>>> ba.copy()>>> b[[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> a[1][1]0>>> a[[1, 2, 3], [4, 0, 6], [7, 8, 9]]>>> b[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
这时候就需要用到深拷贝了即copy模块中的deepcopy()函数copy模块中的copy()函数也是浅拷贝但是浅拷贝的效率更高速度快。
>>> import copy>>> a[[1,2,3],[4,5,6],[7,8,9]]>>> bcopy.copy(a)>>> b[[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> a[1][1]0>>> b[[1, 2, 3], [4, 0, 6], [7, 8, 9]]>>> ccopy.deepcopy(a)>>> a[1][0]0>>> a[[1, 2, 3], [0, 0, 6], [7, 8, 9]]>>> c[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
is()方法验证
>>> import copy>>> a[[1,2,3],[4,5,6],[7,8,9]]>>> bcopy.copy(a)>>> ccopy.deepcopy(a)>>> da>>> a is bFalse>>> a is cFalse>>> a is dTrue>>> a[1] is b[1]True>>> a[1] is c[1]False>>> a[1][1] is b[1][1]True>>> a[1][1] is c[1][1]True
故拷贝能力强弱顺序为
(赋值) < (copy方法、切片操作、copy模块中的copy函数) < copy模块中的deepcopy函数
对于深层拷贝再多一层还是可以完美拷贝
>>> a[[[11,13,14],2,3],[4,5,6],[7,8,9]]>>> ecopy.deepcopy(a)>>> e[[[11, 13, 14], 2, 3], [4, 5, 6], [7, 8, 9]]>>> a[0][0][0]22>>> a[[[22, 13, 14], 2, 3], [4, 5, 6], [7, 8, 9]]>>> e[[[11, 13, 14], 2, 3], [4, 5, 6], [7, 8, 9]]
P25
ord()函数将字符转换为Unicode编码
列表推导式
>>> oho[1,2,3,4,5]>>> x[i*2 for i in oho]>>> x[2, 4, 6, 8, 10]>>> y[i1 for i in range(10)]>>> y[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
P26
1列表推导式创建二维列表
>>> a[[0]*3 for i in range(3)]>>> a[[0, 0, 0], [0, 0, 0], [0, 0, 0]]>>> a[1][1]2>>> a[[0, 0, 0], [0, 2, 0], [0, 0, 0]]>>> b[[0]*3]*3>>> b[[0, 0, 0], [0, 0, 0], [0, 0, 0]]>>> b[1][1]2>>> b[[0, 2, 0], [0, 2, 0], [0, 2, 0]]
列表推导式后还可加 if 条件限制
>>> y[i1 for i in range(10) if i%20]>>> y[1, 3, 5, 7, 9]
这个列表推导式的运行顺序是
1for i in range(10)
2if i%20
3i1
2嵌套的列表推导式
根据列表推导式的运行顺序可推出嵌套列表推导式
>>> a[[1,2,3],[4,5,6],[7,8,9]]>>> b[i*2 for j in a for i in j]>>> b[2, 4, 6, 8, 10, 12, 14, 16, 18]
P27
1元组元素不可变元组用的是圆括号。元组也可以省略括号用逗号隔开就可以。
2元组支持切片
3列表中有增删改查到元组就只有了查即count()和index()方法
4没有元组推导式
5生成只有一个元素的元组需要有逗号
>>> a(520)>>> type(a)<class int>>>> b(520,)>>> type(b)<class tuple>
6元组的打包和解包字符串、列表也可以打包和解包。
>>> x1>>> y2>>> z3>>> t(x,y,z)>>> t(1, 2, 3)>>> (a,b,c)t>>> a1>>> b2>>> c3>>> a,b,c,dhjdk>>> ah>>> cd
解包时等号左侧的变量数个右侧元素数需相等不相等时报错可以在最后一个变量上加*来解决。
>>> a,b,cahjjdkTraceback (most recent call last): File <stdin>, line 1, in <module>ValueError: too many values to unpack (expected 3)>>> a,b,*cahjjdk>>> aa>>> bh>>> c[j, j, d, k]
7元组元素不可变当元组中的元素指向一个可以修改的列表时这个元组元素列表中的元素可以改变
>>> s[1,2,3]>>> t[5,6,7]>>> w(s,t)>>> w([1, 2, 3], [5, 6, 7])>>> w[0][1]10>>> w([1, 10, 3], [5, 6, 7])
P28、P29、P30、P31
1判断字符串是否是回文字符串
>>> x12321>>> 是回文数 if xx[::-1] else 不是回文数是回文数>>> x12345>>> 是回文数 if xx[::-1] else 不是回文数不是回文数
2字符串相关的众多方法
1~6主要是大小写字母的变换。
1capitalize()返回首字母大写其他字母小写的字符串
>>> xI love Hzq>>> x.capitalize()I love hzq
2casefold()返回所有字符都是小写的字符串
>>> xI love Hzq>>> x.casefold()i love hzq
3title()返回每个单词的首字母都变成大写剩下的字母变成小写
>>> xI love Hzq>>> x.title()I Love Hzq
4swapcase()所有字母大小写反转
>>> xI love Hzq>>> x.swapcase()i LOVE hZQ
5upper()全部大写
6lower()全部小写只能处理英语casefold()不仅英语还可以其他语言
7~10左中右对齐
7center(width , fillchar )width如果比原字符串小则直接原字符串输出如果比原字符串大则宽度保持width不足的部分用空格填充字符串居中不设置fillchar时默认空格填充设置后以设置的fillchar填充。
8ljust(width , fillchar )左对齐其余同上
9rjust(width , fillchar )右对齐其余同上
10zfill(width)字符串靠右0填充左侧也适合负数情况负数时负号会被移到最左侧。
>>> xI love Hzq>>> x.center(15) I love Hzq >>> x.center(15,_)___I love Hzq__>>> x.ljust(16)I love Hzq >>> x.rjust(16) I love Hzq>>> x.zfill(16)000000I love Hzq
11~15查找
11count(x,start,end)包括索引为star的元素不包括索引为end的元素
12find(x,start,end)从左往右找返回第一个找的的元素的索引找不到的话返回-1
13rfind(x,start,end)从右往左找返回第一个找的的元素的索引找不到的话返回-1
14index(x,start,end)和find()类似找不到不到字符串时报错
15rindex(x,start,end)和rfind()类似找不到不到字符串时报错
16~18替换
16expandtabs([tabsize8])将字符串中的tab替换为空格返回字符串参数代表一个tab代表多少个空格
17replace(old,new,count-1)将字符串中的old替换为newcount为替换的个数默认为全部。
>>> ayuuiijhgfb>>> a.replace(u,U)yUUiijhgfb>>> a.replace(u,U,5)yUUiijhgfb
18translate(table)table代表的是一个映射关系即将原字符串按照table进行映射并返回映射后的字符串。
>>> aI love Hzq>>> tablestr.maketrans(abcdefg,1234567) >>> a.translate(table)I lov5 Hzq// str.maketrans(abcdefg,1234567) 表示创建一个映射关系//该函数还支持第三个参数 str.maketrans(abcdefg,1234567,str)表示将 str 忽略掉删掉。
19~33表示对字符串的判断
19startswith(x,start,end)判断指定字符串是否在待判断字符串的起始位置x可以是一个元组将多个待匹配的字符串写进去若有一个匹配成功即返回True
20endswith(x,start,end)判断指定字符串是否在待判断字符串的结束位置x可以是一个元组将多个待匹配的字符串写进去若有一个匹配成功即返回True
>>> a我爱python>>> a.startswith((我,你,她))True
21isupper()全大写字母返回True
22islower()全小写字母返回True
23istitle()所有单词以大写字母开头其余小写返回True
24isalpha()判断是否全以字母构成
25isascii()
26isspace()判断是否是空白字符串空白包括空格、Tab、\n、
>>> \n.isspace()True
27isprintable()判断字符串是否是可打印的其中 转义字符、空格 不是可打印字符
>>> \n.isprintable()False>>> .isprintable()False>>> love .isprintable()False>>> love.isprintable()True
28isdecimal()判断数字能力最弱
29isdigit() 判断数字能力居中可判断
30isnumeric()判断数字能力最强可判断ⅠⅡⅢ...和一二三...
31isalnum() 判断数字能力第一上述三个一个为True这个就为True
32isidentifier()判断字符串是否是python的合法标识符空格不合法下划线合法数字开头的字符串不合法
>>> I love.isidentifier()False>>> I_love.isidentifier()True>>> love520.isidentifier()True>>> 520love.isidentifier()False
33keyword模块中的iskeyword(str)函数判断是否是关键字
>>> import keyword>>> keyword.iskeyword(if)True>>> keyword.iskeyword(py)False
34~38字符串截取
34strip(charNone)删掉字符串左边和右边的指定字符默认为空格
35lstrip(charNone)删掉字符串左边的指定字符默认为空格
36rstrip(charNone)删掉字符串右边的指定字符默认为空格
>>> I love .lstrip()I love >>> I love .rstrip() I love>>> www.Iloveyou.com.lstrip(w.I)loveyou.com>>> www.Iloveyou.com.rstrip(.mo)www.Iloveyou.c>>> www.Iloveyou.com .rstrip( .mo)www.Iloveyou.c>>> www.Iloveyou.com .rstrip(.mo)www.Iloveyou.com
37removeprefix(prefix)删除前缀整体
38removesuffix(suffix)删除后缀整体
>>> www.Iloveyou.com.removeprefix(www.)Iloveyou.com>>> www.Iloveyou.com.removesuffix(.com)www.Iloveyou>>> www.Iloveyou.com .removesuffix(.com)//原字符串在.com后加了一个空格www.Iloveyou.com
39~字符串拆分、拼接
39partition(sep)从左到右找一个sep字符串以sep为界返回元组左、sep、右
40rpartition(sep)从右到左找一个sep字符串以sep为界返回元组左、sep、右
>>> www.Iloveyou.com .partition(.)(www, ., Iloveyou.com )>>> www.Iloveyou.com .rpartition(.)(www.Iloveyou, ., com )
41split(sepNone,maxsplit-1)从左到右找到maxsplit个sep默认为全部并以此分割成若干字符串元素的列表分界处的sep删去
42rsplit(sepNone,maxsplit-1)从右到左找到maxsplit个sep默认为全部并以此分割成若干字符串元素的列表分界处的sep删去
43splitlines()以行进行分割换行符可以是\n、\r、\r\n 括号中写True时换行符写进前一个元素中。
44join(iterable)字符串拼接join拼接比加号拼接快大量需要拼接时join节省大量时间。
>>> ..join([www,Iloveyou,com])www.Iloveyou.com>>> ..join((www,Iloveyou,com))www.Iloveyou.com
P32、P33
1格式化字符串format()函数
>>> love you {} years.format(num) //位置索引love you 10000 years>>> {}看到{}很激动.format(我,你) //位置索引我看到你很激动>>> {1}看到{0}很激动.format(我,你) //位置索引你看到我很激动>>> {1}看到{1}很激动.format(我,你) //位置索引你看到你很激动>>> {a}看到{b}很激动.format(a我,b你) //关键字索引我看到你很激动>>> {0}看到{b}很激动.format(我,b你) //关键字索引和位置索引杂交我看到你很激动
2在字符串中显示花括号
>>> {},{},{}.format(1,{},2)1,{},2>>> {},{{}},{}.format(1,2)1,{},2
3格式化字符串
>>> {:^}.format(250)250>>> {:^10}.format(250) 250 >>> {1:>10}{0:<10}.format(520,250) 250520 >>> {left:>10}{right:<10}.format(left520,right250) 520250 >>> {:010}.format(520)0000000520>>> {:010}.format(-520)-000000520>>> {1:%>10}{0:%<10}.format(520,250)%%%%%%%0520%%%%%%%>>> {:010}.format(520)0000000520>>> {:010}.format(-520)-000000520>>> {:10}.format(-520)- 520
>>> {:}{:-}.format(520,-250)520-250>>> {:,}.format(12345)12,345>>> {:.2f}.format(3.14159)3.14>>> {:.2g}.format(3.14159)3.1>>> {:.6}.format(I love you)I love
>>> {:b}.format(80)1010000>>> {:c}.format(80)P>>> {:d}.format(80)80>>> {:o}.format(80)120>>> {:x}.format(80)50>>> {:#b}.format(80)0b1010000>>> {:#c}.format(80)Traceback (most recent call last): File <stdin>, line 1, in <module>ValueError: Alternate form (#) not allowed with integer format specifier c>>> {:#d}.format(80)80>>> {:#o}.format(80)0o120>>> {:#x}.format(80)0x50
适用于浮点数、复数
>>> {:e}.format(3.14159)3.141590e00>>> {:E}.format(3.14159)3.141590E00>>> {:f}.format(3.14159)3.141590>>> {:g}.format(123456789)1.23457e08>>> {:g}.format(123.456789)123.457>>> {:%}.format(0.98)98.000000%>>> {:.2%}.format(0.98)98.00%>>> {:.{prec}f}.format(3.1415,prec2)3.14
3f-字符串代替format()函数python3.6以后的版本才能用
>>> FI love you {num} yearI love you 10000 year>>> F{-520:010}-000000520
所有的格式化都可以用F-字符串代替format()函数