Python基础语法

保留字

import keyword
print(keyword.kwlist)#查询保留字
print(len(keyword.kwlist))# 获取保留字的个数

true='真'
# True='真'#True是Python中的保留字

变量

luck_number=8#创建一个整型变量luck_number,并为其赋值为8
my_name='LL'#字符串类型的变量
print('luck_number的数据类型是',type(luck_number))
print(my_name,'的幸运数是',luck_number)
#Python动态修改i变量的数据类型,通过赋不同类型的值就可以直接修改
luck_number='北京欢迎你'
print('luck_number的数据类型是',type(luck_number))
#Python中允许多个变量执行同一个值
no=numbler=14
print(no,numbler)
print(id(no))#id()查看对象的内存地址的值
print(id(numbler))

常量

pi=3.141592653#变量
PI=3.141592653#常量

整数

num=85#默认十进制,表示整数
num2=0B1010101#使用二进制表示整数
num3=0o125#使用八进制表示整数
num4=0x55#使用八进制表示整数
print(num)
print(num2)
print(num3)
print(num4)

浮点数

height=180.1
print(height)
print(type(height))
a=10
b=10.0
print('a的数据类型:',type(a))
print('b的数据类型:',type(b))

#科学计数法
x=1.99E1413
print('科学计数法:',x,'x的数据类型:',type(x))
#不确定的尾数问题
print(0.1+0.2)#0.30000000000000004
print(round(0.1+0.2,1))#0.3

复数类型

x=123+456j
print('实数部分:',x.real)
print('虚数部分',x.imag)

字符串类型

  • 单行/多行字符串
#单行字符串
city ='天津'
address="天津市宝坻区香江大姐3号"
print(city)
print(address)
#多行字符串
info='''地址:天津市宝坻区香江大姐3号
收件人:xx
手机号:111111111
'''
print(info)
print('=======================')
info2="""地址:天津市宝坻区香江大姐3号
收件人:xx
手机号:111111111
"""
print(info2)
  • 转义字符的使用
print('北京')
print('欢迎您')
print('-----------')
#\n 换行符,可以连续换行
print('北京\n欢迎你')
print('北\n京\n欢\n迎\n你')
#\t 水平制表位,用于横向跳到下一个制表位
print('===============')
print('北京欢迎你')
print('北\t京欢迎你')
print('北京\t欢迎你')
print('北京欢\t迎你')
print('北京欢迎\t你')
print('===============')
print('HelloPython')
print('Hello\tPython')#hello是5个字符,一个制表位是8个字符,故\t表示8-5=3个空格
print('Hell\toPython')
print('===============')
#转义字符
print('老师说:\"好好学习,天天向上\"')
print('老师说:\'好好学习,天天向上\'')
print('===============')
#原字符
print(r'老师说:"好好学习,天天向上"')
print(r'老师说:\"好好学习,天天向上\"')
print(R'老师说:\'好好学习,天天向上\'')
  • 字符串的索引和切片
s='HELLOWORLD'
print(s[0],s[-10])#序号0和序号-10表示的是同一个字符,即负数索引为倒叙索引
print('北京欢迎你'[4])#获取字符串索引为4字符
print('北京欢迎你'[-1])#获取字符串索引为4字符
print('-----------------')
print(s[2:7])#从2开始到7结束,不包含7,正向递增
print(s[-8:-3])#反向递增
print(s[:5])#默认从0开始
print(s[5:])#默认是切到字符串的最后位置
  • 字符串的操作
x='2022年'
y='北京冬奥会'
print(x+y)
print(x*10)
print(10*x)

print('北京' in y)
print('上海' in y)

布尔类型

x = True
y = False
print(x, type(x))
print(y, type(y))
print('========================')
print(x + 10)  # True 表示1,故True+10=1+10=11
print(y + 10)  # False 表示0,False+10=0+10=11
print('========================')
print(bool(18))#true
print(bool(0),bool(0.0))
#总结非0的整数的布尔值都是True
print(bool('北京欢迎你'))
print(bool(''))
#总结非空字符串的布尔值都是True

数据类型之间的转换

x = 10
y = 3
z = x / y  # 在执行除法运算的时候,将运算的结果赋值给z
print(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))

eval函数的使用

s='3.14+3'
print(s,type(s))
x=eval(s)#使用eval函数去掉s字符串左右的引号,执行加法运算
print(x,type(x))
#eval函数经常和input函数一起使用,用来获取用户输入的数值
age=eval(input('请输入你的年龄:'))
print(age,type(age))

height=eval(input('请输入你的身高:'))
print(height,type(height))

hello = '北京欢迎你'
print(hello)#北京欢迎你
print(eval('hello'))#北京欢迎你  (    print(eval('hello')) ==>print(hello)  )

运算符的使用

  • 算术运算符
