复习----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("客官慢走!欢迎下次光临!")
View Code

三级登录

 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("无此项")
View Code

猜你喜欢

转载自www.cnblogs.com/Yan-night/p/11193474.html
今日推荐