第一篇 (下)python基础(二)
- 数字类型
1 # 一:int类型 2 # 1、作用: 3 # 2、定义: 4 # age = 10 # age=int(10) 5 6 # 名字(参数) 7 # print('hello','world') 8 9 # x=int(10) 10 # name=input('xxx') 11 # res=print('xxx') # 没有产品 12 # print(res) 13 14 # 2、类型转换 15 # 2.1 纯数字的字符串转成int 16 # res=int('100111') 17 # print(res,type(res)) 18 19 # 2.2(了解) 20 # 2.2.1 十进制转成其他进制 21 # 10进制 -> 二进制 22 # 11 - > 1011 23 # 1011-> 8+2+1 24 # print(bin(11)) # 0b1011 25 26 # 10进制 -> 八进制 27 # print(oct(11)) # 0o13 28 29 # 10进制 -> 十六进制 30 # print(hex(11)) # 0xb 31 # print(hex(123)) # 0xb 32 33 # 2.2.2 其他制转成其十进制 34 # 二进制->10进制 35 # print(int('0b1011',2)) # 11 36 37 # 二进制->8进制 38 # print(int('0o13',8)) # 11 39 40 # 二进制->16进制 41 # print(int('0xb',16)) # 11 42 43 # 3、使用 44 45 # 二:float类型 46 # 1、作用 47 # 2、定义 48 # salary=3.1 # salary=float(3.1) 49 50 # 3、类型转换 51 # res=float("3.1") 52 # print(res,type(res)) 53 54 # 4、使用 55 # int与float没有需要掌握的内置方法 56 # 他们的使用就是数学运算+比较运算
- 字符串类型
# 1、作用 # 2、定义 # msg='hello' # msg=str('msg') # print(type(msg)) # 3、类型转换 # str可以把任意其他类型都转成字符串 # res=str({'a':1}) # print(res,type(res)) # 4、使用:内置方法 # 4.1 优先掌握 # 4.1.1、按索引取值(正向取+反向取) :只能取 msg='hello world' # 正向取 # print(msg[0]) # print(msg[5]) # 反向取 # print(msg[-1]) # 只能取 # msg[0]='H' # 4.1.2、切片:索引的拓展应用,从一个大字符串中拷贝出一个子字符串 msg='hello world' # 顾头不顾尾 # res=msg[0:5] #x # print(res) # print(msg) # 步长 # res=msg[0:5:2] # 0 2 4 # print(res) # hlo # 反向步长(了解) # res=msg[5:0:-1] # print(res) #" olle" msg='hello world' # res=msg[:] # res=msg[0:11] # print(res) # res=msg[::-1] # 把字符串倒过来 # print(res) # 4.1.3、长度len # msg='hello world' # print(len(msg)) # 4.1.4、成员运算in和not in # 判断一个子字符串是否存在于一个大字符串中 # print("alex" in "alex is sb") # print("alex" not in "alex is sb") # print(not "alex" in "alex is sb") # 不推荐使用 # 4.1.5、移除字符串左右两侧的符号strip # 默认去掉的空格 # msg=' egon ' # res=msg.strip() # print(msg) # 不会改变原值 # print(res) # 是产生了新值 # 默认去掉的空格 # msg='****egon****' # print(msg.strip('*')) # 了解:strip只取两边,不去中间 # msg='****e*****gon****' # print(msg.strip('*')) # msg='**/*=-**egon**-=()**' # print(msg.strip('*/-=()')) # 应用 # inp_user=input('your name>>: ').strip() # inp_user=" egon" # inp_pwd=input('your password>>: ').strip() # if inp_user == 'egon' and inp_pwd == '123': # print('登录成功') # else: # print('账号密码错误') # 4.1.6、切分split:把一个字符串按照某种分隔符进行切分,得到一个列表 # # 默认分隔符是空格 # info='egon 18 male' # res=info.split() # print(res) # # 指定分隔符 # info='egon:18:male' # res=info.split(':') # print(res) # 指定分隔次数(了解) # info='egon:18:male' # res=info.split(':',1) # print(res) # 4.1.7、循环 # info='egon:18:male' # for x in info: # print(x) # 4.2 需要掌握 #4.2.1、strip,lstrip,rstrip # msg='***egon****' # print(msg.strip('*')) # print(msg.lstrip('*')) # print(msg.rstrip('*')) #4.2.2、lower,upper # msg='AbbbCCCC' # print(msg.lower()) # print(msg.upper()) #4.2.3、startswith,endswith # print("alex is sb".startswith("alex")) # print("alex is sb".endswith('sb')) #4.2.4、format #4.2.5、split,rsplit:将字符串切成列表 # info="egon:18:male" # print(info.split(':',1)) # ["egon","18:male"] # print(info.rsplit(':',1)) # ["egon:18","male"] #4.2.6、join: 把列表拼接成字符串 # l=['egon', '18', 'male'] # res=l[0]+":"+l[1]+":"+l[2] # res=":".join(l) # 按照某个分隔符号,把元素全为字符串的列表拼接成一个大字符串 # print(res) # l=[1,"2",'aaa'] # ":".join(l) #4.2.7、replace # msg="you can you up no can no bb" # print(msg.replace("you","YOU",)) # print(msg.replace("you","YOU",1)) #4.2.8、isdigit # 判断字符串是否由纯数字组成 # print('123'.isdigit()) # print('12.3'.isdigit()) # age=input('请输入你的年龄:').strip() # if age.isdigit(): # age=int(age) # int("abbab") # if age > 18: # print('猜大了') # elif age < 18: # print('猜小了') # else: # print('才最了') # else: # print('必须输入数字,傻子') # 4.3了解 #4.3.1、find,rfind,index,rindex,count msg='hello egon hahaha' # 找到返回起始索引 # print(msg.find('e')) # 返回要查找的字符串在大字符串中的起始索引 # print(msg.find('egon')) # print(msg.index('e')) # print(msg.index('egon')) # 找不到 # print(msg.find('xxx')) # 返回-1,代表找不到 # print(msg.index('xxx')) # 抛出异常 # msg='hello egon hahaha egon、 egon' # print(msg.count('egon')) #4.3.2、center,ljust,rjust,zfill # print('egon'.center(50,'*')) # print('egon'.ljust(50,'*')) # print('egon'.rjust(50,'*')) # print('egon'.zfill(10)) #4.3.3、expandtabs # msg='hello\tworld' # print(msg.expandtabs(2)) # 设置制表符代表的空格数为2 #4.3.4、captalize,swapcase,title # print("hello world egon".capitalize()) # print("Hello WorLd EGon".swapcase()) # print("hello world egon".title()) #4.3.5、is数字系列 #4.3.6、is其他 # print('abc'.islower()) # print('ABC'.isupper()) # print('Hello World'.istitle()) # print('123123aadsf'.isalnum()) # 字符串由字母或数字组成结果为True # print('ad'.isalpha()) # 字符串由由字母组成结果为True # print(' '.isspace()) # 字符串由空格组成结果为True # print('print'.isidentifier()) # print('age_of_egon'.isidentifier()) # print('1age_of_egon'.isidentifier()) num1=b'4' #bytes num2=u'4' #unicode,python3中无需加u就是unicode num3='四' #中文数字 num4='Ⅳ' #罗马数字 # isdigit只能识别:num1、num2 # print(num1.isdigit()) # True # print(num2.isdigit()) # True # print(num3.isdigit()) # False # print(num4.isdigit()) # False # isnumberic可以识别:num2、num3、num4 # print(num2.isnumeric()) # True # print(num3.isnumeric()) # True # print(num4.isnumeric()) # True # isdecimal只能识别:num2 print(num2.isdecimal()) # True print(num3.isdecimal()) # False print(num4.isdecimal()) # False
- for循环
1 ''' 2 1、什么是for循环 3 循环就是重复做某件事,for循环是python提供第二种循环机制 4 5 2、为何要有for循环 6 理论上for循环能做的事情,while循环都可以做 7 之所以要有for循环,是因为for循环在循环取值(遍历取值)比while循环更简洁 8 9 3、如何用for循环 10 语法: 11 for 变量名 in 可迭代对象:# 可迭代对象可以是:列表、字典、字符串、元组、集合 12 代码1 13 代码2 14 代码3 15 ... 16 ''' 17 # 一:for基本使用之循环取值 18 # 案例1:列表循环取值 19 # 简单版 20 # l = ['alex_dsb', 'lxx_dsb', 'egon_nb'] 21 # for x in l: # x='lxx_dsb' 22 # print(x) 23 24 # 复杂版: 25 # l = ['alex_dsb', 'lxx_dsb', 'egon_nb'] 26 # i=0 27 # while i < 3: 28 # print(l[i]) 29 # i+=1 30 31 32 # 案例2:字典循环取值 33 # 简单版 34 # dic={'k1':111,'k2':2222,'k3':333} 35 # for k in dic: 36 # print(k,dic[k]) 37 38 # 复杂版:while循环可以遍历字典,太麻烦了 39 40 # 案例3:字符串循环取值 41 # 简单版 42 # msg="you can you up,no can no bb" 43 # for x in msg: 44 # print(x) 45 46 # 复杂版:while循环可以遍历字典,太麻烦了 47 48 49 # 二:总结for循环与while循环的异同 50 # 1、相同之处:都是循环,for循环可以干的事,while循环也可以干 51 # 2、不同之处: 52 # while循环称之为条件循环,循环次数取决于条件何时变为假 53 # for循环称之为"取值循环",循环次数取决in后包含的值的个数 54 # for x in [1,2,3]: 55 # print('===>') 56 # print('8888') 57 58 59 # 三:for循环控制循环次数:range() 60 # in后直接放一个数据类型来控制循环次数有局限性: 61 # 当循环次数过多时,数据类型包含值的格式需要伴随着增加 62 # for x in 'a c': 63 # inp_name=input('please input your name: ') 64 # inp_pwd=input('please input your password: ') 65 # 66 67 # range功能介绍 68 ''' 69 >>> range(10) 70 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 71 >>> 72 >>> range(1,9) # 1...8 73 [1, 2, 3, 4, 5, 6, 7, 8] 74 >>> 75 >>> range(1,9,1) # 1 2 3 4 5 6 7 8 76 [1, 2, 3, 4, 5, 6, 7, 8] 77 >>> range(1,9,2) # 1 3 5 7 78 [1, 3, 5, 7] 79 ''' 80 # for i in range(30): 81 # print('===>') 82 83 84 # for+break: 同while循环一样 85 # for+else:同while循环一样 86 # username='egon' 87 # password='123' 88 # for i in range(3): 89 # inp_name = input('请输入您的账号:') 90 # inp_pwd = input('请输入您的密码:') 91 # 92 # if inp_name == username and inp_pwd == password: 93 # print('登录成功') 94 # break 95 # else: 96 # print('输错账号密码次数过多') 97 98 99 # 四:range补充知识(了解) 100 # 1、for搭配range,可以按照索引取值,但是麻烦,所以不推荐 101 # l=['aaa','bbb','ccc'] # len(l) 102 # for i in range(len(l)): 103 # print(i,l[i]) 104 # 105 # for x in l: 106 # print(l) 107 # 2、range()在python3里得到的是一只"会下蛋的老母鸡" 108 109 110 # 五:for+continue 111 # for i in range(6): # 0 1 2 3 4 5 112 # if i == 4: 113 # continue 114 # print(i) 115 116 # 六:for循环嵌套:外层循环循环一次,内层循环需要完整的循环完毕 117 # for i in range(3): 118 # print('外层循环-->', i) 119 # for j in range(5): 120 # print('内层-->', j) 121 122 # 补充:终止for循环只有break一种方案 123 124 # print('hello %s' % 'egon') 125 # 1、print之逗号的使用 126 # print('hello','world','egon') 127 # 2、换行符 128 # print('hello\n') 129 # print('world') 130 # 3、print值end参数的使用 131 # print('hello\n',end='') 132 # print('word') 133 print('hello',end='*') 134 print('world',end='*')
- 列表
1 # 1、作用:按位置存放多个值 2 # 2、定义 3 # l=[1,1.2,'a'] # l=list([1,1.2,'a']) 4 # print(type(l)) 5 6 # 3、类型转换: 但凡能够被for循环遍历的类型都可以当做参数传给list()转成列表 7 # res=list('hello') 8 # print(res) 9 # 10 # res=list({'k1':111,'k2':222,'k3':3333}) 11 # print(res) 12 13 14 # 4、内置方法 15 # 优先掌握的操作: 16 # 1、按索引存取值(正向存取+反向存取):即可以取也可以改 17 # l=[111,'egon','hello'] 18 # 正向取 19 # print(l[0]) 20 # 反向取 21 # print(l[-1]) 22 # 可以取也可以改:索引存在则修改对应的值 23 # l[0]=222 24 # print(l) 25 26 # 无论是取值操作还是赋值操作:索引不存在则报错 27 # l[3]=333 28 29 30 # 2、切片(顾头不顾尾,步长) 31 l = [111, 'egon', 'hello', 'a', 'b', 'c', 'd', [1, 2, 3]] 32 # print(l[0:3]) 33 # print(l[0:5:2]) # 0 2 4 34 35 # print(l[0:len(l)]) 36 # print(l[:]) 37 # new_l=l[:] # 切片等同于拷贝行为,而且相当于浅copy 38 # print(id(l)) 39 # print(id(new_l)) 40 41 # l[-1][0]=1111111 42 # print(l) 43 # print(new_l) 44 45 # print(l[::-1]) 46 47 # msg1='hello:egon:<>:18[]==123' 48 # msg2=msg1[:] 49 # print(msg1,id(msg1)) 50 # print(msg2,id(msg2)) 51 # 3、长度 52 # print(len([1, 2, 3])) 53 # 4、成员运算in和not in 54 # print('aaa' in ['aaa', 1, 2]) 55 # print(1 in ['aaa', 1, 2]) 56 # 5、往列表中添加值 57 # 5.1 追加 58 # l=[111,'egon','hello'] 59 # l.append(3333) 60 # l.append(4444) 61 # print(l) 62 63 # 5.2、插入值 64 # l=[111,'egon','hello'] 65 # l.insert(0,'alex') 66 # print(l) 67 68 # 5.3、extend添加值 69 # new_l=[1,2,3] 70 # l=[111,'egon','hello'] 71 # l.append(new_l) 72 # print(l) 73 74 # 代码实现 75 # for item in new_l: 76 # l.append(item) 77 # print(l) 78 79 # extend实现了上述代码 80 # l.extend(new_l) 81 # l.extend('abc') 82 # print(l) 83 84 85 # 7、删除 86 # 方式一:通用的删除方法,只是单纯的删除、没有返回值 87 # l = [111, 'egon', 'hello'] 88 # del l[1] 89 # x =del l[1] # 抛出异常,不支持赋值语法 90 # print(l) 91 92 # 方式二:l.pop()根据索引删除,会返回删除的值 93 # l = [111, 'egon', 'hello'] 94 # l.pop() # 不指定索引默认删除最后一个 95 # l.pop() 96 # print(l) 97 98 # res=l.pop(1) 99 # print(l) 100 101 # print(res) 102 103 # 方式三:l.remove()根据元素删除,返回None 104 # l = [111, 'egon', [1,2,3],'hello'] 105 # l.remove([1,2,3]) 106 # print(l) 107 # res=l.remove('egon') 108 # print(res) # None 109 110 111 # 8、循环 112 # l=[1,'aaa','bbb'] 113 # for x in l: 114 # l.pop(1) 115 # print(x) 116 117 # 需要掌握操作 118 # l = [1, 'aaa', 'bbb','aaa','aaa'] 119 # 1、l.count() 120 # print(l.count('aaa')) 121 122 # 2、l.index() 123 # print(l.index('aaa')) 124 # print(l.index('aaaaaaaaa')) # 找不到报错 125 126 # 3、l.clear() 127 # l.clear() 128 # print(l) 129 130 # 4、l.reverse():不是排序,就是将列表倒过来 131 # l = [1, 'egon','alex','lxx'] 132 # l.reverse() 133 # print(l) 134 135 # 5、l.sort(): 列表内元素必须是同种类型才可以排序 136 # l=[11,-3,9,2,3.1] 137 # l.sort() # 默认从小到大排,称之为升序 138 # l.sort(reverse=True) # 从大到小排,设置为降序 139 # print(l) 140 141 # l=[11,'a',12] 142 # l.sort() 143 144 # l=['c','e','a'] 145 # l.sort() 146 # print(l) 147 148 # 排序:列表内为字典,按字典相应字段排序 149 # source_list=[{"count": 91, "source": "stock.10jqka.com.cn"},{"count": 77, "source": "finance.ifeng.com"}] 150 # print("排序前的数据:\n",source_list) 151 # source_list.sort(key=lambda source: source["count"],reverse=True) # 按照count进行排序(降序) 152 # print("排好序后新数据:\n{}".format(count_source_list)) 153 154 # 了解:字符串可以比大小,按照对应的位置的字符依次pk 155 # 字符串的大小是按照ASCI码表的先后顺序加以区别,表中排在后面的字符大于前面的 156 # print('a'>'b') 157 # print('abz'>'abcdefg') 158 159 # 了解:列表也可以比大小,原理同字符串一样,但是对应位置的元素必须是同种类型 160 # l1=[1,'abc','zaa'] 161 # l2=[1,'abc','zb'] 162 # 163 # print(l1 < l2) 164 165 166 # 补充 167 # 1、队列:FIFO,先进先出 168 # l=[] 169 # # 入队操作 170 # l.append('first') 171 # l.append('second') 172 # l.append('third') 173 # 174 # print(l) 175 # # 出队操作 176 # print(l.pop(0)) 177 # print(l.pop(0)) 178 # print(l.pop(0)) 179 180 # 2、堆栈:LIFO,后进先出 181 l=[] 182 # 入栈操作 183 l.append('first') 184 l.append('second') 185 l.append('third') 186 187 print(l) 188 # 出队操作 189 print(l.pop()) 190 print(l.pop()) 191 print(l.pop())
- 元组
1 # 元组就是"一个不可变的列表" 2 #1、作用:按照索引/位置存放多个值,只用于读不用于改 3 4 #2、定义:()内用逗号分隔开多个任意类型的元素 5 # t=(1,1.3,'aa') # t=tuple((1,1.3,'aa')) 6 # print(t,type(t)) 7 8 9 # x=(10) # 单独一个括号代表包含的意思 10 # print(x,type(x)) 11 12 # t=(10,) # 如果元组中只有一个元素,必须加逗号 13 # print(t,type(t)) 14 15 # t=(1,1.3,'aa') # t=(0->值1的内存地址,1->值1.3的内存地址,2->值'aaa'的内存地址,) 16 # t[0]=11111 17 18 # t=(1,[11,22]) # t=(0->值1的内存地址,1->值[1,2]的内存地址,) 19 # print(id(t[0]),id(t[1])) 20 # # t[0]=111111111 # 不能改 21 # # t[1]=222222222 # 不能改 22 # 23 # t[1][0]=11111111111111111 24 # # print(t) 25 # print(id(t[0]),id(t[1])) 26 27 28 #3、类型转换 29 # print(tuple('hello')) 30 # print(tuple([1,2,3])) 31 # print(tuple({'a1':111,'a2':333})) 32 33 #4、内置方法 34 #优先掌握的操作: 35 #1、按索引取值(正向取+反向取):只能取 36 # t=('aa','bbb','cc') 37 # print(t[0]) 38 # print(t[-1]) 39 40 #2、切片(顾头不顾尾,步长) 41 # t=('aa','bbb','cc','dd','eee') 42 # print(t[0:3]) 43 # print(t[::-1]) 44 45 #3、长度 46 # t=('aa','bbb','cc','dd','eee') 47 # print(len(t)) 48 #4、成员运算in和not in 49 # print('aa' in t) 50 51 #5、循环 52 # for x in t: 53 # print(x) 54 55 #6、 56 t=(2,3,111,111,111,111) 57 # print(t.index(111)) 58 # print(t.index(1111111111)) 59 60 print(t.count(111))
- 字典
-- 字典排序
data ={'元気森林旗舰店': 51640.0, '一包生活旗舰店': 22108.0, '一只小猪零食铺': 24747.0} # 排序 (升序) data = dict(sorted(data.items(), key=lambda item: item[1])[-10:]) print(data) # {'一包生活旗舰店': 22108.0, '一只小猪零食铺': 24747.0, '元気森林旗舰店': 51640.0}1 #1、作用 2 3 #2、定义:{}内用逗号分隔开多个key:value,其中value可以使任意类型,但是 4 # key必须是不可变类型,且不能重复 5 # 造字典的方式一: 6 # d={'k1':111,(1,2,3):222} # d=dict(...) 7 # print(d['k1']) 8 # print(d[(1,2,3)]) 9 # print(type(d)) 10 11 # d={} # 默认定义出来的是空字典 12 # print(d,type(d)) 13 14 # 造字典的方式二: 15 # d=dict(x=1,y=2,z=3) 16 # print(d,type(d)) 17 18 19 #3、数据类型转换 20 # info=[ 21 # ['name','egon'], 22 # ('age',18), 23 # ['gender','male'] 24 # ] 25 # # d={} 26 # # for k,v in info: # k,v=['name','egon'], 27 # # d[k]=v 28 # # print(d) 29 # 30 # 造字典的方式三: 31 # res=dict(info) # 一行代码搞定上述for循环的工作 32 # print(res) 33 34 35 # 造字典的方式四:快速初始化一个字典 36 # keys=['name','age','gender'] 37 # # d={} 38 # # for k in keys: 39 # # d[k]=None 40 # # print(d) 41 # d={}.fromkeys(keys,None) # 一行代码搞定上述for循环的工作 42 # print(d) 43 44 #4、内置方法 45 #优先掌握的操作: 46 #1、按key存取值:可存可取 47 # d={'k1':111} 48 # 针对赋值操作:key存在,则修改 49 # d['k1']=222 50 # 针对赋值操作:key不存在,则创建新值 51 # d['k2']=3333 52 # print(d) 53 54 #2、长度len 55 # d={'k1':111,'k2':2222,'k1':3333,'k1':4444} 56 # print(d) 57 # print(len(d)) 58 59 60 #3、成员运算in和not in:根据key 61 # d={'k1':111,'k2':2222} 62 # print('k1' in d) 63 # print(111 in d) 64 65 #4、删除 66 d={'k1':111,'k2':2222} 67 # 4.1 通用删除 68 # del d['k1'] 69 # print(d) 70 71 # 4.2 pop删除:根据key删除元素,返回删除key对应的那个value值 72 # res=d.pop('k2') 73 # print(d) 74 # print(res) 75 76 # 4.3 popitem删除:随机删除,返回元组(删除的key,删除的value) 77 # res=d.popitem() 78 # print(d) 79 # print(res) 80 81 #5、键keys(),值values(),键值对items() =>在python3中得到的是老母鸡 82 d={'k1':111,'k2':2222} 83 ''' 84 在python2中 85 >>> d={'k1':111,'k2':2222} 86 >>> 87 >>> d.keys()#6、循环 88 ['k2', 'k1'] 89 >>> d.values() 90 [2222, 111] 91 >>> d.items() 92 [('k2', 2222), ('k1', 111)] 93 >>> dict(d.items()) 94 {'k2': 2222, 'k1': 111} 95 >>> 96 ''' 97 98 #6、for循环 99 # for k in d.keys(): 100 # print(k) 101 # 102 # for k in d: 103 # print(k) 104 105 # for v in d.values(): 106 # print(v) 107 108 # for k,v in d.items(): 109 # print(k,v) 110 111 112 # print(list(d.keys())) 113 # print(list(d.values())) 114 # print(list(d.items())) 115 116 117 #需要掌握的内置方法 118 d={'k1':111} 119 #1、d.clear() 120 121 #2、d.update() 122 # d.update({'k2':222,'k3':333,'k1':111111111111111}) 123 # print(d) 124 125 #3、d.get() :根据key取值,容错性好 126 # print(d['k2']) # key不存在则报错 127 128 # print(d.get('k1')) # 111 129 # print(d.get('k2')) # key不存在不报错,返回None 130 131 #4、d.setdefault() 132 # info={} 133 # if 'name' in info: 134 # ... # 等同于pass 135 # else: 136 # info['name']='egon' 137 # print(info) 138 139 # 4.1 如果key有则不添加,返回字典中key对应的值 140 info={'name':'egon'} 141 res=info.setdefault('name','egon') 142 # print(info) 143 144 print(res) 145 146 # 4.2 如果key没有则添加,返回字典中key对应的值 147 info={} 148 res=info.setdefault('name','egon') 149 # print(info) 150 print(res)
- 集合
1 # 1、作用 2 # 1.1 关系运算 3 # friends1 = ["zero","kevin","jason","egon"] 4 # friends2 = ["Jy","ricky","jason","egon"] 5 # 6 # l=[] 7 # for x in friends1: 8 # if x in friends2: 9 # l.append(x) 10 # print(l) 11 12 13 # 1.2、去重 14 15 16 # 2、定义: 在{}内用逗号分隔开多个元素,多个元素满足以下三个条件 17 # 1. 集合内元素必须为不可变类型 18 # 2. 集合内元素无序 19 # 3. 集合内元素没有重复 20 21 # s={1,2} # s=set({1,2}) 22 23 # s={1,[1,2]} # 集合内元素必须为不可变类型 24 # s={1,'a','z','b',4,7} # 集合内元素无序 25 # s={1,1,1,1,1,1,'a','b'} # 集合内元素没有重复 26 # print(s) 27 28 # 了解 29 # s={} # 默认是空字典 30 # print(type(s)) 31 # 定义空集合 32 # s=set() 33 # print(s,type(s)) 34 35 # 3、类型转换 36 # set({1,2,3}) 37 # res=set('hellolllll') 38 # print(res) 39 40 # print(set([1,1,1,1,1,1])) 41 # print(set([1,1,1,1,1,1,[11,222]]) # 报错 42 43 # print(set({'k1':1,'k2':2})) 44 45 # 4、内置方法 46 # =========================关系运算符========================= 47 friends1 = {"zero","kevin","jason","egon"} 48 friends2 = {"Jy","ricky","jason","egon"} 49 50 # 4.1 取交集:两者共同的好友 51 # res=friends1 & friends2 52 # print(res) 53 # print(friends1.intersection(friends2)) 54 # 4.2 取并集/合集:两者所有的好友 55 # print(friends1 | friends2) 56 # print(friends1.union(friends2)) 57 58 # 4.3 取差集:取friends1独有的好友 59 # print(friends1 - friends2) 60 # print(friends1.difference(friends2)) 61 62 # 取friends2独有的好友 63 # print(friends2 - friends1) 64 # print(friends2.difference(friends1)) 65 66 # 4.4 对称差集: 求两个用户独有的好友们(即去掉共有的好友) 67 # print(friends1 ^ friends2) 68 # print(friends1.symmetric_difference(friends2)) 69 70 # 4.5 父子集:包含的关系 71 # s1={1,2,3} 72 # s2={1,2,4} 73 # 不存在包含关系,下面比较均为False 74 # print(s1 > s2) 75 # print(s1 < s2) 76 77 # s1={1,2,3} 78 # s2={1,2} 79 # print(s1 > s2) # 当s1大于或等于s2时,才能说是s1是s2他爹 80 # print(s1.issuperset(s2)) 81 # print(s2.issubset(s1)) # s2 < s2 =>True 82 83 # s1={1,2,3} 84 # s2={1,2,3} 85 # print(s1 == s2) # s1与s2互为父子 86 # print(s1.issuperset(s2)) 87 # print(s2.issuperset(s1)) 88 89 90 # =========================去重========================= 91 # 1、只能针对不可变类型去重 92 # print(set([1,1,1,1,2])) 93 94 # 2、无法保证原来的顺序 95 # l=[1,'a','b','z',1,1,1,2] 96 # l=list(set(l)) 97 # print(l) 98 99 100 l=[ 101 {'name':'lili','age':18,'sex':'male'}, 102 {'name':'jack','age':73,'sex':'male'}, 103 {'name':'tom','age':20,'sex':'female'}, 104 {'name':'lili','age':18,'sex':'male'}, 105 {'name':'lili','age':18,'sex':'male'}, 106 ] 107 new_l=[] 108 for dic in l: 109 if dic not in new_l: 110 new_l.append(dic) 111 112 # print(new_l) 113 114 # 其他操作 115 ''' 116 # 1.长度 117 >>> s={'a','b','c'} 118 >>> len(s) 119 3 120 121 # 2.成员运算 122 >>> 'c' in s 123 True 124 125 # 3.循环 126 >>> for item in s: 127 ... print(item) 128 ... 129 c 130 a 131 b 132 ''' 133 134 # 其他内置方法 135 s={1,2,3} 136 # 需要掌握的内置方法1:discard 137 # s.discard(4) # 删除元素不存在do nothing 138 # print(s) 139 # s.remove(4) # 删除元素不存在则报错 140 141 142 # 需要掌握的内置方法2:update 143 # s.update({1,3,5}) 144 # print(s) 145 146 # 需要掌握的内置方法3:pop 147 # res=s.pop() 148 # print(res) 149 150 # 需要掌握的内置方法4:add 151 # s.add(4) 152 # print(s) 153 154 155 156 # 其余方法全为了解 157 res=s.isdisjoint({3,4,5,6}) # 两个集合完全独立、没有共同部分,返回True 158 print(res) 159 160 # 了解 161 # s.difference_update({3,4,5}) # s=s.difference({3,4,5}) 162 # print(s)
- 字符编码
1 # coding:utf-8 2 3 x='上' 4 5 res=x.encode('gbk') # unicode--->gbk 6 # print(res,type(res)) 7 8 print(res.decode('gbk')) 9 10 分析过程 11 12 x="上" 13 14 内存 15 上-------翻译-----》0101010 16 上《----翻译《-----0101010 17 18 字符编码表就是一张字符与数字对应关系的表 19 20 21 a-00 22 b-01 23 c-10 24 d-11 25 26 ASCII表: 27 1、只支持英文字符串 28 2、采用8位二进制数对应一个英文字符串 29 30 GBK表: 31 1、支持英文字符、中文字符 32 2、 33 采用8位(8bit=1Bytes)二进制数对应一个英文字符串 34 采用16位(16bit=2Bytes)二进制数对应一个中文字符串 35 36 37 unicode(内存中统一使用unicode): 38 1、 39 兼容万国字符 40 与万国字符都有对应关系 41 2、 42 采用16位(16bit=2Bytes)二进制数对应一个中文字符串 43 个别生僻会采用4Bytes、8Bytes 44 45 46 unicode表: 47 内存 48 人类的字符---------unicode格式的数字---------- 49 | | 50 | | 51 | 52 硬盘 | 53 | 54 | | 55 | | 56 GBK格式的二进制 Shift-JIS格式的二进制 57 58 老的字符编码都可以转换成unicode,但是不能通过unicode互转 59 60 61 62 utf-8: 63 英文->1Bytes 64 汉字->3Bytes 65 66 67 68 结论: 69 1、内存固定使用unicode,我们可以改变的是存入硬盘采用格式 70 英文+汉字-》unicode-》gbk 71 英文+日文-》unicode-》shift-jis 72 万国字符》-unicode-》utf-8 73 74 2、文本文件存取乱码问题 75 存乱了:解决方法是,编码格式应该设置成支持文件内字符串的格式 76 取乱了:解决方法是,文件是以什么编码格式存如硬盘的,就应该以什么编码格式读入内存 77 78 79 80 3、python解释器默认读文件的编码 81 python3默认:utf-8 82 python2默认:ASCII 83 84 指定文件头修改默认的编码: 85 在py文件的首行写: 86 #coding:gbk 87 88 4、保证运行python程序前两个阶段不乱码的核心法则: 89 指定文件头 90 # coding:文件当初存入硬盘时所采用的编码格式 91 92 93 5、 94 python3的str类型默认直接存成unicode格式,无论如何都不会乱码 95 保证python2的str类型不乱码 96 x=u'上' 97 98 99 6、了解 100 python2解释器有两种字符串类型:str、unicode 101 # str类型 102 x='上' # 字符串值会按照文件头指定的编码格式存入变量值的内存空间 103 # unicode类型 104 x=u'上' # 强制存成unicode
- 文件操作
1 1、什么是文件 2 文件是操作系统提供给用户/应用程序操作硬盘的一种虚拟的概念/接口 3 4 用户/应用程序(open()) 5 操作系统(文件) 6 计算机硬件(硬盘) 7 8 2、为何要用文件 9 用户/应用程序可以通过文件将数据永久保存的硬盘中 10 即操作文件就是操作硬盘 11 12 用户/应用程序直接操作的是文件,对文件进行的所有的操作,都是 13 在向操作系统发送系统调用,然后再由操作将其转换成具体的硬盘操作 14 15 3、如何用文件:open() 16 控制文件读写内容的模式:t和b 17 强调:t和b不能单独使用,必须跟r/w/a连用 18 19 t文本(默认的模式) 20 1、读写都以str(unicode)为单位的 21 2、文本文件 22 3、必须指定encoding='utf-8' 23 24 b二进制/bytes 25 26 控制文件读写操作的模式 27 r只读模式 28 w只写模式 29 a只追加写模式 30 +:r+、w+、a+
1 # 1、打开文件 2 # windows路径分隔符问题 3 # open('C:\a.txt\nb\c\d.txt') 4 # 解决方案一:推荐 5 # open(r'C:\a.txt\nb\c\d.txt') 6 # 解决方案二: 7 # open('C:/a.txt/nb/c/d.txt') 8 9 10 f=open(r'aaa/a.txt',mode='rt') # f的值是一种变量,占用的是应用程序的内存空间 11 # print(f) 12 # x=int(10) 13 14 # 2、操作文件:读/写文件,应用程序对文件的读写请求都是在向操作系统发送 15 # 系统调用,然后由操作系统控制硬盘把输入读入内存、或者写入硬盘 16 res=f.read() 17 print(type(res)) 18 # print(res) 19 # 3、关闭文件 20 f.close() # 回收操作系统资源 21 # print(f) 22 # f.read() # 变量f存在,但是不能再读了 23 24 # del f # 回收应用程序资源 25 26 27 """ 28 with 上下文管理机制 29 """ 30 # 文件对象又称为文件句柄 31 32 # with open('a.txt',mode='rt') as f1: # f1=open('a.txt',mode='rt') 33 # res=f1.read() 34 # print(res) 35 36 37 with open('a.txt',mode='rt') as f1,\ 38 open('b.txt',mode='rt') as f2: 39 res1=f1.read() 40 res2=f2.read() 41 print(res1) 42 print(res2) 43 44 # f1.close() 45 # f2.close() 46 47 ''' 48 强调:t和b不能单独使用,必须跟r/w/a连用 49 50 t文本(默认的模式) 51 1、读写都以str(unicode)为单位的 52 2、文本文件 53 3、必须指定encoding='utf-8' 54 55 ''' 56 # 没有指定encoding参数操作系统会使用自己默认的编码 57 # linux系统默认utf-8 58 # windows系统默认gbk 59 with open('c.txt',mode='rt',encoding='utf-8') as f: 60 res=f.read() # t模式会将f.read()读出的结果解码成unicode 61 print(res,type(res)) 62 63 64 65 # 内存:utf-8格式的二进制-----解码-----》unicode 66 # 硬盘(c.txt内容:utf-8格式的二进制)
1 # 以t模式为基础进行内存操作 2 3 # 1、r(默认的操作模式):只读模式,当文件不存在时报错,当文件存在时文件指针跳到开始位置 4 # with open('c.txt',mode='rt',encoding='utf-8') as f: 5 # print('第一次读'.center(50,'*')) 6 # res=f.read() # 把所有内容从硬盘读入内存 7 # print(res) 8 # 9 # # with open('c.txt', mode='rt', encoding='utf-8') as f: 10 # print('第二次读'.center(50,'*')) 11 # res1=f.read() 12 # print(res1) 13 14 15 # ===============案例================== 16 # inp_username=input('your name>>: ').strip() 17 # inp_password=input('your password>>: ').strip() 18 # 19 # # 验证 20 # with open('user.txt',mode='rt',encoding='utf-8') as f: 21 # for line in f: 22 # # print(line,end='') # egon:123\n 23 # username,password=line.strip().split(':') 24 # if inp_username == username and inp_password == password: 25 # print('login successfull') 26 # break 27 # else: 28 # print('账号或密码错误') 29 30 31 # 应用程序====》文件 32 # 应用程序====》数据库管理软件=====》文件 33 34 # 2、w:只写模式,当文件不存在时会创建空文件,当文件存在会清空文件,指针位于开始位置 35 # with open('d.txt',mode='wt',encoding='utf-8') as f: 36 # f.read() # 报错,不可读 37 # f.write('擦勒\n') 38 39 # 强调1: 40 # 在以w模式打开文件没有关闭的情况下,连续写入,新的内容总是跟在旧的之后 41 # with open('d.txt',mode='wt',encoding='utf-8') as f: 42 # f.write('擦勒1\n') 43 # f.write('擦勒2\n') 44 # f.write('擦勒3\n') 45 46 # 强调2: 47 # 如果重新以w模式打开文件,则会清空文件内容 48 # with open('d.txt',mode='wt',encoding='utf-8') as f: 49 # f.write('擦勒1\n') 50 # with open('d.txt',mode='wt',encoding='utf-8') as f: 51 # f.write('擦勒2\n') 52 # with open('d.txt',mode='wt',encoding='utf-8') as f: 53 # f.write('擦勒3\n') 54 55 # 案例:w模式用来创建全新的文件 56 # 文件文件的copy工具 57 58 # src_file=input('源文件路径>>: ').strip() 59 # dst_file=input('源文件路径>>: ').strip() 60 # with open(r'{}'.format(src_file),mode='rt',encoding='utf-8') as f1,\ 61 # open(r'{}'.format(dst_file),mode='wt',encoding='utf-8') as f2: 62 # res=f1.read() 63 # f2.write(res) 64 65 66 # 3、a:只追加写,在文件不存在时会创建空文档,在文件存在时文件指针会直接调到末尾 67 # with open('e.txt',mode='at',encoding='utf-8') as f: 68 # # f.read() # 报错,不能读 69 # f.write('擦嘞1\n') 70 # f.write('擦嘞2\n') 71 # f.write('擦嘞3\n') 72 73 # 强调 w 模式与 a 模式的异同: 74 # 1 相同点:在打开的文件不关闭的情况下,连续的写入,新写的内容总会跟在前写的内容之后 75 # 2 不同点:以 a 模式重新打开文件,不会清空原文件内容,会将文件指针直接移动到文件末尾,新写的内容永远写在最后 76 77 78 # 案例:a模式用来在原有的文件内存的基础之上写入新的内容,比如记录日志、注册 79 # 注册功能 80 # name=input('your name>>: ') 81 # pwd=input('your name>>: ') 82 # with open('db.txt',mode='at',encoding='utf-8') as f: 83 # f.write('{}:{}\n'.format(name,pwd)) 84 85 86 # 了解:+不能单独使用,必须配合r、w、a 87 # with open('g.txt',mode='rt+',encoding='utf-8') as f: 88 # # print(f.read()) 89 # f.write('中国') 90 91 # with open('g.txt',mode='w+t',encoding='utf-8') as f: 92 # f.write('111\n') 93 # f.write('222\n') 94 # f.write('333\n') 95 # print('====>',f.read()) 96 97 # 98 # with open('g.txt',mode='a+t',encoding='utf-8') as f: 99 # print(f.read()) 100 # 101 # f.write('444\n') 102 # f.write('5555\n') 103 # print(f.read())
- 文件高级操作
1 模式(控制文件操作的模式)-》了解 2 x, 只写模式【不可读;不存在则创建,存在则报错】 3 """ 4 # with open('a.txt',mode='x',encoding='utf-8') as f: 5 # pass 6 7 # with open('c.txt',mode='x',encoding='utf-8') as f: 8 # f.read() 9 10 with open('d.txt', mode='x', encoding='utf-8') as f: 11 f.write('哈哈哈\n') 12 13 14 15 控制文件读写内容的模式 16 t: 17 1、读写都是以字符串(unicode)为单位 18 2、只能针对文本文件 19 3、必须指定字符编码,即必须指定encoding参数 20 b:binary模式 21 1、读写都是以bytes为单位 22 2、可以针对所有文件 23 3、一定不能指定字符编码,即一定不能指定encoding参数 24 25 总结: 26 1、在操作纯文本文件方面t模式帮我们省去了编码与解码的环节,b模式则需要手动编码与解码,所以此时t模式更为方便 27 2、针对非文本文件(如图片、视频、音频等)只能使用b模式 28 """ 29 30 # 错误演示:t模式只能读文本文件 31 # with open(r'爱nmlgb的爱情.mp4',mode='rt') as f: 32 # f.read() # 硬盘的二进制读入内存-》t模式会将读入内存的内容进行decode解码操作 33 34 35 # 36 # with open(r'test.jpg',mode='rb',encoding='utf-8') as f: 37 # res=f.read() # 硬盘的二进制读入内存—>b模式下,不做任何转换,直接读入内存 38 # print(res) # bytes类型—》当成二进制 39 # print(type(res)) 40 41 # with open(r'd.txt',mode='rb') as f: 42 # res=f.read() # utf-8的二进制 43 # print(res,type(res)) 44 # 45 # print(res.decode('utf-8')) 46 47 # with open(r'd.txt',mode='rt',encoding='utf-8') as f: 48 # res=f.read() # utf-8的二进制->unicode 49 # print(res) 50 51 52 # with open(r'e.txt',mode='wb') as f: 53 # f.write('你好hello'.encode('gbk')) 54 55 # with open(r'f.txt',mode='wb') as f: 56 # f.write('你好hello'.encode('utf-8')) 57 # f.write('哈哈哈'.encode('gbk')) 58 59 60 # 文件拷贝工具 61 src_file=input('源文件路径>>: ').strip() 62 dst_file=input('源文件路径>>: ').strip() 63 with open(r'{}'.format(src_file),mode='rb') as f1,\ 64 open(r'{}'.format(dst_file),mode='wb') as f2: 65 # res=f1.read() # 内存占用过大 66 # f2.write(res) 67 68 for line in f1: 69 f2.write(line) 70 71 72 73 74 # 循环读取文件 75 # 方式一:自己控制每次读取的数据的数据量 76 # with open(r'test.jpg',mode='rb') as f: 77 # while True: 78 # res=f.read(1024) # 1024 79 # if len(res) == 0: 80 # break 81 # print(len(res)) 82 83 84 # 方式二:以行为单位读,当一行内容过长时会导致一次性读入内容的数据量过大 85 # with open(r'g.txt',mode='rt',encoding='utf-8') as f: 86 # for line in f: 87 # print(len(line),line) 88 89 # with open(r'g.txt',mode='rb') as f: 90 # for line in f: 91 # print(line) 92 93 # with open(r'test.jpg',mode='rb') as f: 94 # for line in f: 95 # print(line) 96 97 98 99 三 文件的其他相关操作 100 # 一:读相关操作 101 # 1、readline:一次读一行 102 # with open(r'g.txt',mode='rt',encoding='utf-8') as f: 103 # # res1=f.readline() 104 # # res2=f.readline() 105 # # print(res2) 106 # 107 # while True: 108 # line=f.readline() 109 # if len(line) == 0: 110 # break 111 # print(line) 112 113 # 2、readlines: 114 # with open(r'g.txt',mode='rt',encoding='utf-8') as f: 115 # res=f.readlines() 116 # print(res) 117 118 # 强调: 119 # f.read()与f.readlines()都是将内容一次性读入内存,如果内容过大会导致内存溢出,若还想将内容全读入内存, 120 121 122 # 二:写相关操作 123 # f.writelines(): 124 # with open('h.txt',mode='wt',encoding='utf-8') as f: 125 # # f.write('1111\n222\n3333\n') 126 # 127 # # l=['11111\n','2222','3333',4444] 128 # l=['11111\n','2222','3333'] 129 # # for line in l: 130 # # f.write(line) 131 # f.writelines(l) 132 133 134 # with open('h.txt', mode='wb') as f: 135 # # l = [ 136 # # '1111aaa1\n'.encode('utf-8'), 137 # # '222bb2'.encode('utf-8'), 138 # # '33eee33'.encode('utf-8') 139 # # ] 140 # 141 # # 补充1:如果是纯英文字符,可以直接加前缀b得到bytes类型 142 # # l = [ 143 # # b'1111aaa1\n', 144 # # b'222bb2', 145 # # b'33eee33' 146 # # ] 147 # 148 # # 补充2:'上'.encode('utf-8') 等同于bytes('上',encoding='utf-8') 149 # l = [ 150 # bytes('上啊',encoding='utf-8'), 151 # bytes('冲呀',encoding='utf-8'), 152 # bytes('小垃圾们',encoding='utf-8'), 153 # ] 154 # f.writelines(l) 155 156 157 # 3、flush: 158 # with open('h.txt', mode='wt',encoding='utf-8') as f: 159 # f.write('哈') 160 # # f.flush() 161 162 163 # 4、了解 164 with open('h.txt', mode='wt', encoding='utf-8') as f: 165 print(f.readable()) 166 print(f.writable()) 167 print(f.encoding) 168 print(f.name) 169 170 print(f.closed) 171 172 四 文件的高级操作-控制文件指针的移动 173 # 指针移动的单位都是以bytes/字节为单位 174 # 只有一种情况特殊: 175 # t模式下的read(n),n代表的是字符个数 176 177 # with open('aaa.txt',mode='rt',encoding='utf-8') as f: 178 # res=f.read(4) 179 # print(res) 180 181 # f.seek(n,模式):n指的是移动的字节个数 182 # 模式: 183 # 模式0:参照物是文件开头位置 184 # f.seek(9,0) 185 # f.seek(3,0) # 3 186 187 # 模式1:参照物是当前指针所在位置 188 # f.seek(9,1) 189 # f.seek(3,1) # 12 190 191 # 模式2:参照物是文件末尾位置,应该倒着移动 192 # f.seek(-9,2) # 3 193 # f.seek(-3,2) # 9 194 195 # 强调:只有0模式可以在t下使用,1、2必须在b模式下用 196 197 # f.tell() # 获取文件指针当前位置 198 199 # 示范 200 # with open('aaa.txt',mode='rb') as f: 201 # f.seek(9,0) 202 # f.seek(3,0) # 3 203 # # print(f.tell()) 204 # f.seek(4,0) 205 # res=f.read() 206 # print(res.decode('utf-8')) 207 208 209 210 # with open('aaa.txt',mode='rb') as f: 211 # f.seek(9,1) 212 # f.seek(3,1) # 12 213 # print(f.tell()) 214 215 216 # with open('aaa.txt',mode='rb') as f: 217 # f.seek(-9,2) 218 # # print(f.tell()) 219 # f.seek(-3,2) 220 # # print(f.tell()) 221 # print(f.read().decode('utf-8'))
-
异常处理(try..except,raise)
try: for i in range(10): try: print(i,"进行一些操作,成功了!") if i==2: raise Exception("我要阻止你了!") #raise主动抛出错误 except Exception as e: print(e) except Exception as e: print(11) print("结束了")
try: print('I am sure no exception is going to occur!') except Exception: print('exception') else: # 这里的代码只会在try语句里没有触发异常时运行, # 但是这里的异常将 *不会* 被捕获 print('This would only run if no exception occurs. And an error here ' 'would NOT be caught.') finally: print('This would be printed in every case.')
作者:华王
博客:https://www.cnblogs.com/huahuawang/