x =True
y =Falseprint(x,type(x))print(y,type(y))print('========================')print(x +10)# True 表示1,故True+10=1+10=11print(y +10)# False 表示0,False+10=0+10=11print('========================')print(bool(18))#trueprint(bool(0),bool(0.0))#总结非0的整数的布尔值都是Trueprint(bool('北京欢迎你'))print(bool(''))#总结非空字符串的布尔值都是True
数据类型之间的转换
x =10
y =3
z = x / y # 在执行除法运算的时候,将运算的结果赋值给zprint(z,type(z))# 隐式转换,通过运算隐式转换了结果的类型# float类型转换成int类型,只保留整数部分print('float类型转成int类型:',int(3.14))print('float类型转成int类型:',int(3.9))print('float类型转成int类型:',int(-3.14))print('float类型转成int类型:',int(-3.9))# int类型转换成float类型print('int类型转成float类型:',float(10))# str类型转换成int类型print('str类型转成int类型:',int('100'))# print('str类型转成int类型:',int(''))==>将字符串转成int/float类型时会报错# chr()ord()一对print(ord('刘'))print(chr(21016))# 进制之间的转换print('十进制转十六进制:',hex(21016))print('十进制转八进制:',oct(21016))print('十进制转二进制:',bin(21016))
# =:赋值;+=:加赋值;-=:减赋值;*=:乘赋值;/=:除赋值;//=:整除赋值;%=:取余赋值;**=:幂运算赋值
x =20
y =10print('x=20','y=10')
x = x + y # 将x+y的和赋值给x,x此时的值为30print(x)
x += y
print('x+=y', x)
x -= y
print('x-=y', x)
x *= y
print('x*=y', x)
x /= y
print('x/=y', x)
x //= y
print('x//=y', x)
x %= y
print('x%=y', x)
x **= y
print('x**=y', x)# 算术运算符的优先级由高到低: 第一级:** > 第二级:*,/,%,// > 第三级:+,-
# 正向递增
s ='helloworld'for i inrange(0,len(s)):print(i, s[i], end='\t\t')print('----------------------------------')# 逆向递增
s ='helloworld'for i inrange(-10,0):print(i, s[i], end='\t\t')
字符串的切片
#切片语法: 序列[start:end:step] start:开始索引且包含,end:结束索引,但不包含,step:步长,默认为1
s ='helloworld'#切片操作
s1=s[0:5:2]#索引从0开始,到5结束(不包含5),步长为2print(s1)#省略了开始位置,start默认为从0开始
s2=s[:5:2]print(s2)#省略了结束位置,start默认为从0开始,end默认为最后一个元素,且包含
s3=s[0::2]print(s3)print(s[5::1])print(s[5::])print(s[5:])#省略结束位置和步长,默认步长为1#省略开始和结束位置,只写步长print(s[::2])#步长为-1,print(s[::-1])print(s[-1:-11:-1])print(s[::-2])
s ='HelloWorld'print('e在HelloWorld中存在吗?:',('e'in s))print('e在HelloWorld中不存在吗?:',('e'notin s))#内置函数print('e在HelloWorld中出现的次数:', s.count('l'))print('len():',len(s))print('max():',max(s))print('min():',min(s))print('e在HelloWorld中的索引:', s.index('e'))# print('e在HelloWorld中存在的次数:', s.index('v')) #ValueError: substring not found,不存在则报错
列表
列表的创建
#第一种创建列表的方式:列表名=[element1,element2,element3,element4,...elementN]
lst =['hello','world','Python']print(lst)#第二种创建列表的方式:列表名=list(序列)
lst2 =list('HelloWorld')print(lst2)
lst3=list(range(1,10,2))#从1开始,到10结束,步长为2,不包含10print(lst3)print(lst+lst2+lst3)print(lst*3)print(len(lst))print(max(lst3))print(min(lst3))print(lst2.count('o'))print(lst2.index('o'))#list的删除操作
lst4=[10,20,30]print(lst4)del lst4
# print(lst4)#name 'lst4' is not defined. Did you mean: 'lst'?
列表的遍历
lst =['Hello','World','Python','Java']print('---使用for循环---')# 使用for循环for item in lst:print(item, end='\t')print()print('---使用for循环range()函数,len()函数,根据索引遍历---')#使用for循环range()函数,len()函数,根据索引遍历for i inrange(0,len(lst)):print(i,lst[i], end='\t')print()print('---使用enumearate---')for index,item inenumerate(lst):print(index, item, end='\t')#index:为序号,不是索引,不过其默认从0开始print()print('---使用enumearate,指定开始序号---')for index,item inenumerate(lst,start=1):#index:为序号,不是索引,不过其默认从0开始,可以动态设置print(index, item, end='\t')
# lst=[expression for item in range]# lst=[expression for item in range if condition]import random
lst =[item for item inrange(1,11)]print(lst)
lst =[item * item for item inrange(1,11)]print(lst)
lst =[random.randint(1,100)for item inrange(10)]print(lst)
lst =[item for item inrange(10)if item%2==0]print(lst)
二维列表
# 创建二维列表
lst =[['城市','环比','同比'],['北京',102,103],['上海',104,105],['深圳',204,205]]print(lst)# 遍历二维列表,使用双层for循环for row in lst:# 行for item in row:# 列print(item, end='\t')print()# 列表生成式生成一个4行5列的二维列表
lst2 =[[j for j inrange(5)]for i inrange(4)]print(lst2)for row in lst2:# 行for item in row:# 列print(item, end='\t')print()
元组
元组的创建和删除
# 使用小括号()创建元组
t =('Hello',[10,20,30],'Python','World')print(t)# 使用tuple()创建元组
t =tuple('HelloWorld')print(t)
t =tuple([10,20,30,40])print(t)# 元组的基本使用print('10在元组中是否存在:',(10in t))print('10在元组中是否不存在:',(10notin t))print('最大值:',max(t))print('最小值:',min(t))print('长度len:',len(t))print('t.index:', t.index(20))print('t.conut:', t.count(10))# 如果元组中只有一个数据===>如果元组中只有一个数据,则逗号不能省略
t =(10)print(t,type(t))# 10 <class 'int'>
t =(10,)print(t,type(t))# (10,) <class 'tuple'># 元组的删除del t
# print(t)#NameError: name 't' is not defined
元组元素的访问和遍历
t =('Pythone','Hello','World')print(t)#根据索引访问元组print(t[0])#元组支持切片操作
t2=t[0:3:2]print(t2)#元组的遍历print('元组的遍历-for循环')for item in t:print(item)print('元组的遍历-for+range+len')for index inrange(len(t)):print('索引:',index,'元素:',t[index])print('元组的遍历-for+enumerate')for index,item inenumerate(t,start=1):#index:为序号,不是索引,不过其默认从0开始,可以动态设置print('序号:',index,'元素:',item)
元组的生成式
#元组生成式
t =(item for item inrange(1,11))print(t)#<generator object <genexpr> at 0x000001EBFC7397D0> 生成器对象# t=tuple(t)# print(t)# #遍历# for item in t:# print(item)print(t.__next__())print(t.__next__())print(t.__next__())
t=tuple(t)print(t)
d ={'Hello':10,'World':20,'Python':30}# 访问字典中的元素# 1.使用d[key]print(d['Hello'])# print(d['Helloo'])#KeyError: 'Helloo'# 2.使用d.get()print(d.get('Hello'))print(d.get('Helloo','test'))# d[]和d.get(0)的区别,如果key不存在,d[]报错,d.get()不报错且可以指定默认值# 字典的遍历for item in d.items():print(item)for key, value in d.items():print(key,'--->', value)
import random
d ={item: random.randint(1,100)for item inrange(4)}print('字典:', d)print('keys', d.keys())print('values', d.values())# 创建两个列表
lst_key =[1,2,3,4,5]
lst_value =[101,102,103,104,105]
d={key:value for key,value inzip(lst_key,lst_value)}print('字典:', d)print('keys', d.keys())print('values', d.values())
集合的操作
集合的创建和删除
# 1.使用{}直接创建 s={element1,element2,element3,...elementN}
s ={10,20,30,40}print('使用{}直接创建集合', s)# s={[1,2],[3,4]}#TypeError: unhashable type: 'list'===>集合只能存储不可变数据类型# 2.使用内置函数set()创建 s=set(可迭代对象)
s =set()# 创建了一个空集合:set()print(s)
s ={}# 创建了一个空集合:{}print(s)
s =set('hello')print(s)
s2 =set([10,20,30])print(s2)
s3 =set(range(1,10))print(s3)print('max',max(s3))print('min',min(s3))print('len',len(s3))print('9在集合中存在嘛?',9in s3)print('2在集合中不存在嘛?',9in s3)print('删除操作前',bool(s3))del s3
# print('删除操作后',bool(s3))#NameError: name 's3' is not defined
集合的操作符
A ={10,20,30,40,50}
B ={30,50,88,76,20}print('A集合:', A)print('B集合:', B)# 交集操作print('A&B的交集:', A & B)# {50, 20, 30}# 并集操作print('A|B的并集:', A | B)# {40, 10, 76, 50, 20, 88, 30}# 差集操作print('A-B的差集:', A - B)# {40, 10}# 补集操作print('A^B的补集:', A ^ B)# {10, 88, 40, 76}
集合的相关操作
# s.add(x):如果不在集合s中,则将x添加到集合s中# s.remove(x):如果在集合s中,将其删除,如果不在集合s中,程序报错# s.clear():清除集合中的所有元素
A ={10,20,30,40,50}print('A集合:', A)
A.add(10)print('A集合添加10后:', A)
A.add(60)print('A集合添加60后:', A)
A.remove(60)print('A集合删除60后:', A)'''
A.remove(60)
Traceback (most recent call last):
File "D:\PycharmProjects\PYDemoProject\pythonProject\chap5\示例5-21集合的相关操作.py", line 12, in <module>
A.remove(60)
KeyError: 60
'''# 集合的遍历操作for item in A:print('集合for循环遍历元素:', item)for index, item inenumerate(A):print('集合for循环遍历元素:', index, item)
A.clear()print('A集合clear后:', A)# 集合的生成式
B ={item for item inrange(1,10)}print('集合的生成式', B)
B ={item for item inrange(1,10)if item %2==0}print('集合的生成式', B)# 总结:'''
数据类型 序列类型 元素是否可重复 是否有序 定义符号
列表List 可变序列 可重复 有序 []
元组tuple 不可变序列 可重复 有序 ()
字典dict 可变序列 key不可重复,value可重复 无序 {key:value}
集合set 可变序列 可重复 无序 {}
'''
新特性
结构的模式匹配
data =eval(input('请输入要匹配的数据:'))
match data:
case {'name':'ll','age':30}:print('字典:', data)
case [10,20,30]:print('列表:', data)
case (10,20,30):print('元组:', data)
case _:print('相当于多重if中的else:', data)
fruits ={'apple','orange','pear','grape'}
counts =[10,2,3,4]print(fruits)print(counts)for f, c inzip(fruits, counts):
match f, c:
case 'apple',10:print('10个apple')
case 'orange',2:print('2个orange')
case 'pear',3:print('3个pear')
case 'grape',4:print('4个grape')'''
输出结果:
2个orange
3个pear
原因:因为fruits为集合,集合是无序的,所以同步迭代后,无法匹配一一对应到所有数据
'''
import re # 引入
pattern ='\d\.\d+'# +限定符,\d 8-9数字出现1次或多次
s ='I study Python 3.11 every day'# 待匹配字符串
match = re.match(pattern, s)print(match,type(match))# None
s2 ='3.11 I study Python every day'
match2 = re.match(pattern, s2)print(match2,type(match2))# <re.Match object; span=(0, 4), match='3.11'> <class 're.Match'>print('匹配值的起始位置:', match2.start())print('匹配值的结束位置:', match2.end())print('匹配区间的位置元素:', match2.span())print('待匹配的字符串:', match2.string)print('匹配的数据:', match2.group())
- findall函数的使用
import re # 引入
pattern ='\d\.\d+'# +限定符,\d 8-9数字出现1次或多次
s ='I study Python 3.11 every day Python2.7 I love you'# 待匹配字符串
s2 ='4.10 Python I Study every day'# 待匹配字符串
s3 ='Python I Study every day'# 待匹配字符串
lst = re.findall(pattern, s)
lst2 = re.findall(pattern, s2)
lst3 = re.findall(pattern, s3)print(lst)# ['3.11', '2.7']print(lst2)# ['4.10']print(lst3)# []
- search函数的使用
import re # 引入
pattern ='\d\.\d+'# +限定符,\d 8-9数字出现1次或多次
s ='I study Python 3.11 every day Python2.7 I love you'# 待匹配字符串
match = re.search(pattern, s)print(match)# <re.Match object; span=(15, 19), match='3.11'>print('匹配值的起始位置:', match.start())print('匹配值的结束位置:', match.end())print('匹配区间的位置元素:', match.span())print('待匹配的字符串:', match.string)print('匹配的数据:', match.group())
s2 ='4.10 Python I Study every day'# 待匹配字符串
match2 = re.search(pattern, s2)print(match2)# <re.Match object; span=(0, 4), match='4.10'>print('匹配值的起始位置:', match2.start())print('匹配值的结束位置:', match2.end())print('匹配区间的位置元素:', match2.span())print('待匹配的字符串:', match2.string)print('匹配的数据:', match2.group())
s3 ='Python I Study every day'# 待匹配字符串
match3 = re.search(pattern, s3)print(match3)# None