复习----python基础2
本节内容
1.字符串操作
2.列表&元组操作
3.字典操作
4.集合操作
5.文件操作
1.字符串操作
特性:不可修改
1.1拼接方法:
1)直接 “+” 如:a+b
2)格式化
3)c = ' ? '.join([a,b]) => a?b
推荐用第3方法
1.2内置方法:
1 st = 'hello world' 2 3 4 st.count('llo') #统计'llo'出现的次数 5 st.find('l') #查找'l'的索引,只返回第一个出现的元素,找不到返回-1 6 st.index('l') #查找元素索引,无该元素会报错 7 8 st.capitalize() #首字母大写 9 st.lower() #大写变小写 10 st.upper() #小写变大写 11 st.swapcase() #大小写反转 12 13 st.center(50,'-') #字符串左右各补充50个'-' 14 st.ljust(50,'-') #左补充 15 st.rjust(50,'-') #右补充 16 17 st.endswith('l') #判断是否以'l'结尾 18 st.startswith('') #判断是否以''开头 19 st.isalnum() #判断是否有字母或数字或汉字 20 st.isdigit() #判断是否为数字 21 st.isupper() #判断是否全部大写 22 st.islower() #判断是否全部小写 23 st.isidentifier() #检测一段字符串可否被当作标志符,即是否符合变量命名规则 24 25 'hello\tbaby'.expandtabs(10) #'hello baby'将 \t 转换成空格 26 st.strip() #去掉收尾空格与换行符 27 st.replace('h','a') #将h替换成a 28 st.split() #以空格分割存入列表 29 30 #格式化输出的另一种形式 fomat、format_map: 31 msg = 'my name is {} , and age is {}' 32 msg.format('ruioly',22) 33 #my name is ruioly , and age is 22 34 35 msg = 'my name is {1} , and age is {0}' 36 msg.format('ruioly',22) 37 #my name is 22 , and age is ruioly 38 39 msg = 'my name is {name} , and age is {age}' 40 msg.format(age=22,name='ruioly') 41 msg.format_map({'name':'ruioly','age':22}) 42 #my name is ruioly , and age is 22
2.列表&元组操作
定义列表
1 lis = ['Today','is','Tuesday'] 2 lis = list(['Today','is','Tuesday'])
取值,切片
1 lis = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'] 2 3 #下标访问列表中的元素,下标从0开始计数 4 lis[0] #'Monday' 5 lis[2] #'Wednesday' 6 lis[-1] #'Sunday' 7 lis[-3] #'Friday' 8 9 lis[1:4] #取下标1至下标4之间的数字,包括1,不包括4 10 lis[1:-1] #取下标1至-1的值,不包括-1 11 lis[:3] #如果是从头开始取,0可以忽略 12 lis[3:] #如果想取最后一个,不能写-1,只能这么写 13 14 lis[0::2] #后面的2是代表,每隔一个元素,就取一个
追加
1 lis.append('没有周八啦') 2 print(lis) 3 #['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', '没有周八啦']
插入
1 lis.insert(2,'原本2的周三被我挤后去啦') 2 print(lis) 3 #['Monday', 'Tuesday', '原本2的周三被我挤后去啦', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] 4 lis.insert(4,'周三变成3,我来包夹它啦') 5 print(lis) 6 #['Monday', 'Tuesday', '原本2的周三被我挤后去啦', 'Wednesday', '周三变成3,我来包夹它啦', 'Thursday', 'Friday', 'Saturday', 'Sunday']
修改
1 lis[2] = '我来拯救周三了!' 2 print(lis) 3 #['Monday', 'Tuesday', '我来拯救周三了!', 'Wednesday', '周三变成3,我来包夹它啦', 'Thursday', 'Friday', 'Saturday', 'Sunday'] 4 lis[2:5] = ['救不救的','看我的','连锅端'] 5 print(lis) 6 #['Monday', 'Tuesday', '救不救的', '看我的', '连锅端', 'Thursday', 'Friday', 'Saturday', 'Sunday']
删除
1 del lis[2:5] #根据下标删除 2 print(lis)#['Monday', 'Tuesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] 3 4 lis.remove('Sunday') #删除指定元素 5 print(lis)#['Monday', 'Tuesday', 'Thursday', 'Friday', 'Saturday'] 6 7 b=lis.pop() #默认删除列表最后一个值,返回所删 8 print(b)#Saturday 9 10 lis.clear() #清空列表 11 print(lis)#[] 12 13 del lis #删除列表 14 print(lis)#NameError: name 'lis' is not defined
扩展
1 lis = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'] 2 b=['周一','周二','周三','周四','周五'] 3 4 lis.extend(b) #在lis列表尾部添加b列表,b列表不变 5 print(lis) 6 #['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', '周一', '周二', '周三', '周四', '周五']
统计
1 lis = ['AAA','BBB','CCC','AAA','A','AA','B'] 2 lis.count('AAA') #统计'AAA'出现的次数 3 # 2
排序&翻转
1 lis = ['AAA','BBB','CCC','AAA','A','AA','B'] 2 3 lis.sort() #不同数据类型不能放一起排序 4 #['A', 'AA', 'AAA', 'AAA', 'B', 'BBB', 'CCC'] 5 6 lis.reverse() #反转 7 #['CCC', 'BBB', 'B', 'AAA', 'AAA', 'AA', 'A']
获取下标
1 lis = ['AAA','BBB','CCC','AAA','A','AA','B'] 2 3 lis.index('AAA') #获取该元素下标,只返回第一个元素,无则报错 4 # 0
拷贝
拷贝分深浅拷贝
1 import copy 2 a=[[1,2],3,4] 3 b=a # => b=a.copy() 浅复制 4 #b:[[1, 2], 3, 4] 5 6 #b指向a的整体地址,共享一块内存空间。b浅复制a的第一层地址。 7 8 a[0][1]=5 #只可修改第一层,二层以下共享 9 #a:[[1, 5], 3, 4] 10 #b:[[1, 5], 3, 4] 11 12 b[0][1]=6 13 #a:[[1, 6], 3, 4] 14 #b:[[1, 6], 3, 4] 15 16 b=copy.deepcopy(a) #引用copy模块,进行深拷贝 17 # b:[[1, 2], 3, 4] 18 19 a[0][1] = 666 #可随意修改而不牵连其他 20 # a:[[1, 666], 3, 4] 21 # b:[[1, 2], 3, 4]
遍历列表
1 lis = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'] 2 3 for i in lis: 4 print(lis.index(i),i) 5 6 for index,i in enumerate(lis): 7 print(index,i) 8 9 #输出 10 # 0 Monday 11 # 1 Tuesday 12 # 2 Wednesday 13 # 3 Thursday 14 # 4 Friday 15 # 5 Saturday 16 # 6 Sunday
元组
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
语法
1 names = ("AAA","BBB","CCC")
单一元素时后面加逗号 如:a=(1,) 视为一个元素
它只有2个方法,一个是count,一个是index,完毕。
3.字典操作
语法:
1 dic = { 2 'name':'ruioly', 3 'age':'22', 4 'hobby':'sleep' 5 }
特点:无序储存,键唯一
键不可变,值可变;键相同则后者覆盖前者。
增加
1 dic['sex']='man' 2 # {'name': 'ruioly', 'age': '22', 'hobby': 'sleep', 'sex': 'man'} 3 4 dic.setdefault('work','none') #若'work'存在,不改动且返回对应的值 5 # {'name': 'ruioly', 'age': '22', 'hobby': 'sleep', 'sex': 'man', 'work': 'none'}
修改
1 dic = { 2 'name':'ruioly', 3 'age':'22', 4 'hobby':'sleep' 5 } 6 dic2 = {'work':'none'} 7 8 dic['age']='18' #直接修改 9 # {'name': 'ruioly', 'age': '18', 'hobby': 'sleep'} 10 11 dic.update(dic2) #dic中加入dic2,同键位dic2会覆盖dic,dic不变 12 # {'name': 'ruioly', 'age': '18', 'hobby': 'sleep', 'work': 'none'}
删除
1 dic = { 2 'name':'ruioly', 3 'age':'22', 4 'hobby':'sleep' 5 } 6 7 del dic['hobby'] 8 # {'name': 'ruioly', 'age': '22'} 9 dic.clear() #清空字典 10 dic.pop() #默认随机删除,可添元素 11 dic.popitem() #随机删除
查找
1 dic = { 2 'name':'ruioly', 3 'age':'22', 4 'hobby':'sleep' 5 } 6 7 'ruioly' in dic 8 # False 9 'name' in dic #标准用法 10 # True 11 12 dic.get('name') #获取,若key不存在,只返回None 13 dic['name'] #若key不存在,会报错 14 # ruioly 15 16 dic.keys() #所有的键 17 # dict_keys(['name', 'age', 'hobby']) 18 dic.values() #所有的值 19 # dict_values(['ruioly', '22', 'sleep']) 20 dic.items() #所有的键与值 21 # dict_items([('name', 'ruioly'), ('age', '22'), ('hobby', 'sleep')]) 22 #输出时是个类,可前加list转换类型
遍历
1 dic = { 2 'name':'ruioly', 3 'age':'22', 4 'hobby':'sleep' 5 } 6 7 for i in dic: #显示键 8 print(i) 9 #输出 10 #name 11 # age 12 # hobby 13 14 for i in dic: #显示键与值 (推荐) 15 print(i,dic[i]) 16 #输出 17 # name ruioly 18 # age 22 19 # hobby sleep 20 21 for i,v in dic.items(): 22 print(i,v) 23 #输出 24 # name ruioly 25 # age 22 26 # hobby sleep
4.集合操作
集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,自动去重
- 关系测试,测试两组数据之前的交集、并集、差集等关系
方法:
1 s = set([3,5,7,9]) #创建一个数值集合 2 t = set('Hello') #创建一个唯一字符的集合 3 4 #可添加,不可切片,可遍历或判断 5 t.add('world') 6 # {'l', 'e', 'o', 'world', 'H'} 7 8 s.update([10,11,12]) 9 # {3, 5, 7, 9, 10, 11, 12} 10 s.update('000') # =>{'0'} 11 s.update('abc') # =>{'a','b','c'} 12 s.update([12,'abc','000']) # =>{12,'abc','000'} 13 14 s.pop() #随机删除 15 s.clear() #清空 16 s.remove() #指定元素删除 17 18 len(s) 19 set的长度 20 21 x in s 22 测试x是否是s的成员 23 24 x not in s 25 测试x是否不是s的成员 26 27 s.issubset(t) 28 s <= t 29 测试是否s中的每一个元素都在t中 30 31 s.issuperset(t) 32 s >= t 33 测试是否t中的每一个元素都在s中 34 35 s.union(t) 36 s | t 37 返回一个新的set包含s和t中的每一个元素 38 39 s.intersection(t) 40 s & t 41 返回一个新的set包含s和t中的公共元素 42 43 s.difference(t) 44 s - t 45 返回一个新的set包含s中有但是t中没有的元素 46 47 s.symmetric_difference(t) 48 s ^ t 49 返回一个新的set包含s和t中不重复的元素 50 51 s.copy() 52 返回set “s”的一个浅复制
5.文件操作
操作流程:
1、打开文件,得到文件句柄并赋值给一个变量
2、通过句柄对文件进行操作
3、关闭文件
基本操作:
1 f = open('噜啦啦','r',encoding='utf8') #打开文件 2 first_line = f.readline() 3 print(first_line) #读一行 4 print('我是分割线'.center(50,'-')) 5 6 data = f.read() #读取剩下所有内容,文件大时不要用 7 print(data) 8 9 f.close() #关闭文件
打开文件的模式有:
- r,只读模式(默认)。
- w,只写模式。【不可读;不存在则创建;存在则删除内容;】
- a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
- r+,可读写文件。【可读;可写;可追加】
- w+,写读
- a+,同a
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
- rU
- r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
- rb
- wb
- ab
with语句:
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
1 with open('log', 'r') as f: 2 f.readline() 3 f.read()
也可同时管理多个文件对象
1 with open('log1','r') as f_read, open('log2','w') as f_write: 2 for line in f_read: 3 f_write.write(line)
其他:
1 f = open('小重山2','r',encoding='utf8') #打开文件 2 print(f.readlines()) #一行一行存入列表 3 #['昨夜寒蛩不住鸣。\n', '惊回千里梦,已三更。\n', ......] 4 5 print(f.tell())# 取出光标位置 6 print(f.read(2)) 7 print(f.tell()) 8 #输出 9 # 0 10 # 昨夜 11 # 6 12 13 f.seek(0)# 移动光标到指定的位置 14 15 # flush():同步吧将数据从缓存转移到磁盘上去 16 #进度条实例 17 import sys,time 18 for i in range(30): 19 sys.stdout.write("*") 20 sys.stdout.flush() 21 time.sleep(0.1) 22 23 #print的flush 24 import sys,time 25 for i in range(30): 26 27 print('*',end='',flush=True) 28 29 time.sleep(0.1) 30 31 32 33 f.close()
1 a=str({'beijing':{'1':111}}) #存入文本 2 print(type(a)) #<class 'str'> 3 print(a)# '{'beijing':{'1':111}}' 4 5 a=eval(a) #提取文本 6 print(type(a)) #<class 'dict'> 7 print(a['beijing'])
作业
购物车
#_author: "Ruioly" #data: 2019/1/24 #登录账户后,该账户所拥有的余额 salary = 4000 tings = [('MI8',3600),('IphoneX',4888),('computer',5300),('camera',5500),('television',6000)] bought_tings = [] sum_bought_price = [] user_input = '' pay = '' print(sum_bought_price) print('---------- 购物清单 ----------') for index,i in enumerate(tings,1): print(index,i) print('------- 请输入欲购物品序号,退出则扣-1 -------') while user_input != -1 : user_input = input(">>>:") if user_input.isdigit() : user_input = int(user_input) if user_input == 0 : if len(bought_tings) != False : print("购物车物品有:",bought_tings[:]) pay = int(input("结账请按 1 ,查看余额按 2 ,退出按 0 :")) if pay == 1 : print('总价格为:',sum(sum_bought_price)) if salary < sum(sum_bought_price) : print('您的余额不足,还需%d元,无法购买!'% (sum(sum_bought_price)-salary) ) else: salary = salary - sum(sum_bought_price) print('购买成功!您的余额为:',salary) bought_tings.clear() sum_bought_price.clear() elif pay == 2 : print("您的余额为:",salary) else : print("亲!您还未加入物品哦!") elif user_input > len(tings) : print('无此物品,请重新输入') elif 0 < user_input <= len(tings) : bought_tings.append(tings[user_input-1][0]) sum_bought_price.append(tings[user_input-1][1]) print('%s已加入购物车!输入0可查看物品。'%tings[user_input-1][0]) else: print('无法识别,请输入对应序号') else: print("客官慢走!欢迎下次光临!")
三级登录
1 #_author: "Ruioly" 2 #data: 2019/1/28 3 4 menu = {} #假装有字典内容 5 6 current_layer = menu #实现动态循环 7 #parent_layer = menu #字典父层,只能回退一层 8 parent_layers = [] #保存所有父级,最后一个元素永远都是上层 9 10 while True : 11 for key in current_layer: 12 print(key) 13 choice =input(">>>:").strip() 14 if len(choice) == 0 :continue 15 if choice in current_layer: 16 #parent_layer = current_layer #改之前相当于父亲 17 parent_layers.append(current_layer) #在进入下一层前,把当前层存入列表中 18 current_layer = current_layer[choice] #改成了子层 19 elif choice == 'b': 20 #current_layer = parent_layer 21 if parent_layers : # []!null 22 current_layer = parent_layers.pop() #删除并取出父层 23 24 else: 25 print("无此项")