# +:加法;-:减法;*:乘法;/:除法;//:整除;%:取余;**幂运算
print('1+1=', 1 + 1)
print('2-1=', 2 - 1)
print('2*3=', 2 * 3)
print('10/2=', 10 / 2)
print('10/3=', 10 / 3)
print('10//3=', 10 // 3)
print('10%3=', 10 % 3)
print('3**2=', 3 ** 2)
#算术运算符的优先级由高到低: 第一级:**  >  第二级:*,/,%,//  >  第三级:+,-
  • 赋值运算符
# =:赋值;+=:加赋值;-=:减赋值;*=:乘赋值;/=:除赋值;//=:整除赋值;%=:取余赋值;**=:幂运算赋值
x = 20
y = 10
print('x=20', 'y=10')
x = x + y  # 将x+y的和赋值给x,x此时的值为30
print(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)
# 算术运算符的优先级由高到低: 第一级:**  >  第二级:*,/,%,//  >  第三级:+,-
  • 比较运算符
# >:大于;<:小于;==:等于;!=:不等于;>=:大于或等于;<=:小于或等于
print('98大于90嘛?98>90:',98>90)
print('98小于90嘛?98<90:',)
print('98等于90嘛?98==90:',98==90)
print('98不等于90嘛?98!=90:',98!=90)
print('98大于等于90嘛?98>=90:',98>=90)
print('98小于等于90嘛?98<=90:',98<=90)
print('98小于等于98嘛?98<=98:',98<=98)
print('98小于等于98嘛?98<=98:',98<=98)
  • 逻辑运算符
# and:逻辑与;or:逻辑或;not:逻辑非   (and:都ture则为true,or:至少一个为true则为true,not:取反
print(True and True)
print(True and False)

print(False or True)
print(False or False)
print(not True)
print(not False)
  • 位运算符
# 位与$:先转成2进制,相同位置均为1,则该位取1,否则取0
# 位或|:先转成2进制,相同位置均为0的,则该位取0,否则取1
print(bin(12))
print(bin(8))
print('===================')
print('按位与运算',12&8)
print('按位或运算',12|8)
# 位异或^:先转成2进制,位相同的则该位为0,否则则取1
# 位取反~:先转成2进制,位置上的为1,则取0,为0则取1
print('按位异或运算',12^8)
print('按位取反运算',~12)
print('===================')
# <<:左移位,是将一个二进制数向左移动制动的位数,左边(高位端)移除的位被丢弃,右边(低位端)的空位用0补充
# >>:右移位,是将一个二进制数向左移动制动的位数,右边(低位端)移除的位被丢弃,左边(高位端)的空位如果最高位为1,则空位填1,否则则填0
print('左移位:',8<<2)
print(bin(32))
print('右移位:',8>>2)
print(bin(2))

'''
运算符的优先级
1.**:幂运算
2.~,+,-:取反,正号,负号
3.*,/,%,//:算术运算符
4.+,-:算术运算符
5.<<,>>:位运算符中的左移位和右移位
6.&:位运算符中的按位与
7.^:位运算符中的异或
8.|:位运算符中的按位或
9.<,<=,>,>=,!=,==:比较运算符
10.=:赋值运算符
'''

语句

  • 顺序结构
#赋值运算符的顺序:从右到左
name='张三'
age=20
a=b=c=d=100
a,b,c,d='room'
print(a)
print(b)
print(c)
print(d)
print('------输入/输出语句也是典型的顺序结构------')
name=input('输入姓名:')
age=eval(input('输入年龄:'))
luck_number=eval(input('输入幸运数字:'))
print('姓名:',name)
print('年龄:',age)
print('幸运数字:',age)
  • 单分支结构
number=eval(input('输入6位中奖号码:'))
#使用if语句
if number==987654:
    print('恭喜中奖了')

if number!=987654:
    print('您未中奖')

print('------以上if判断的表达式,是通过比较运算符计算出来的,结果时布尔值类型------')
n = 98  # 赋值操作
if n % 2:  # 98%2的余数时0,0的布尔值是False,非0的布尔值为True
    print('n', '是奇数')  # 由于98%2的余数是0,所以该行代码不会执行

if not n % 2:  # 98%2的余数时0,0的布尔值是False,not False的结果为True
    print('n', '是偶数')

print('------判断一个字符串是否是空字符串------')
x=input('输入字符串:')
if x:#在Pyhton中一切皆对象,每个对象都有一个布尔值,而非空字符串的布尔值为True,空字符串的布尔值为False
    print('x是一个非空字符串')
if not x:#在Pyhton中一切皆对象,每个对象都有一个布尔值,而非空字符串的布尔值为True,空字符串的布尔值为False
    print('x是一个空字符串')
print('------表达式也可以是一个单纯的布尔类型变量------')
flag = eval(input('输入布尔类型的值Ture或False:'))
if flag:
    print('flag的值为True')

if not flag:
    print('flag的值为False')
print('------使用if语句时,如果语句块中只有一句代码,可以将语句块直接卸载冒号后面------')
a=10
b=5
if a>b:max=a
print('a和b的最大值是:',max)
  • 双分支结构
number=eval(input('输入6位中奖号码:'))
#使用if语句
if number==987654:
    print('恭喜中奖了')
else:
    print('您未中奖')
print('------以上代码可以使用条件表达式进行简化------')
result='恭喜中奖了' if  number==987654 else '您未中奖'
print(result)
print('恭喜中奖了' if  number==987654 else '您未中奖')
  • 多分支结构
score=eval(input('输入成绩:'))
#多分支结构
if score <0 or score>100:
    print('成绩错误')
elif 0<score<60:
    print('E')
elif 60<=score<70:
    print('D')
elif 70<=score<80:
    print('C')
elif 80<=score<90:
    print('B')
else:
    print('A')
  • 嵌套结构
answer=input('是否喝酒了?')
if answer=='y':
    proof=eval(input('酒精含量:'))
    if proof <20:
        print('不构成酒驾')
    elif proof<60:
        print('构成酒驾')
    else:
        print('构成酒驾,禁止开车')
else:
    print('没有酒驾')
  • and 和or的使用
# and的使用
user_name = input('输入姓名:')
pwd = input('输入密码:')
if user_name == 'll' and pwd == '123':
    print('登录成功')
else:
    print('登录失败,账号或密码错误')
# or的使用
score = eval(input('输入成绩:'))
if score<0 or score>100:
    print('成绩无效')
else:
    print('成绩:',score)

  • 模式匹配
score = input('输入成绩:')
match score:
case "A":
    print('优秀')
case "B":
    print('良好')
case "C":
    print('合格')
  • for循环
#遍历字符串
for i in 'hello':
    print(i)

#range()函数,Python中的内置函数,产生一个[n.m)的整数序列,包含n,但不包含m
for i in range(1,11):
    if i%2==0:
        print(i,'是偶数')
    else:
        print(i,'是奇数')
# 计算1~10之间的累加和
s=0;
for i in range(1,11):
    s+=i
print('1~10的累加和:',s)
print('------100-999之间的水仙花数------')
'''
153=1*1*1+5*5*5+3*3*3
'''
for i in range(100,1000):
    sd = i%10#获取各位上的数
    tens=i//10%10#获取十位上的数
    h=i//100
    if sd**3+tens**3+h**3==i:
        print(i)
# for循环的拓展语句
s=0;
for i in range(1,11):
    s+=i
else:
    print('1~10的累加和:',s)
  • 无限循环
#(1):初始化变量
answer= input('今天是否上课? y/n:')
while answer=='y':#(2)条件判断
    print('好好学习,天天向上')#(3)语句块
    # (4)改变变量
    answer=input('今天是否上课? y/n:')

#1-100之间的累加和
s=0#存储累加和
i=1#(1):初始化变量
while i<=100:#(2)条件判断
    s+=i#(3)语句块
    # (4)改变变量
    i+=1
print(s)

#while循环的拓展语句
#1-100之间的累加和
s=0#存储累加和
i=1#(1):初始化变量
while i<=100:#(2)条件判断
    s+=i#(3)语句块
    # (4)改变变量
    i+=1
    # if i==50:
    #     break
else:
    print(s)
  • 跳转语句
    • break在while循环中的使用
s=0;#存储累加和
i=1#初始化变量
while i<11:#判断条件
    #语句块
    s+=i
    #修改变量
    if s>20:
        print('累加和大于20的当前数是:',i)
        break
    #修改变量
    i+=1;
#三次登录失败结束/登录成功结束
i=1#记录操作的次数
user_name = input('输入姓名:')
psw = input('输入密码:')
while i<4:
    if user_name=='ll' and psw =='123':
        print('登录成功')
        break
    else:
        if i==3:
            print('账号密码错误,请找回密码或重新注册')
            break
        else:
            print('账号密码错误,你还有', 3 - i, '次机会')
            user_name = input('输入姓名:')
            psw = input('输入密码:')
            i+=1
- break在for循环中的使用
for i in 'hello':
    if i=='e':
        print('当前的字符为:',i,'结束循环')
        break
    else:
        print(i)
print('-------------------------')
for i in range(1,4):
    user_name = input('输入姓名:')
    psw = input('输入密码:')
    if user_name=='ll' and psw =='123':
        print('登录成功')
        break
    else:
        if i==3:
            print('账号密码错误,请找回密码或重新注册')
            break
        else:
            print('账号密码错误,你还有', 3 - i, '次机会')
            i+=1
- continue在for循环中的使用
s=0
i=1
for i in range(1,101):
    if i%2==1:
        i+=1
        continue
    s+=i
    i+=1
print('1~100的累加和:',s)
- continue在while循环中的使用
s=0
i=1
while i<=100:
    if i%2==1:
        i+=1
        continue
    s+=i
    i+=1
print('1~100的累加和:',s)
  • 空语句
if True:
    pass
while True:
    pass
for i in range(10):
    pass

字符串的操作

  • 字符串的检索
# 正向递增
s = 'helloworld'
for i in range(0, len(s)):
    print(i, s[i], end='\t\t')
print('----------------------------------')
# 逆向递增
s = 'helloworld'
for i in range(-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),步长为2
print(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='Hello'
s2='World'
print(s+s2)#产生一个新的字符串序列
print(s*2)#产生一个新的字符串序列
print(s2*5)#产生一个新的字符串序列
  • 字符串常用函数
s = 'HelloWorld'
print('e在HelloWorld中存在吗?:', ('e' in s))
print('e在HelloWorld中不存在吗?:', ('e' not in 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,不包含10
print(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 in range(0,len(lst)):
    print(i,lst[i], end='\t')
print()
print('---使用enumearate---')
for index,item in enumerate(lst):
    print(index, item, end='\t')#index:为序号,不是索引,不过其默认从0开始
print()
print('---使用enumearate,指定开始序号---')
for index,item in enumerate(lst,start=1):#index:为序号,不是索引,不过其默认从0开始,可以动态设置
    print(index, item, end='\t')
  • 列表的操作
lst = ['Hello', 'World', 'Python', 'Java']
print('原列表:', lst)
# append添加元素
lst.append('Web')
print('append添加元素后的列表:', lst)
# 使用insert(index,x),在指定index位置上插入元素x
lst.insert(0, 'IT')
print('insert插入元素后的列表:', lst)
# remove列表元素的删除操作
lst.remove('IT')
print('remove删除元素后的列表:', lst)
# pop列表元素的取出并删除操作
pop_item = lst.pop(1)
print('pop删除元素后的列表:', lst, '去除的元素:', pop_item)
# clear列表清除
lst.clear()
print('clear列表清除后的列表:', lst)
lst.append('Hello')
lst.append('World')
lst.append('Python')
lst.append('Java')
print('列表重新填充数据:', lst)
# reverse列表的反向
lst.reverse()
print('列表reverse反向后的数据:', lst)
# 列表的copy
lst2 = lst.copy()
print('列表copy后的新列表数据:', lst2)
  • 列表的排序
    • sorted函数排序
lst = [43, 4, 53, 5, 1, 78, 67]
print('排序前数据:', lst)
lst.sort()
print('升序后数据:', lst)
lst.sort(reverse=True)
print('降序后数据:', lst)
print('-' * 40)
lst2 = ['banana', 'apple', 'Cat', 'Orange']
print('排序前数据:', lst2)
lst2.sort()
print('升序后数据:', lst2)
lst2.sort(reverse=True)
print('降序后数据:', lst2)
lst2.sort(key=str.lower)
print('排序规则不区分大小写升序排序后数据:', lst2)
lst2.sort(key=str.lower,reverse=True)
print('排序规则不区分大小写降序排序后数据:', lst2)
print('-' * 40)
- sorted函数排序
lst = [43, 4, 53, 5, 1, 78, 67]
print('排序前数据:', lst)
new_lst=sorted(lst)
print('升序后新列表数据:', new_lst,'原列表:',lst)
new_lst=sorted(lst,reverse=True)
print('降序后新列表数据:', new_lst,'原列表:',lst)
print('-' * 80)
lst2 = ['banana', 'apple', 'Cat', 'Orange']
print('排序前数据:', lst2)
new_lst=sorted(lst2)
print('升序后数据:', new_lst,'原列表:',lst2)
new_lst=sorted(lst2,reverse=True)
print('降序后数据:', new_lst,'原列表:',lst2)
new_lst=sorted(lst2,key=str.lower)
print('排序规则不区分大小写升序排序后数据:', new_lst,'原列表:',lst2)
new_lst=sorted(lst2,key=str.lower,reverse=True)
print('排序规则不区分大小写降序排序后数据:', new_lst,'原列表:',lst2)
print('-' * 80)
  • 列表生成式
# lst=[expression for item in range]
# lst=[expression for item in range if condition]
import random

lst = [item for item in range(1, 11)]
print(lst)

lst = [item * item for item in range(1, 11)]
print(lst)

lst = [random.randint(1, 100) for item in range(10)]
print(lst)


lst = [item for item in range(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 in range(5)] for i in range(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在元组中是否存在:', (10 in t))
print('10在元组中是否不存在:', (10 not in 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 in range(len(t)):
    print('索引:',index,'元素:',t[index])

print('元组的遍历-for+enumerate')
for index,item in enumerate(t,start=1):#index:为序号,不是索引,不过其默认从0开始,可以动态设置
    print('序号:',index,'元素:',item)
  • 元组的生成式
#元组生成式
t = (item for item in range(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={key1:value1,key2:value2,key3:value3...keyN:valueN}
# d=dict(key1=value1,key2=value2,key3=value3...keyN=valueN)
# (1)创建字典
d = {10: 'cat', 20: 'dog', 30: 'pig', 20: 'zoo'}
print(d)  # key相同是,value进行覆盖
# (2)使用zip创建字典
lst1 = [10, 20, 30]
lst2 = ['cat', 'dog', 'pig']
zipObj = zip(lst1, lst2)
print(zipObj)  # <zip object at 0x0000027D9F2001C0>
d2 = dict(zipObj)
print(d2)
# (3)使用参数创建字典
d3 = dict(cat=10, monkey=20)  # 左侧是键,右边是值
print(d3)

t = (10, 20, 30)
print({t: 10})

# t=[10,20,30]
# print({t:10})#TypeError: unhashable type: 'list' ===>列表不可以作为键

#字典属于序列
print('max',max(d))
print('min',min(d))
print('len',len(d))
  • 字典元素的访问和遍历
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)
  • 字典的相关操作
d = {1001: '李梅', 1002: '李华', 1003: '张锋'}
print('初始化数据', d)
print('------------------------添加元素------------------------')
# 向字典中添加元素
d[1004] = '王五'
print('添加元素后', d)
# 获取字典中所有的key
print('----------------------获取字典中所有的key--------------------------')
keys = d.keys()
print('获取字典中所有的key', keys, type(keys))
print('获取字典中所有的key list', list(keys))
print('获取字典中所有的key tuple', tuple(keys))

print('----------------------获取字典中所有的value--------------------------')
values = d.values()
print('获取字典中所有的value', values, type(values))
print('获取字典中所有的value list', list(values))
print('获取字典中所有的value tuple', tuple(values))

print('----------------------将字典中的数据转成key-value的形式,以元组的方式进行展现--------------------------')
lst = list(d.items())
print(lst)
d = dict(lst)
print(d)
print('------------------------删除元素------------------------')
print(d.pop(1001))
print(d.pop(1008,'不存在'))
print(d)
print('------------------------删除随机元素------------------------')
print(d.popitem())
print(d)
print('------------------------清空字典中的元素------------------------')
print(bool(d))
d.clear()
print(d)
print(bool(d))#空字典的bool值为false
  • 字典的生成式
import random

d = {item: random.randint(1, 100) for item in range(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 in zip(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在集合中存在嘛?', 9 in s3)
print('2在集合中不存在嘛?', 9 in 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 in enumerate(A):
    print('集合for循环遍历元素:', index, item)

A.clear()
print('A集合clear后:', A)

# 集合的生成式
B = {item for item in range(1, 10)}
print('集合的生成式', B)

B = {item for item in range(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)
  • 合并字典运算符
d1 = {'a': 10, 'b': 20}
d2 = {'c': 30, 'd': 40, 'e': 50}
merged_dict = d1 | d2
print(merged_dict)
  • 同步迭代
fruits = {'apple', 'orange', 'pear', 'grape'}
counts = [10, 2, 3, 4]
print(fruits)
print(counts)
for f, c in zip(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为集合,集合是无序的,所以同步迭代后,无法匹配一一对应到所有数据
'''

字符串操作

  • 字符串的基本操作
'''
    方法名                    描述说明

str.lower()                 将字符串全部转成小写字母,结果为一个新的字符串
str.upper()                 将字符串全部转成大写字母,结果为一个新的字符串
str.split(sep=None)         把str字符串按照指定分隔符sep进行分隔,结果为列表类型
str.count(sub)              结果为sub这个字符串在str中出现的次数
str.find(sub)               查询sub这个字符串在str是否存在,如果不存在结果为-1,如果存在,结果为sub首次出现的索引
str.index(sub)              功能与find()相同,区别在于要查询的字符串sub不存在时,程序报错
str.startwith(s)            查询字符串str是否以字符串s开头
str.endwith(s)              查询字符串str是否以字符串s结尾
str.replace(old,news)       使用news替换子串串str中所有的old字符串,结果是一个新的字符串
str.center(width,fillchar)  字符串str在指定宽度范围内剧中,可以使用fillchar进行填充
str.join(iter)              在iter中的每个元素的后面都添加一个新的字符串str
str.strip(chars)            从字符串中去掉左侧和右侧chars中列出的字符串
str.lstrip(chars)            从字符串中去掉左侧chars中列出的字符串
str.rstrip(chars)            从字符串中去掉右侧chars中列出的字符串

'''

s1 = 'HelloWorld'
print('原始字符串:', s1)
lower_s1 = s1.lower()
print('转成小写字符串:', lower_s1)
upper_s1 = s1.upper()
print('转成大写字符串:', upper_s1)

e_mail = "sss.@163.com"
lst = e_mail.split('@')
print('str.split(sep=None):', lst)
print('邮箱名:', lst[0], '邮箱服务器域名:', lst[1])

print('o在HelloWorld中出现的次数:',s1.count('o'))
print('o在HelloWorld中出现的位置:',s1.find('o'))
print('p在HelloWorld中出现的位置:',s1.find('p'))
# print('p在HelloWorld中出现的位置:',s1.index('p'))#alueError: substring not found

print('He是不是HelloWorld的前缀:',s1.startswith('He'))
print('World是不是HelloWorld的后缀:',s1.endswith('World'))
print('world是不是HelloWorld的后缀:',s1.endswith('world'))

s1 = 'HelloWorld'
print('原始字符串:', s1)
s2 = s1.replace('o', '你好')
s3 = s1.replace('o', '你好', 1)
print('s1.replace():', s2)
print('s1.replace()只替换一次:', s3)
print('s1.center():', s1.center(20))
print('s1.center():', s1.center(20, '*'))

str = '    HelloWorld    '
print('str', str)
print('str.strip', str.strip())
print('str.lstrip', str.lstrip())
print('str.rstrip', str.rstrip())
str = 'HelloWorld'
print('str.strip(\'ld\')', str.strip('ld'))#HelloWor
print('str.lstrip(\'ld\')', str.lstrip('ld'))#HelloWorldl
print('str.rstrip(\'dl\')', str.rstrip('dl'))  # HelloWor==>与顺序无关,
print(str.join('好呀好'))
  • 字符串的格式化
# 占位符
'''
%s:字符串格式
%d:十进制整数格式
%f:浮点数格式
'''
print('格式化字符串---占位符')
name = '马冬梅'
age = 18
score = 98.5
print('姓名:%s,年龄:%d,成绩:%f' % (name, age, score))  # 姓名:马冬梅,年龄:18,成绩:98.500000
print('姓名:%s,年龄:%d,成绩:%.2f' % (name, age, score), end='\n\n')  # 姓名:马冬梅,年龄:18,成绩:98.500000
# f-string
'''
Python3.6引入的格式化字符串的方式,比{}表明被替换的字符
'''
print('格式化字符串---f-string')
print(f'姓名:{name},年龄:{age},成绩:{score}', end='\n\n')  # 姓名:马冬梅,年龄:18,成绩:98.500000
# str.format
'''
模板字符串.format(逗号分隔的参数)
'''
print('模板字符串.format---占位符')
print('姓名:{0},年龄:{1},成绩:{2}'.format(name, age, score))
print('姓名:{1},年龄:{0},成绩:{2}'.format(age, name, score))
  • 字符串format格式化控制
# """
# 格式化字符串的详细格式
# :         :引导符号
# 填充       :用于填充单个字符
# 对齐方式    :<左对齐,>右对齐,^集中对其
# 宽度          :字符串的输出宽度
# ,           :数字的千位分隔符
# .精度         浮点数小数部分的精度或字符串的最大输出长度
# 类型          :整数进制类型b\d\o\x\X;浮点数类型e\E\f\%
# """
s = 'HelloWorld'
print('{0:*<20}'.format(s))  # 字符串的显示宽度为20,左对齐,空白部分使用*号填充
print('{0:*>20}'.format(s))  # 字符串的显示宽度为20,右对齐,空白部分使用*号填充
print('{0:*^20}'.format(s))  # 字符串的显示宽度为20,居中对齐,空白部分使用*号填充
#居中对齐
print(s.center(20, '*'))  # 字符串的显示宽度为20,居中对齐,空白部分使用*号填充

#千位分隔符
print('{0:,}'.format(900000000))
print('{0:,}'.format(900000000.000000001))
#浮点数小数部分精度
print('{0:.2f}'.format(3.141592653))
#字符串类型,表示最大显示长度
print('{0:.2}'.format(s))#He 最大显示长度为2,故打印He
#整数类型
num=425
print('二进制:{0:b},八进制:{0:o},十进制:{0:d},十六进制:{0:x},十六进制:{0:X}'.format(num))

#浮点数类型
num=3.141592653
print('{0:.2f},{0:.2e},{0:.2E},{0:.2%}'.format(num))
  • 字符串的编码和解码
'''
字符串的编码:将str转换成bytes类型,需要使用到字符串的encode()方法 str.encode(encoding='utf-8', errors='strict/ignore/replace')
字符串的解码:将bytes转换成str类型,需要使用到bytes的decode()方法 bytes.decode(encoding='utf-8', errors='strict/ignore/replace')
'''
str = '北京欢迎您'
scode = str.encode()  # 默认是utf-8,中午占3个字符,英文占1个字符
print(scode)
print(scode.decode())

bytes = str.encode(errors='strict/ignore/replace')
print(bytes)
print(bytes.decode(errors='strict/ignore/replace'))

bytes = str.encode(encoding='gbk', errors='strict/ignore/replace')  # gbk中英文均占2个字符
print(bytes)
print(bytes.decode(encoding='gbk', errors='strict/ignore/replace'))

s2 = '耶✌'
# scode=s2.encode(encoding='gbk',errors='strict')#'gbk' codec can't encode character '\u270c' in position 1: illegal multibyte sequence
# print(scode)
scode = s2.encode(encoding='gbk', errors='ignore')
print(scode)
scode = s2.encode(encoding='gbk', errors='replace')
print(scode)

bytes = s2.encode(encoding='gbk', errors='ignore')
print(bytes.decode(encoding='gbk', errors='strict'))
print(bytes.decode(encoding='gbk', errors='ignore'))
print(bytes.decode(encoding='gbk', errors='replace'))

print(bytes.decode(encoding='utf-8', errors='strict'))
print(bytes.decode(encoding='utf-8', errors='ignore'))
print(bytes.decode(encoding='utf-8', errors='replace'))
  • 字符串的数据验证
'''
数据的验证
str.isdigit():所有的字符都是数字(阿拉伯数字)
str.isnumeric():所有的字符都是数字
str.isalpha():所有的字符都是字母(包含中文字符)
str.isalnum():所有的字符都是数字或字母(包含中文字符)
str.islower():所有的字符都是小写
str.isupper():所有的字符都是大写
str.istitle():所有的字符都是首字母大写
str.isspace():所有的字符都是空白字符(\n,\t等)
'''
print('str.isdigit():所有的字符都是数字(阿拉伯数字)')
print('123', '123'.isdigit())  # True
print('0b1010', '0b1010'.isdigit())  # False
print('一二三', '一二三'.isdigit())  # False
print('壹贰叁', '壹贰叁'.isdigit())  # False
print('Ⅲ', 'Ⅲ'.isdigit(), end='\n\n')  # False
print('str.isnumeric():所有的字符都是数字')
print('123', '123'.isnumeric())  # True
print('0b1010', '0b1010'.isnumeric())  # False
print('一二三', '一二三'.isnumeric())  # True
print('壹贰叁', '壹贰叁'.isnumeric())  # True
print('Ⅲ', 'Ⅲ'.isnumeric(), end='\n\n')  # True
print('str.isalpha():所有的字符都是字母(包含中文字符)')
print('Hello123', 'Hello123'.isalpha())  # False
print('Hello0b1010', 'Hello0b1010'.isalpha())  # False
print('Hello一二三', 'Hello一二三'.isalpha())  # True
print('Hello壹贰叁', 'Hello壹贰叁'.isalpha())  # True
print('HelloⅢ', 'HelloⅢ'.isalpha(), end='\n\n')  # False
print('str.isalnum():所有的字符都是数字或字母(包含中文字符)')
print('Hello123', 'Hello123'.isalnum())  # True
print('Hello0b1010', 'Hello0b1010'.isalnum())  # True
print('Hello一二三', 'Hello一二三'.isalnum())  # True
print('Hello壹贰叁', 'Hello壹贰叁'.isalnum())  # True
print('HelloⅢ', 'HelloⅢ'.isalnum(), end='\n\n')  # True
print('str.islower():所有的字符都是小写')
print('Hello', 'Hello'.islower())  # False
print('hello', 'hello'.islower())  # True
print('hello123', 'hello123'.islower())  # True
print('Hello一二三', 'Hello一二三'.islower())  # False
print('hello壹贰叁', 'hello壹贰叁'.islower())  # True
print('壹贰叁', '壹贰叁'.islower())  # False
print('HelloⅢ', 'HelloⅢ'.islower())  # False
print('helloⅢ', 'helloⅢ'.islower(), end='\n\n')  # False
print('str.isupper():所有的字符都是大写')
print('HELLO', 'HELLO'.isupper())  # True
print('hello', 'hello'.isupper())  # False
print('HELLO123', 'HELLO123'.isupper())  # True
print('Hello一二三', 'Hello一二三'.isupper())  # False
print('HELLO壹贰叁', 'HELLO壹贰叁'.isupper())  # True
print('壹贰叁', '壹贰叁'.isupper())  # False
print('HELLOⅢ', 'HELLOⅢ'.isupper(), end='\n\n')  # True

print('str.istitle():所有的字符都是首字母大写')
print('Hello', 'Hello'.istitle())  # True
print('Hello World', 'Hello World'.istitle())  # True
print('HelloWorld', 'HelloWorld'.istitle())  # False
print('hello', 'hello'.istitle())  # False
print('hello123', 'hello123'.istitle())  # False
print('Hello一二三', 'Hello一二三'.istitle())  # True
print('hello壹贰叁', 'hello壹贰叁'.istitle())  # False
print('壹贰叁', '壹贰叁'.islower())  # False
print('HelloⅢ', 'HelloⅢ'.islower())  # False
print('helloⅢ', 'helloⅢ'.islower(), end='\n\n')  # False
print('str.isspace():所有的字符都是空白字符(\\n,\\t等)')
print('\\n', '\n'.isspace())  # True
print('\\t', '\t'.isspace())  # True
print(' ', ' '.isspace())  # True
  • 字符串的拼接操作
'''
数据的处理---字符串的拼接
1.使用str.join(0方法进行拼接字符串
2.直接拼接
3.使用格式化字符串进行拼接
'''
s1 = 'Hello'
s2 = 'World'
print(f's1:{s1},s2:{s2}')
# 使用+号拼接
print('-'*50)
print('s1+s2:', s1 + s2)  # HelloWorld
# 使用字符串的join()方法
print('-'*50)
print('s1.join(s2):', s1.join(s2))  # WHellooHellorHellolHellod
print('\'\'.join([s1,s2]):', ''.join([s1, s2]))  # HelloWorld
print('\'*\'.join([s1, s2]):', '*'.join([s1, s2]))  # Hello*World
# 直接拼接
print('-'*50)
print('\'Hello\'\'World\':', 'Hello''World')
# 使用格式化字符串进行拼接
print('-'*50)
print('\'%s%s\'%(s1,s2):', '%s%s' % (s1, s2))
print('f\'{s1}{s2}\':', f'{s1}{s2}')
print('\'{0}{1}\'.format(s1,s2):', '{0}{1}'.format(s1, s2))
  • 字符串的去重操作
s = 'helloworldhelloworld'
# (1)字符串拼接及not in
new_s = ''
for item in s:
    if item not in new_s:
        new_s += item
print(new_s)
# (2)使用索引+not in
new_s2 = ''
for i in range(len(s)):
    if s[i] not in new_s2:
        new_s2 += s[i]
print(new_s2)
# 通过集合的去重+列表的排序
new_s3 = set(s)
lst = list(new_s3)
lst.sort(key=s.index)
print(''.join(lst))
  • 正则表达式
'''

元字符:具有特殊意义的专用字符,例如:^和$分别表示匹配的开始和结束
.:匹配任意字符(除\n)
\w:匹配字母,数字,下划线
\W:匹配非字母,数字,下划线
\s:匹配任意空白字符
\S:匹配任意非空白字符
\d:匹配任意十进制数


限定符:用于限定匹配的次数
?:匹配前面的字符0次或1次
+:匹配前面的字符1次或多次
*:匹配前面的字符0次或多次
{n}:匹配前面的字符n次
{n,}:匹配前面的字符最少n次
{n,m}:匹配前面的字符最少n次,最多m次

其他字符
区间字符[]:匹配[]中所指定的字符
排除字符^:匹配不在[]中指定的字符
选择字符|:用于匹配|左右的任意字符
转义字符\:同Python中的转义字符
[\u4e00-\u9fa5]:匹配热议一个汉字
分组():改变限定符的左右


正则表达式
re模块:Python中的内置模块,用于实现Python中的正则表达式操作
re.match(pattern,string,flag=0):用于从字符串的开始位置进行匹配,如果起始位置匹配成功,结果为Match对象,否则为None
re.search(pattern,string,flag=0):用于在整个字符串中搜素第一个匹配的值,如果匹配成功,结果为Match对象,否则为None
re.findall(pattern,string,flag=0):用于在整个字符串中搜素所有符合正则表达式的值,结果是一个列表类型
re.sub(pattern,repl,string,count,flag=0):用于实现字符串内指定字符串的替换
re.spilt(pattern,string,maxspilt,flag=0):字符串中的spilt()方法功能相同,都是分割字符串

'''
- match函数的使用
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
- sub和spilt函数的使用
import re  # 引入

pattern = '黑客|破解|反爬'  # +限定符,\d 8-9数字出现1次或多次
s = '我想学习Python,想破解一些VIP视频,Python可以实现无底线反爬嘛?'  # 待匹配字符串
new_s = re.sub(pattern, 'xxx', s)
print(new_s)  # 我想学习Python,想xxx一些VIP视频,Python可以实现无底线xxx嘛?
s2 = 'https://www.bilibili.com/video/BV1wD4y1o7AS/?p=74&spm_id_from=pageDriver'
pattern2 = '[?|&]'
lst = re.split(pattern2, s2)
print(lst)  # ['https://www.bilibili.com/video/BV1wD4y1o7AS/', 'p=74', 'spm_id_from=pageDriver']

异常处理

# 1.try...except的语法结构为:
'''
try:
    可能抛出异常的代码
except 异常类型:
    异常处理代码(报错后执行的代码)

'''
# 2.try...except...except的语法结构为:
'''
try:
    可能抛出异常的代码
except 异常类型A:
    异常处理代码(报错后执行的代码)
except 异常类型B:
    异常处理代码(报错后执行的代码)
'''
# 3.try...except...else的语法结构为:
'''
try:
    可能抛出异常的代码
except 异常类型A:
    异常处理代码(报错后执行的代码)
else:
    没有抛出异常需要执行的代码
'''
# 4.try...except...else的语法结构为:
'''
try:
    可能抛出异常的代码
except 异常类型A:
    异常处理代码(报错后执行的代码)
else:
    没有抛出异常需要执行的代码
finally:
    无论是否产生异常都要执行的代码
'''
# raise关键字,抛出一个异常,从而提醒程序出现了异常情况,程序能够正确定的处理这些异常情况,语法结构为
'''
raise关键字的语法结构
raise [Exception类型(异常描述信息)]
'''
  • 异常处理
try:
    num1 = int(input('请输入一个整数:'))
    num2 = int(input('请输入另一个整数:'))
    result = num1 / num2
    print(f'{num1}/{num2}的结果为', result)
except ZeroDivisionError:
    print('除数不能为0')
  • 多个except结构
try:
    num1 = int(input('请输入一个整数:'))
    num2 = int(input('请输入另一个整数:'))
    result = num1 / num2
    print(f'{num1}/{num2}的结果为', result)
except ZeroDivisionError:
    print('除数不能为0')
except ValueError:
    print('数据错误')
except BaseException:
    print('其他异常')
  • try…except…else结构
try:
    num1 = int(input('请输入一个整数:'))
    num2 = int(input('请输入另一个整数:'))
    result = num1 / num2
except ZeroDivisionError:
    print('除数不能为0')
except ValueError:
    print('数据错误')
except BaseException:
    print('其他异常')
else:
    print(f'{num1}/{num2}的结果为', result)
finally:
    print('程序执行结束')
  • raise关键字的使用
try:
    gender = input('输入性别:')
    if gender != '男' and gender != '女':
        raise Exception('性别只能输入男/女')
except Exception as e:
    print('输入错误说明:',e)
else:
    print('性别为:',gender)
finally:
    print('程序执行结束')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值