python笔记(一)
ascii: 字母,数字,特殊字符: 1个字节,8位。 unicode: 16位 俩个字节 升级32位 四个字节。 utf-8: 最少一个字节,8位表示。 英文字母8位 1个字节。 欧洲16位,2个字节。 中文24位, 3个字节。 gbk: 中文2个字节, 英文字母1个字节。
1 . 格式化输出
%s %d %% %是占位符。 s是字符串 d是数字。 %%转义百分号 栗子: name = input("name:") age = int(input("age:")) sal = input("sal:") info =''' name:%s age: %d sal: %s ''' %(name,age,sal) print(info) #format三种用法: #用法1 s='i love {}, i like {},age is {}'.format('you','me',18) print(s) #用法2 s='i love {0}, i like {0},age is {1}'.format('you',18) print(s) #用法3 s='i love {name}, i like {name},age is {age}'.format(age=18,name='you') print(s)
2 .逻辑运算
or and not or 的规律 如果x为真则返回x,如果x为假,则返回y. and的规律 如果x为真则返回y,如果x为假,则返回x. >>> 0 or 3 = 3 >>> 1 or 2 = 1 >>> 0 and 3 = 0 >>> 1 and 2 = 2 >>> not 5 = False >>> not 0 = True 3 if 控制 score = int(input("输入分数:")) if score > 100: print("我擦,最高分才100...") elif score >= 90: print("A") else: print("太笨了...E") 4 while循环 break 用于完全结束一个循环,跳出循环体执行循环后面的语句 continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环 pass 什么也不做,一半用来占位置,跳过这个内容作为预留内容。 break栗子: count = 0 while count <= 100 : #只要count<=100就不断执行下面的代码 print("loop ", count) if count == 5: break count +=1 #每执行一次,就把count+1,要不然就变成死循环啦,因为count一直是0 continue 栗子: count = 0 while count <= 100 : count += 1 if count > 5 and count < 95: #只要count在6-94之间,就不走下面的print语句,直接进入下一次loop continue print("loop ", count) #计算1-2+3.....-99中除了88意外所有数的总和 i=0 j=-1 sum=0 while i<99: i=i+1 if i==88: continue else: j=-j sum=sum+i*j print(sum) >>>-50
5. 字符串的操作
s='xu chao yang' s1=s.capitalize() #首字母大写 s2=s.upper() #全部大写 s3=s.lower() #全部小写 s4=s.swapcase() #大小写反转 s5=s.title() #每个隔开的单词首字母大写 s6=s.center(20,'*') #居中空白填充 s7=s.expandtabs() #将\t 加上前面的字符个数 八位一隔开 s8=s.__len__() #通用方法查看有多少个元素长度 s9=s.startswith('xu')#前面的字符是否匹配返回True 或 False s10=s.startswith('x',2,4) # 2到5的字符串是否是以x为开头 真或假 s11=s.find('x') #查找内容当中x在第几个位,找不到返回-1 s12=s.index('A') #查找内容当中x在第几个位,找不到报错 s13=s.strip() #去空格 s14=s.count() #统计个数 s15=s.split(',') #结果以,分割输出(str--->list) s16=s.replace('old','now',1次) #替换 s17=s.isalnum() #判断字符串由数字或字母组成True or flse s18=s.isalpha() #判断字符串只由字母组成True or flse s19=s.isdigit() #判断字符串只由数字组成True or flse print(s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15)
6 for 循环 是有限循环
#while循环是无限循环 s='abcdefgs' for i in s: print(i) #循环s变量里的元素 s='abcd安藤efgs' if '安藤' in s: print('有敏感词')
7 数据类型介绍
int 123 用于计算 bool True,False 用户判断 str 存储少量数据,进行操作 list [123,'许','1234',[1,2,3]] 存储大量的数据 元祖 (1,2,3,'第三方',)是只读列表,可以存任何数据。 dict 字典 键值对 {'name':'许','age':16} 存储关系型数据。 集合 {1,2,3,'abc'} 俩个集合的差集,交集。 int : 1=5 print(i.bit_length()) #转换成2进制最小位数。 bool :True False 类型之间的转换,想换成什么样的就用什么类型包起来。 #数字转字符串 int ---str i=1 s =str(i) print(s,type(s)) #字符串转数字 str-----int i='123' s=int(i) print(s,type(s)) #数字转成布尔值 int---bool i=1 s =bool(i) print(s,type(s)) #布尔值转成数字 bool--int #True 1 #False 0 #字符串转布尔值 str---bool s="" ---False 非空字符串都是True s="0" ---True #字符串转列表 str---list split() #列表转字符串 list---str print(''.join(s))
str 类型切片
#字符串的索引和切片 第一位索引值是0 s='ABCDEFGHIGK' #S[首:尾:步长] s1 = s[0] #A s2 = s[0:3] #ABCD 顾头不顾尾+1位 s3 =s[-1] #K s4 =s[:] #取全部ABCDEFGHIGK s5 =s[0:] #取全部ABCDEFGHIGK s6 =s[0:5:2] #跳着取ACE s7 =s[3:0:-1] #反着取 DCB s8 =s[3::-1] #反着取 DCBA s9 =s[3::-2] #反跳着取 DB s10=s[::-1] #反取全部KGIHGFEDCBA print(s10)
list 类型
#切片 s=['xu',[1,2,3],'chao','yang'] s1=s[0] #['xu'] s2=s[1] #[1,2,3] s3=s[0:3] #['xu', [1, 2, 3], 'chao'] #list 类型增删改查 s=['a','b','c','d'] s=['a','b','c','d'] #增 #s.append(1) #增加到最后['a', 'b', 'c', 'd', 1] #s.insert(2,1) #插入到第二位后面['a', 'b', 1, 'c', 'd'] #s.extend('小小') #拆分成单个元素迭代加入到最后 #删 #s.pop(0) #按索引删除删除第一个元素 #s.pop() #按索引删除默认删除最后一个 #s.remove('a') #按元素去删除 #s.clear() #清空 #del s #删除列表 #del s[2:] #切片删除后俩个值 #改 #s[0]='aa' #按索引修改A值 #s[0:2]='小小小' #删除前两个然后拆分插入值['小', '小', '小', 'c', 'd'] #查 #for i in s: # print(i) #循环查询 #print(s[0:2]) #正常查询 #公共方法 l=len(s) #4 统计所有字符的个数 num=s.count('c') #1 统计C共有几个 print(s.index('c')) #2 统计C的索引号 #排序 s=[1,4,3,2,5] #s.sort() #正向排序[1, 2, 3, 4, 5] #s.sort(reverse=True) #倒序排序[5, 4, 3, 2, 1] #s.reverse() #反转[5, 2, 3, 4, 1] #list 的嵌套 s=['xu','chao','yang',[1,2,3],'fo'] #print(s[1][1]) #嵌套去找 h #s[0]=s[0].capitalize() #将xu改为Xu 首字符大写 #s[2]=s[2].replace('ao','ang') #将chao改为chang print(s) #元祖 类型(只读) 儿子不能改,孙子可能可以改。 tu=(1,2,3,'xu',[2,3,4,'ni'],'yang') print(tu[4]) #查询 tu[4][3]=tu[4][3].upper() #修改ni为大写,孙子元素可以修改 tu[4].append('sb') #增加sb到[2, 3, 4, 'NI', 'sb'] #join 字符串操作的方法 可迭代对象都可以操作 s=['x','a','c','d'] print('*'.join(s)) #用*连接后面的迭代对象x*a*c*d print(''.join(s)) #xacd 相当于列表转化为字符串 #range 数字列表[1,2,3,...]#顾头不顾尾 #for i in range(0,100): #0-99 #for i in range(3,10): #3-9 #for i in range(0,10,3): #0,3,6,9 #for i in range(10,0,-1): #10-1 #for i in range(10,0,-2): #10,8,6,4,2 print(i) #单个单个打印出以下所有内容: s=[1,2,3,5,'abc',[2,3,4,5,'cde'],'per'] for i in s: if type(i)==list: for k in i: print(k) else:print(i)
#dict 字典数据类型 映射 键值队类型 key:values
'''据类型划分: 可变数据类型,不可变数据类型。 不可变数据类型: 元祖,bool,int,str 这些类型可哈希 可变数据类型: list,字典,set 这些类型不可哈希 dict key: 必须是不可变数据类型,可哈希。 values: 任意数据类型。 dict优点: 二分查找去查询。 存储大量的关系型数据。 特点: 只针对<=3.5 无序的。 ''' dic={ 'name':['小明,小张,小红'], 'py9':[{'num':71,'avg_age':18}, {'num':71,'avg_age':18} ], True:1, (1,2,3):'无意义', 2:['无意义2'], } print(dic) dic= #增1 #dic['high']=185 #没有这个键值队,新增加 #dic['age']=16 #如果有键,值覆盖。 #增2 #dic.setdefault('weight',100) #增加新内容 #dic.setdefault('name','xuchao') #如果有值,不做任何处理,如果没有,在新加内容。 #删 #dic.pop('age') #如果有值,直接删除'age' #print(dic.pop('age')) #print有返回值.18 #print(dic.pop('age','没有此键')) #如果没值,可以自定义返回值。 #print(dic.popitem()) #随机删除,3.6是按照删除最后一个。 #dic.clear() #清空字典。 #del dic #删除dic字典 #del dic['name'] #删除name,如果没有该值则报错。 #改 #dic['age']=16 #如果有键,值覆盖修改。 #dic1={'age':15,'name':'chaoyang'} #dic.update(dic1) #把dic1的数值覆盖添加到dic里。 #查 print(dic.keys(),type(dic.keys())) #只显示键值内容。 print(dic.values()) #只显示值的内容。 print(dic.items()) #显示成元祖里面是键值。 print(dic) print(dic['name1']) #显示值,没有该键则报错。 print(dic.get('name1','aaa')) #显示值,没有该键可以自定义输出。 for i in dic: #什么不写打印的是键 print(i) for i in dic.keys(): #打印的是键 print(i) for i in dic.values(): #打印值。 print(i) for i in dic.items(): # 打印值。 print(i) #容错性高 a,b=1,2 print(a,b) #1 2 print(a) #1 print(b) #2 #一行代码互换 a=1 b=2 a,b=b,a print(a) #2 print(b) #1 a,b=1,2 #1 2 a,b=[1,2] #1 2 a,b=[1,2],[2,3] #[1,2] [2,3] a,b=(1,2) #1 2 print(a,b) #美观打印 for k,v in dic.items(): print(k,v) >>>age 18 >>>name xu >>>sex male #dict嵌套 dic={ 'name':['xu','chao','yang'], 'py9':{ 'time':'1213', 'learn_money':19800, 'addr':'CBD', }, 'age':21 } #dic['age']=65 #覆盖内容 #dic['name'].append('aa') #在name列表中添加aaa #dic['name'][2]=dic['name'][2].upper() #yang覆盖为大写 #dic['py9']['female']=6 #新增female:6 #dic['py9'].setdefault('female',6) #新增female:6 #作业题 qewwqe1231aaa123afr11 查找出连续的数字共有几组(3) info = input('>>>').strip() for i in info: if i.isalpha(): info = info.replace(i," ") # 1231 123 11 l = info.split() print(len(l))
#模拟购物车功能
flag=True while flag: li =["手机","电脑","鼠标垫","游艇"] for i in li: print('{}\t\t{}'.format(li.index(i)+1,i)) num_of_chioce = input('请输入选择的商品号/输入Q或者q退出:') if num_of_chioce.isdigit(): num_of_chioce=int(num_of_chioce) if num_of_chioce>0 and num_of_chioce<=len(li): print(li[num_of_chioce-1]) else:print('请输入有效数字') elif num_of_chioce.upper() == 'Q':break else:print('请输入数字') #= 赋值 #== 比较值是否相等 #is 比较功能,比较的是内存地址 #id 输出内容 #is s=[1,2,3] s1=s print(s1 is s) >>>True #id s=[1,2,3] s1=s print(id(s),id(s1)) >>>1961604065160 1961604065160 #(小数据池) 目的在一定程度节省空间。 #数字范围-5----256 #字符串:1,不能含有特殊字符, # 2,s*20还是同一个地址,s*21以后都是俩个地址。 # 剩下的list dict tuple set 没有小数据池子 i1=6 i2=6 print(id(i1),id(i2)) #结果一样,因为使用小数据池节省空间。 i1=500 i2=500 print(id(i1),id(i2)) #结果不一样。
#字符集关系
''' py3: str在内存中是用unicode编码。 bytes类型 是中间类型 对于英文: str :表现形式:s ='xu' 编码形式 010101010 unicode bytes:表现形式:s=b'xu' 编码形式 000101010 uft-8 gbk ... 对于中文: str :表现形式:s ='中国' 编码形式 010101010 unicode bytes:表现形式:s=b'x\e91\e91\e01\e21\e31\e32' 编码形式 000101010 uft-8 gbk ... ''' s='alex' s1=b'alex' print(s,type(s)) #alex <class 'str'> print(s1,type(s1)) #b'alex' <class 'bytes'> b='中国' b1=b'中国' print(b,type(b)) print(b1,type(b1)) #报错,需要继续转化。 #str--->bytes转化 s1='xu' s11=s1.encode('utf-8') #encode编码,如何将str-->bytes print(s11) #b'xu' s1='中国' s11=s1.encode('utf-8') #encode编码,如何将str--->bytes 内部是将unlocode--->uft-8 print(s11) #b'\xe4\xb8\xad\xe5\x9b\xbd'
#购物车作业题
#买家 卖家 商品 金钱 li=[ {'name':'苹果','price':10}, {'name': '香蕉', 'price':20}, {'name': '西瓜', 'price':30}, ] shopping_char={} #把货物放在货架上 print('欢迎光临水果店') money=input('让我看看你的钱:') if money.isdigit() and int(money)>0: while 1: for i,k in enumerate(li): print('序号{},商品{},价格{}'.format(i,k['name'],k['price'])) choose =input('请输入您要购买的序号:') if choose.isdigit() and int(choose) <= len(li): num=input('您要购买的商品数量:') if num.isdigit(): if int(money)>li[int(choose)]['price']*int(num): money=int(money)-li[int(choose)]['price']*int(num) if li[int(choose)]['name'] in shopping_char: shopping_char[li[int(choose)]['name']]=shopping_char[li[int(choose)]['name']]+int(num) else: shopping_char[li[int(choose)]['name']]=int(num) print('购物车中的商品有{},您的余额为{}'.format(shopping_char,money)) else: print('穷鬼,拿钱去。') break else: print('都说了是序号,你傻啊')
#集合
#可变的数据类型 它里面的元素必须是不可变的数据类型。 #集合是无序的,是不可重复的。 set1=set({1,2,3}) #{1, 2, 3} set2=set({1,1,2,3}) #{1, 2, 3} set3={1,2,3,[2,3],{'name':'aa'}} #报错因为有可变的数据类型。 print(set2) set1={'aa','bb','cc','dd','ee','ee'} #增 #set1.add('xu') #正常添加。 #set1.update('xu') #拆分元素并无序的添加到里面。 #删 #set1.pop() #随机删除。 #set1.remove('aa') #按元素删除,没有则报错。 set1.clear() #set()空集合表示方法 del set1 #删除整个集合 print(set1) #改 没有改,因为是无序的并且是不可变的数据类型。 #查 for i in set1: #查询 print(set1) set1={'aa','bb','cc','dd','ee','ee'} set2={'aa','bb'} print(set1&set2) #求交集1 print(set1.intersection(set2)) #求交集1 print(set2.union(set1)) #并集 print(set1^set2) #反交集1 print(set1.symmetric_difference(set2)) #反交集2 print(set1-set2) #差集1 set1独有的就是差集 print(set1.difference(set2)) #差集2 print(set2<set1) #子集1 set2小于set1(全包含)说明就是子集 print(set2.issubset(set1)) #子集2 print(set1>set2) #超集1 print(set1.issuperset(set2)) #超集2 #set数据类型 可变的数据类型。 li=[1,2,33,33,2,1,4,5,6,6] set1=set(li) #<class 'set'> #set不可变数据类型设置(将可变数据类型变为不可变的)。 s=frozenset('xu') print(s,type(s)) #<class 'frozenset'> #循环删除字典的某些键值对(直接删除会报错) dic={'k1':'v1','k2':'v2','a3':'v3'} dic1={} for i in dic: if 'k' not in i: dic1.setdefault(i,dic[i]) dic=dic1 print(dic) >>>{'a3': 'v3'} #如果元祖里面只有一个元素,且不加,那此元素该是什么类型就是什么类型。 #元祖 tu1=(1) tu2=(1,) print(tu1,type(tu1)) #1 <class 'int'> print(tu2,type(tu2))#(1,) <class 'tuple'>