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'>
 

 

 
 
 
 
 
 
 
 
 
 

posted @ 2020-10-09 14:28  chaoyangxu  阅读(149)  评论(0编辑  收藏  举报