一、运算符
1、算术运算:
2、比较运算符:
3、复制运算符:
4、逻辑运算:
5、成员运算:
6、三元运算:
1 result = 值1 if 条件 else 值2
二、基本数据类型
1、数字
2、布尔值
3、长整型
4、复数
三、字符串
1 strip,lstrip,rstrip 2 lower,upper 3 startswith,endswith 4 format的三种玩法 5 split,rsplit 6 join 7 replace 8 isdigit 9 10 #strip 11 name='*egon**' 12 print(name.strip('*')) 13 print(name.lstrip('*')) 14 print(name.rstrip('*')) 15 16 #lower,upper 17 name='egon' 18 print(name.lower()) 19 print(name.upper()) 20 21 #startswith,endswith 22 name='alex_SB' 23 print(name.endswith('SB')) 24 print(name.startswith('alex')) 25 26 #format的三种玩法 27 res='{} {} {}'.format('egon',18,'male') 28 res='{1} {0} {1}'.format('egon',18,'male') 29 res='{name} {age} {sex}'.format(sex='male',name='egon',age=18) 30 31 #split 32 name='root:x:0:0::/root:/bin/bash' 33 print(name.split(':')) #默认分隔符为空格 34 name='C:/a/b/c/d.txt' #只想拿到顶级目录 35 print(name.split('/',1)) 36 37 name='a|b|c' 38 print(name.rsplit('|',1)) #从右开始切分 39 40 #join 41 tag=' ' 42 print(tag.join(['egon','say','hello','world'])) #可迭代对象必须都是字符串 43 44 #replace 45 name='alex say :i have one tesla,my name is alex' 46 print(name.replace('alex','SB',1)) 47 48 #isdigit:可以判断bytes和unicode类型,是最常用的用于于判断字符是否为"数字"的方法 49 age=input('>>: ') 50 print(age.isdigit())
1 find,rfind,index,rindex,count 2 center,ljust,rjust,zfill 3 expandtabs 4 captalize,swapcase,title 5 is数字系列 6 is其他 7 8 #find,rfind,index,rindex,count 9 name='egon say hello' 10 print(name.find('o',1,3)) #顾头不顾尾,找不到则返回-1不会报错,找到了则显示索引 11 # print(name.index('e',2,4)) #同上,但是找不到会报错 12 print(name.count('e',1,3)) #顾头不顾尾,如果不指定范围则查找所有 13 14 #center,ljust,rjust,zfill 15 name='egon' 16 print(name.center(30,'-')) 17 print(name.ljust(30,'*')) 18 print(name.rjust(30,'*')) 19 print(name.zfill(50)) #用0填充 20 21 #expandtabs 22 name='egon hello' 23 print(name) 24 print(name.expandtabs(1)) 25 26 #captalize,swapcase,title 27 print(name.capitalize()) #首字母大写 28 print(name.swapcase()) #大小写翻转 29 msg='egon say hi' 30 print(msg.title()) #每个单词的首字母大写 31 32 #is数字系列 33 #在python3中 34 num1=b'4' #bytes 35 num2=u'4' #unicode,python3中无需加u就是unicode 36 num3='四' #中文数字 37 num4='Ⅳ' #罗马数字 38 39 #isdigt:bytes,unicode 40 print(num1.isdigit()) #True 41 print(num2.isdigit()) #True 42 print(num3.isdigit()) #False 43 print(num4.isdigit()) #False 44 45 #isdecimal:uncicode 46 #bytes类型无isdecimal方法 47 print(num2.isdecimal()) #True 48 print(num3.isdecimal()) #False 49 print(num4.isdecimal()) #False 50 51 #isnumberic:unicode,中文数字,罗马数字 52 #bytes类型无isnumberic方法 53 print(num2.isnumeric()) #True 54 print(num3.isnumeric()) #True 55 print(num4.isnumeric()) #True 56 57 #三者不能判断浮点数 58 num5='4.3' 59 print(num5.isdigit()) 60 print(num5.isdecimal()) 61 print(num5.isnumeric()) 62 ''' 63 总结: 64 最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景 65 如果要判断中文数字或罗马数字,则需要用到isnumeric 66 ''' 67 68 #is其他 69 print('===>') 70 name='egon123' 71 print(name.isalnum()) #字符串由字母或数字组成 72 print(name.isalpha()) #字符串只由字母组成 73 74 print(name.isidentifier()) 75 print(name.islower()) 76 print(name.isupper()) 77 print(name.isspace()) 78 print(name.istitle())
1 # 写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分) 2 name = " aleX" 3 # 1) 移除 name 变量对应的值两边的空格,并输出处理结果 4 # 2) 判断 name 变量对应的值是否以 "al" 开头,并输出结果 5 # 3) 判断 name 变量对应的值是否以 "X" 结尾,并输出结果 6 # 4) 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果 7 # 5) 将 name 变量对应的值根据 “l” 分割,并输出结果。 8 # 6) 将 name 变量对应的值变大写,并输出结果 9 # 7) 将 name 变量对应的值变小写,并输出结果 10 # 8) 请输出 name 变量对应的值的第 2 个字符? 11 # 9) 请输出 name 变量对应的值的前 3 个字符? 12 # 10) 请输出 name 变量对应的值的后 2 个字符? 13 # 11) 请输出 name 变量对应的值中 “e” 所在索引位置? 14 # 12) 获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。 15 16 # 写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分) 17 name = " aleX" 18 # 1) 移除 name 变量对应的值两边的空格,并输出处理结果 19 name = ' aleX' 20 a=name.strip() 21 print(a) 22 23 # 2) 判断 name 变量对应的值是否以 "al" 开头,并输出结果 24 name=' aleX' 25 if name.startswith(name): 26 print(name) 27 else: 28 print('no') 29 30 # 3) 判断 name 变量对应的值是否以 "X" 结尾,并输出结果 31 name=' aleX' 32 if name.endswith(name): 33 print(name) 34 else: 35 print('no') 36 37 # 4) 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果 38 name=' aleX' 39 print(name.replace('l','p')) 40 41 # 5) 将 name 变量对应的值根据 “l” 分割,并输出结果。 42 name=' aleX' 43 print(name.split('l')) 44 45 # 6) 将 name 变量对应的值变大写,并输出结果 46 name=' aleX' 47 print(name.upper()) 48 49 # 7) 将 name 变量对应的值变小写,并输出结果 50 name=' aleX' 51 print(name.lower()) 52 53 # 8) 请输出 name 变量对应的值的第 2 个字符? 54 name=' aleX' 55 print(name[1]) 56 57 # 9) 请输出 name 变量对应的值的前 3 个字符? 58 name=' aleX' 59 print(name[:3]) 60 61 # 10) 请输出 name 变量对应的值的后 2 个字符? 62 name=' aleX' 63 print(name[-2:]) 64 65 # 11) 请输出 name 变量对应的值中 “e” 所在索引位置? 66 name=' aleX' 67 print(name.index('e')) 68 69 # 12) 获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。 70 name=' aleX' 71 a=name[:-1] 72 print(a)
四、列表
序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
1 list1 = ['李易峰','张艺兴','潘粤明','王思聪','古巨基'] 2 3 # 正向步长 4 print(list1[0:3:1]) # list1 = ['李易峰','张艺兴','潘粤明'] 5 # 反向步长 6 print(list1[2::-1]) # list1 = ['潘粤明','张艺兴','李易峰'] 7 # 列表翻转 8 print(list[::-1]) # list1 = list1 = ['古巨基','王思聪','潘粤明','张艺兴','李易峰']
五、元祖
Python的元组与列表类似,不同之处在于元组的元素不能修改。
1 #作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读 2 3 #定义:与列表类型比,只不过[]换成() 4 tuple1=('李易峰','张艺兴','潘粤明','王思聪','古巨基') 5 #优先掌握的操作: 6 #1、按索引取值(正向取+反向取):只能取 7 # print(tuple1[0:5:1]) # 正向取值结果:('李易峰', '张艺兴', '潘粤明', '王思聪', '古巨基') 8 print(tuple1[5::-1]) # 反向取值结果:('古巨基', '王思聪', '潘粤明', '张艺兴', '李易峰') 9 #2、长度 10 print(len(tuple1)) # 5 11 #3、成员运算in和not in 12 result1 = '李易峰' in tuple1 13 print(result1) # True 14 result = '李易峰' not in tuple1 15 print(result) # False 16 #4、循环 17 for i in tuple1: 18 print(i)
# 练习简单购物车,要求如下:
# 实现打印商品详细信息,用户输入商品名和购买个数,则将商品名,价格,购买个数加入购物列表,如果输入为空或其他非法输入则要求用户重新输入
1 print('欢饮光临,本店供应如下商品,请选购!') 2 msg_dic={'apple':10,'tesla':100000,'mac':3000,'lenovo':30000,'chicken':10,} 3 goods_list = [] 4 while True: 5 6 for key,item in msg_dic.items(): 7 8 print('goods_name:{name} goods_price:{price}'.format(name=key,price=item)) 9 choice = input('请输入商品:').strip() 10 if not choice or choice not in msg_dic: 11 print('商品名输入错误,请重试!') 12 continue 13 count = input('请输入个数:').strip() 14 if not count.isdigit():continue 15 goods_list.append((choice,msg_dic[choice],count)) 16 print(goods_list) 17 print('购买成功,欢迎下次光临!') 18 break
六、字典
作用:存多个值,key/value存取,取值速度快!
1 # 常用语法 2 info={'name':'李易峰','age':31,'gender':'male'} 3 info1=dict(name='李易峰',age=31,gender='male') 4 info2=dict([['name','李易峰'],('age',31),('gender','male')])
1 # 1 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中 2 # 即: {'k1': 大于66的所有值, 'k2': 小于66的所有值} 3 a={'k1':[],'k2':[]} 4 c=[11,22,33,44,55,66,77,88,99,90] 5 for i in c: 6 if i>66: 7 a['k1'].append(i) 8 else: 9 a['k2'].append(i) 10 print(a) 11 # 2、统计s='hello alex alex say hello sb sb'中每个单词的个数 12 s='hello alex alex say hello sb sb' 13 list1=s.split() 14 dic={} 15 for item in list1: 16 if item in dic: 17 dic[item]+=1 18 else: 19 dic[item]=1 20 print(dic) 21 # 3、其它做法(setdefault用法) 22 s='hello alex alex say hello sb sb' 23 dic={} 24 words=s.split() 25 print(words) 26 for word in words: #word='alex' 27 dic[word]=s.count(word) 28 print(dic) 29 30 #利用setdefault解决重复赋值 31 ''' 32 setdefault的功能 33 1:key存在,则不赋值,key不存在则设置默认值 34 2:key存在,返回的是key对应的已有的值,key不存在,返回的则是要设置的默认值 35 d={} 36 print(d.setdefault('a',1)) #1 37 d={'a':2222} 38 print(d.setdefault('a',1)) #2222 39 ''' 40 s='hello alex alex say hello sb sb' 41 dic={} 42 words=s.split() 43 for word in words: #word='alex' 44 dic.setdefault(word,s.count(word)) 45 print(dic) 46 47 #利用集合,去掉重复,减少循环次数 48 s='hello alex alex say hello sb sb' 49 dic={} 50 words=s.split() 51 words_set=set(words) 52 for word in words_set: 53 dic[word]=s.count(word) 54 print(dic)
七、集合
作用:去重,关系运算
定义集合:集合可以包含多个元素,用都好分割。
集合元素遵循的三个原则:
a.每个元素必须是不可变类型(可hash,可作为字典的key)
b.没有重复的元素
c.无序
注意:集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无序纠结于集合中单个字
1 # 一.关系运算 2 # 有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合 3 pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'} 4 linuxs={'wupeiqi','oldboy','gangdan'} 5 # 1. 求出即报名python又报名linux课程的学员名字集合 6 print(pythons & linuxs) # {'wupeiqi', 'gangdan'} 7 # 2. 求出所有报名的学生名字集合 8 print(pythons | linuxs) # {'yuanhao', 'gangdan', 'alex', 'oldboy', 'biubiu', 'egon', 'wupeiqi'} 9 # 3. 求出只报名python课程的学员名字 10 print(pythons - linuxs) # {'yuanhao', 'egon', 'alex', 'biubiu'} 11 # 4. 求出没有同时这两门课程的学员名字集合 12 print(pythons ^ linuxs) # {'yuanhao', 'alex', 'oldboy', 'biubiu', 'egon'} 13 14 # 二.去重 15 # 16 # 1. 有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序 17 list=['a','b',1,'a','a'] 18 print(set(list)) 19 # 2.在上题的基础上,保存列表原来的顺序 20 #方法一:不用集合 21 list=[1,'a','b',1,'a'] 22 l1=[] 23 for i in list: 24 if i not in l1: 25 l1.append(i) 26 print(l1) 27 #方法二:借助集合 28 l1=[] 29 s=set() 30 for i in list: 31 if i not in s: 32 s.add(i) 33 l1.append(i) 34 print(l1) 35 # 3.去除文件中重复的行,肯定要保持文件内容的顺序不变 36 import os 37 with open('db.txt','r',encoding='utf-8') as read_f, 38 open('.db.txt.swap','w',encoding='utf-8') as write_f: 39 s=set() 40 for line in read_f: 41 if line not in s: 42 s.add(line) 43 write_f.write(line) 44 os.remove('db.txt') 45 os.rename('.db.txt.swap','db.txt') 46 47 # 4.有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序 48 list=[ 49 {'name':'egon','age':18,'sex':'male'}, 50 {'name':'alex','age':73,'sex':'male'}, 51 {'name':'egon','age':20,'sex':'female'}, 52 {'name':'egon','age':18,'sex':'male'}, 53 {'name':'egon','age':18,'sex':'male'} 54 ] 55 s=set() 56 l1=[] 57 for item in list: 58 val=(item['name'],item['age'],item['sex']) 59 if val not in s: 60 s.add(val) 61 l1.append(item) 62 print(l1)
八、数据类型总结
按存储空间的占用分(升序)
1 数字 2 字符串 3 集合:无序(即无序存索引相关信息) 4 元祖:有序(需要存索引相关信息,不可变) 5 列表:有序(需要存索引相关信息,可变,需要处理数据的增删改) 6 字典:无序(需要存keyvalue映射的相关信息,可变,需要处理数据的增删改)
九、运算符
1 #身份运算(is ,is not) 2 # is比较的是id,而双等号比较的是值,id若相同则值肯定相同,而值相同id则不一定相同 3 x=123456789 4 y=123456789 5 # id(x),id(y) 6 print(x == y) 7 print(id(x)is id(y))
~