变量.方法(值)[值]{值}
列表类型
经常使用,必须掌握
空列表
1= []
常规列表
intlist =[1,2,3,4,5]
strlist = ['hello','world','one','two','three']
alllist = [1,2,'3',4,'5','ffff']
append方法,列表增加元素
copy方法,深拷贝,源列表不受影响
clear方法 清空列表
insert方法 插入元素,(索引,元素),当要插入的位置索引,大于当前列表长度时,直接放到
remove 方法,删除在列表中找到的第一个匹配的元素
index方法,返回所找到的第一个匹配元素的下标
count方法,放回当前元素在列表中的数量
reverse方法,反转列表,也可以使用[::-1]一个效果。
sort()
列表遍历
for i in l:
print(i)
#列表生成器
ranglist = [i for i in range(100)]
print(ranglist)
a = [x for x in range(1,100)]
#符合判断条件列表
a = [x for x in range(1,100) if x % 2==0]
元组
类似列表,但是不可以发生改变。
x = (1,2,3,4,5)
index方法,给定元素返回找到的第一个元素的位置。
count 方法,给定元素,返回改元素的元组中的数量
集合
#经常用于数据去重,因为在集合中元素是唯一的,而且因为改数据类型内置,,可以高效率的去重
print(1)
set(1)
#字典
#{1:"1",2:"2"} {键值1:内容,……}
#表示一一对应的关系
#用于需要快速查找的场景,比如:数据库items
集合内的
字符串类型
创建变量
a= "aaa"
b="bbbb"
c="""cccc"""
方法:
- splist方法,分割元素,指定分割符号,默认分割符号是n
- replace方法,字符替换,直接替换全部的字符
- upper方法,字符串小写字母,转换大写
- lower方法,大写字母转小写
''.isspace()
In [18]: ''.rjust(10,'a')
Out[18]: 'aaaaaaaaaa'
In [19]: 'aaa'.rjust(10,'a')
Out[19]: 'aaaaaaaaaa'
In [20]: 'bbb'.rjust(10,'a')
Out[20]: 'aaaaaaabbb'右边填充字符,填充至,指定长度rjust right just
‘bbb’.rjust(10,‘a’)
左边填充字符,填充至,指定长度left just
‘aaa’.ljust(10,‘a’)
encode方法,将字符串转换成bytes类型
startswith判断字符串的前面是否xxx字符
endswith判断字符串的尾部是否是xxx字符
zfill 填充0到字符串的前面,给定长度,最终字符串的长度等于给定长度,如果给定长度小于
替换
字符串加法
a2=‘bbb’
a3=‘ccc’
a2+a3
a2+'bbbbb'
a2+=a3
a2else语句
whilie else
forelse
在python中,为了方便编码者,python提供了一些语法糖,只属于python的语法
while 条件:
xxx
else:
xxx
i= 1
while i <3:
i+=1
print("这是在循环中")
else:
print("循环结束",i)
i= 1
while i > 3:
i+=1
print("这是在循环中")
else:
print("循环结束",i)
i= 1
while i < 3:
i+=1
print("这是在循环中")
if i==2:
break
else:
print("循环结束",i)
for i in dl.keys():
print(i)
else:
print("遍历结束")
for i in dl.keys():
print(i)
if i == 'Betty':
else:
print("遍历结束")三目表达式
x=3 if 100>10 else 4
x
3
如果条件为真,赋值为前面的
如果条件为假,赋值为后面
block1 if 判断 else block2
lambda匿名表达式
lambda[形参1,形参2,……]:表达式
xfunction = lambda x,y :x+y
xfunction(1,2)3
map函数
处理函数
序列
会利用处理函数,处理传入的序列
In [5]: l = [0x61,0x62,0x63]
#默认返回map类型,映射,地图
In [6]: map(chr,l)
Out[6]: <map at 0x28fbd28b700>
#强转list,变成列表 可显示
In [7]: list(map(chr,l))
Out[7]: ['a', 'b', 'c']
#使用join方法,把字符串相连
In [8]: ''.join(map(chr,l))
Out[8]: 'abc'
用lambda表达式,对数据
In [9]: ''.join(map(lambda x:chr(x+1),l))
Out[9]: 'bcd'
enumerate函数
In [10]: seasons = ['Spring', 'Summer', 'Fall', 'Winter']
In [11]: for i in enumerate(seasons):
...: print(i)
...:
(0, 'Spring')
(1, 'Summer')
(2, 'Fall')
(3, 'Winter')
In [12]: for index,content in enumerate(seasons):
...: print(index,content)
...:0 Spring
1 Summer
2 Fall
3 Winter
迭代器
用于生成序列,列表对象
迭代器执行后,返回生成器对象(generator object)
使用接受生成器对象后,使用next函数,可获取下一个对象
当对象完成迭代时,继续使用next函数时,会抛出异常
可以配合异常处理,来判断迭代对象是否结束
In [13]: def yeild_test():
...: yield 1
...: yield 2
...: yield 3
...:
In [14]: yeild_test()
Out[14]: <generator object yeild_test at 0x0000028FBD299F20>
In [15]: next(yeild_test())
Out[15]: 1
In [16]: a = yeild_test()
In [17]: next(a)
Out[17]: 1
In [18]: next(a)
Out[18]: 2
In [19]: next(a)
Out[19]: 3
#复杂迭代器
x = 1
y = 1
for i in range(10):
print(x)
sum = x+y
x = y
y = sum
异常
异常处理,保证程序的健壮性。
★ """
正常情况下,用户输入数字,不会发生报错
若用户输入不能被int函数转换的字符是(非数字),会发生报错
影响程序的正常执行
如果我们编写了异常处理,捕获这个异常,程序仍然正常执行下去。
"""
a=1
try:
a = int(input("请输入一个数:"))
except:
print("发生错误")
print(a)
打印异常消息
a=1
try:
a = int(input("请输入一个数:"))
except Exception as e:
print("发生错误",e)
print(a)
异常处理 铺货单个异常
a=1
while True:
try:
a = int(input("请输入一个数:"))
break
except ValueError:
print("发生错误",ValueError,"用户输入的数字不对")
print(a)
常见的异常
ValueError
ZeroDivisionError
StopIteration
获取异常类:
程序抛出异常时,第一个词组,一般带有ERROR字样,即为异常类信息,可能是异常名称。
文件操作
读写追加
open
文件路径windows下需要注意反斜杠转义,需要使用原始字符串语法
打开模式 w写,r读,a追加,b二进制模式
文件编码,跟随操作系统,Windows下,默认编码是GB2312,可能需要手动知道utf-8
原始字符串
In [40]: w = r"C:\Users\dell\Desktop\学习\python作业\1.py"
In [41]: ww = "C:\\Users\dell\\Desktop\\学习\\python作业\\1.py"
In [42]: print (w)
C:\Users\dell\Desktop\学习\python作业\1.py
In [43]: print (ww)
C:\Users\dell\Desktop\学习\python作业\1.py
In [44]: w == ww
Out[44]: True文件读写
属于IO操作,input output,损耗,占用硬盘,cpu,内存之类的。耗时
当文件被占用是,Windows系统下,文件被多个程序占用,可能会出现一种无法写入的情况
bandzip压缩包软件,打开压缩包,这个压缩包会无法写入
若强制写入,会抛出异常
read读取文件内容
读取文件后,会把文件指针访问文件尾部
close关闭当前文件流
rwadilne 读取一行
当我们写文件时,打开文件时,可能会遇到文件没有写入的权限,会发生异常。
permission denied
因为什么问题让我们无法对文件写:
1.文件是个只读的文件,文件的属性被标记为只读,(在Windows的情况下)
2.Linux下,文件权限没有写w 777,也会发生异常
3.文件被其他程序占用,也会发生这个异常
writable方法,是否可写
write()写入内容
writelines写入一行内容
a方法打开
append追加的意思,
w方法,打开文件,文件指针在文件头部
a方法,打开文件,文件指针在文件尾部
写文件,不会覆盖到原来的内容
二进制写
变量 = open(变量,mode="rb" , endcoding="UTf-8")
rb
wb
ab
+
可以读写二进制,不会发生读取的字符因为编码问题,而读取失败,或者错误。
如果是二进制读写的话
1.不需要使用encoding来确定编码
2.返回的内容的bytes类型
训练题
列表训练
[883, 451, 174, 256, 45, 154, 531, 934, 214, 64, 889, 135, 362, 873, 832, 784, 740, 582, 326, 472, 65, 552, 856, 433, 893, 519, 883, 350, 500, 646, 705, 711, 585, 123, 702, 568, 862, 300, 349, 745, 102, 159, 431, 468, 474, 363, 816, 936, 467, 476, 259, 86, 282, 821, 176, 724, 188, 455, 383, 387, 607, 672, 420, 706, 896, 162, 960, 369, 568, 490, 667, 517, 374, 776, 63, 570, 923, 49, 9, 16, 777, 146, 502, 566, 34, 348, 334, 69, 707, 895, 676, 322, 276, 734, 940, 419, 907, 135, 259, 327, 619, 107, 128, 696, 932, 431, 327, 389, 353, 808, 627, 443, 321, 214, 228, 723, 28, 706, 530, 484, 382, 774, 295, 300, 90, 911, 510, 5, 838, 485, 131, 397, 78, 938, 16, 627, 6, 119, 638, 495, 60, 770, 412, 168, 637, 887, 14, 23, 791, 776, 188, 603, 441, 319, 101, 607, 549, 757, 653, 558, 736, 818, 303, 750, 703, 365, 615, 692, 667, 564, 80, 28, 735, 966, 231, 372, 8, 562, 822, 435, 32, 281, 447, 846, 833, 305, 792, 991, 590, 987, 239, 646, 646, 825, 923, 465, 896, 417, 789, 182, 496, 647, 372, 701, 688, 588, 837, 937, 62, 957, 435, 446, 342, 963, 848, 985, 763, 21, 113, 717, 11, 190, 386, 819, 541, 306, 939, 100, 596, 206, 945, 756, 840, 59, 268, 116, 256, 747, 327, 148, 315, 626, 322, 80, 976, 461, 121, 730, 839, 91, 138, 589, 441, 278, 336, 117, 910, 559, 670, 970, 390, 376, 623, 935, 159, 53, 882, 731, 185, 564, 127, 718, 875, 416, 672, 775, 408, 196, 753, 547, 631, 421, 790, 894, 982, 206, 201, 837, 576, 701, 68, 211, 964, 872, 287, 670, 573, 980, 921, 507, 936, 101, 849, 537, 869, 715, 136, 736, 124, 577, 252, 24, 471, 323, 614, 950, 154, 79, 462, 662, 34, 491, 250, 192, 160, 658, 80, 950, 933, 221, 746, 417, 986, 421, 90, 949, 351, 963, 296, 123, 749, 185, 838, 161, 743, 668, 493, 973, 210, 748, 87, 280, 396, 926, 505, 19, 516, 136, 886, 460, 288, 489, 839, 36, 679, 718, 224, 484, 541, 357, 403, 706, 520, 659, 671, 489, 505, 252, 198, 591, 36, 274, 665, 675, 33, 83, 356, 729, 516, 171, 54, 553, 465, 784, 361, 800, 930, 82, 7, 124, 231, 256, 631, 487, 216, 975, 564, 688, 60, 363, 297, 632, 441, 803, 333, 190, 942, 14, 234, 257, 232, 852, 705, 856, 638, 381, 323, 973, 1, 10, 857, 614, 401, 492, 738, 641, 582, 839, 473, 326, 107, 453, 460, 710, 28, 272, 128, 364, 755, 508, 257, 465, 812, 601, 360, 768, 114, 888, 77, 319, 500, 48, 598, 397, 185, 691, 713, 311, 494, 417, 88, 759, 518, 544, 489, 186, 653, 880, 91, 597, 362, 188, 617, 672, 56, 43, 642, 591, 314, 499, 308, 870, 417, 205, 582, 656, 312, 342, 854, 254, 447, 855, 530, 634, 709, 609, 579, 906, 346, 882, 797, 18, 852, 738, 507, 205, 700, 383, 767, 430, 780, 274, 897, 152, 562, 926, 207, 920, 659, 131, 703, 505, 987, 933, 836, 961, 636, 325, 234, 147, 745, 933, 36, 850, 1, 304, 23, 676, 78, 664, 823, 98, 882, 217, 51, 900, 519, 198, 935, 990, 715, 272, 646, 238, 669, 827, 763, 524, 360, 780, 74, 735, 868, 833, 272, 154, 519, 123, 884, 915, 174, 446, 906, 654, 61, 592, 666, 666, 992, 818, 737, 800, 610, 361, 441, 336, 259, 298, 726, 255, 806, 182, 883, 839, 59, 566, 213, 837, 446, 357, 262, 217, 222, 446, 373, 828, 750, 108, 450, 404, 209, 700, 988, 850, 919, 56, 531, 950, 203, 664, 122, 728, 880, 24, 868, 460, 132, 532, 307, 397, 983, 9, 86, 389, 639, 934, 293, 900, 85, 405, 636, 936, 912, 731, 700, 946, 904, 469, 783, 960, 34, 489, 102, 969, 709, 304, 352, 297, 809, 722, 766, 303, 640, 993, 958, 108, 340, 743, 881, 341, 792, 525, 603, 549, 326, 520, 818, 957, 49, 519, 300, 619, 49, 425, 621, 34, 938, 772, 554, 227, 793, 554, 893, 236, 283, 867, 549, 65, 874, 995, 633, 881, 160, 903, 791, 237, 872, 974, 950, 479, 910, 27, 230, 100, 681, 670, 184, 34, 23, 597, 443, 275, 230, 899, 526, 705, 899, 354, 134, 165, 261, 100, 811, 796, 747, 582, 677, 237, 519, 107, 77, 158, 918, 386, 207, 40, 132, 373, 442, 30, 410, 719, 456, 929, 308, 504, 435, 102, 144, 728, 500, 325, 258, 179, 958, 133, 30, 226, 476, 735, 331, 231, 119, 806, 539, 662, 823, 609, 267, 768, 165, 798, 625, 101, 932, 746, 159, 173, 432, 904, 891, 190, 717, 52, 881, 20, 109, 613, 192, 423, 65, 670, 165, 364, 876, 943, 895, 603, 586, 510, 444, 212, 990, 162, 830, 892, 473, 246, 666, 907, 647, 730, 141, 245, 757, 219, 866, 702, 695, 938, 370, 905, 928, 102, 907, 926, 912, 11, 649, 195, 23, 164, 579, 134, 438, 876, 715, 443, 420, 726, 374, 562, 783, 574, 301, 609, 679, 301, 423, 206, 464, 918, 842, 906, 265, 585, 568, 977, 985, 884, 901, 141, 53, 391, 537, 84, 787, 898, 494, 958, 42, 167, 732, 214, 663, 749, 301, 288, 780, 311, 581, 740, 217, 16, 846, 735, 42, 665, 705, 413, 681, 783, 61, 501, 452, 915, 846, 793, 204, 136, 728, 103, 115, 327, 725, 894, 327, 528, 282, 373, 31, 602, 672, 736, 786, 398, 120, 950, 504, 515, 597, 784, 675, 589, 991, 10, 618, 972, 61, 446, 21, 599, 19, 874, 337, 191, 88, 36, 424, 148, 609, 465, 570, 164, 935, 867, 976, 728, 1, 440, 342, 900, 908, 137, 712, 971, 36, 849, 488, 112, 484, 794, 717, 693, 237, 684, 270, 276, 801, 25, 627, 543, 341, 162, 740, 983, 765, 986, 148, 541]
- 给定列表, 使用课堂中学习过的知识,对列表进行去重
- 利用字典类型,统计上面列表中所有的字符串,及其数量。 形式: {102:10,103:8,104:12} {数字: 出现次数}
- 自己实现一个排序方法,对上表进行排序,不要求去重。
字典训练
给定如下字典:
{'湖南': '长沙', '湖北': '武汉', '广东': '广州', '广西': '南宁', '河北': '石家庄', '河南': '郑州', '山东': '济南', '山西': '太原', '江苏': '南京', '浙江': '杭州', '江西': '南昌', '黑龙江': '哈尔滨', '新疆': '乌鲁木齐', '云南': '昆明', '贵州': '贵阳', '福建': '福州', '吉林': '长春', '安徽': '合肥', '四川': '成都', '西藏': '拉萨', '宁夏': '银川', '辽宁': '沈阳', '青海': '西宁', '海南': '海口', '甘肃': '兰州', '陕西': '西安', '内蒙古': '呼和浩特', '台湾': '台北', '北京': '北京', '上海': '上海', '天津': '天津', '重庆': '重庆', '香港': '香港', '澳门': '澳门'}
- 根据上述字典表,打印出所有的省会
- 根据上述字典表,打印出所有的省
- 根据上述字典表,编写程序,实现,输入省,打印出省会
集合训练
例如:
请输入要查询省会的省名称: 安徽
您输入的省为: 安徽
安徽省的省会为: 合肥
集合练习
经理有: 曹操, 刘备 , 周瑜
技术员: 曹操, 周瑜 , 张飞 , 赵云
用集合求:
- 即是经理也是技术员的有谁?
- 是经理,但不是技术员的有谁?
- 是技术人员,但不是经理的都有谁?
- 张飞都是经理吗?
- 身兼一职的人都有谁?
- 经理和技术员共有几个人?
日常训练题目
求水仙花数
水仙花数是指一个 3 位数,它的每个位上的数字的 3 次幂之和等于它本身。例如:13 + 53+ 3**3 = 153。
现要求你使用python编程求出 所有水仙花数
判断闰年
编程实现,输入年份,输入该年是否是闰年,因该程序不信任用户输入,故要求使用异常处理,保持程序的健壮性。
闰年判断条件:
能被4整除,但不能被100 整除。
能被400整除
以上条件满足一个即为闰年
冒泡排序
给定的 列表训练的 列表数据,要求编程 实现 冒泡排序,对列表数据进行排序。
关于冒泡排序的定义:
冒泡排序
判断素数
接收用户输入的数,判断该数是否为 素数。
素数定义: 除了1 和 自身,其他数都不能整除该数,例如 2, 3, 5, 7, 11
ctf题目
flag = 'flag{xxxxxxxxx}'
tmpStr = ''
for i in range(len(flag)):
cur_i = (ord(flag[i]) + i) ^ 0x55
cur_i = cur_i & 0xff
tmpStr += hex(cur_i)[2:]
print(tmpStr)
# 3338363f2a2c3b252e3d262b3e3b382029272cc5给定如上脚本,请你拿到原flag。
好