#可以输出数字
print(520)
print(1314)
\#可以输出字符串
print('hello world!')
print("hello world !")
\#可以输出含有运算符的表达式
print("5+3")
print(5+3)
\#可以讲数据输出到文件中,注意点:1、路径中盘符要存在;2、文件file=fp;
fp=open('D:/学习资料/text.txt','a+')
print('helloworld',file=fp)
fp.close()
\#不进行换行输出,即仅仅在一行输出
print('I','can','do','it')
# 开发时间:2022/3/30 11:32
\#转义字符
print('hello\nworld')
print('hello\tworld')
print('helloooo\tworld')#\t水平制表符
print('hello\rworld')#\r回车
print('hello\bworld')#\b退格
print('http:\\\\www.baidu.com')
print('老师说:\'大家好\'')
\#原字符,不希望字符串中的转义字符起作用,就使用原字符,就是字符串之前加上r,或R
print(r'hello\nworld')
\#注意事项,最后一个字符不能是反斜杠
print(r'hello\nworld')
Print()函数 功能:向目的地输出内容
输出内容:数字、字符串、表达式
目的地:IDLE、控制台、文件
转义字符的分类 常表示的字符 | 转义字符 | 备注 | ||
---|---|---|---|---|
换行 | \n | newline光标移到下一行的开头 | ||
无法直接表示的字符 | 回车 | \r | return光标移动到本行的开头 | |
水平制表符 | \t | tab键,光标移动到下一组4个空格的开始处 | ||
退格 | \b | 键盘上的backspace键,回退一个字符 | ||
在字符串中有特殊 | 反斜杆 | \\ | ||
用途的字符 | 单引号 | \’ | ||
双引号 | \" | |||
print(chr(0b100111001011000))
print(ord('乘'))
\# 开发时间:2022/3/31 9:54
import keyword
print(keyword.kwlist)
标识符和保留字:False、None、True、and、as、assert、break、class、continue、def、del、elif、else、except、finally、for、from、global、if、import、in、is、lambda、nonlocal、not、or、pass、raise、return、try、while、with、yield
\# 开发时间:2022/3/31 10:10
name='玛利亚'
print(name)
print('标识',id(name))
print('类型',type(name))
print('值',name)
# 开发时间:2022/3/31 10:17
name='玛利亚'
print(name)
name='楚留冰'
print(name)
数据类型
int
:98float
:3.14159bool
: True\Falsestr
:‘人生苦短,我用python’数据类型
#整型可以表示为正数、负数和零
n1=521
n2=0
n3=-1314
print(n1,type(n1))
print(n2,type(n2))
print(n3,type(n3))
#整数可以表示为二进制、十进制、八进制和十六进制
print('二进制',0b10101011) #二进制以0b开头
print('十进制',521)
print('八进制',0o176)#八进制以0o开头
print('十六进制',0x1EAF)#十六进制以0x开头
# 开发时间:2022/3/31 10:46
n1=1.1
print('类型',type(n1))
n2=2.2
print(n1+n2)
n3=2.1
print(n1+n3) #不精确
from decimal import Decimal
print(Decimal('1.1')+Decimal('2.2')) #3.3
# 开发时间:2022/3/31 11:14
f1=True
f2=False
print(f1,type(f1))
print(f2,type(f2))
#布尔值可以转成整数计算
print(f1+0) #1 1+0的结果为1,True表示1
print(f2+0) #0 0+0的结果为0,False表示0
str1="人生苦短,我用Python"
str2="人生苦短,我用Python"
str3="""人生苦短,
我用Python"""
str4="""人生苦短,
我用Python"""
print(str1,type(str1))
print(str2,type(str2))
print(str3,type(str3))
print(str4,type(str4))
函数名 | 作用 | 注意事项 | 举例 |
---|---|---|---|
str() | 将其它数据类型转成字符串 | 也可用引号转换 | str(123) ‘123’ |
int() | 将其它数据类型转成整数 | 1、文字类和小数类字符串,无法转成整数;2、浮点数化成整数:抹零取整 | int(‘123’) int(98.2) |
float() | 将其它数据类型转成浮点数 | 1、文字类无法转成浮点数;2、整数转成浮点数,末尾为.0 | float(‘9.9’)、float(9) |
# 2022/4/3 16:07
#输入功能(单行注释)
print('hello')
'''嘿嘿嘿,
我是
多行注释
'''
#coding:gbk #或utf-8
# 开发人员:
# 2022/4/3 16:09
#python文件默认编码是UTF-8,编码格式声明注释在首行
input()函数的基本使用
变量 赋值运算符’=’ input(‘input the number:’)
present = input(‘大圣想要声明礼物呢?’)
present=input('大圣想要什么礼物呢?')
print(present,type(present))
a=input('请输入一个加数:')
b=input('请输入另一个加数:')
print(type(a),type(b)) #input()函数是输入一个字符串的数据类型
print(a+b) #此处+起到的是连接作用
a=int(a)
b=int(b)
print(a+b)
print(1+1)#加法运算
print(1-1)#减法运算
print(2*5)#乘法运算
print(1/2)#除法运算
print(11/2)#除法运算
print(11//2)#整除运算
print(11%2)#取余运算
print(2**8)#幂运算 表示2的8次方
print(2**9)#幂运算 表示2的9次方
print(9//4) #2
print(-9//-4)#2
print(9//-4) #-3
print(-9//4)#-3 一正一负的整除公式,向下取整
print(9%-4) #-3 公式 余数=被除数-除数*商 9-(-4)*(-3) 9-12-->-3
print(-9%4) #3 公式 余数=被除数-除数*商 9-(4)*(-3) -9+12-->3
a=b=c=20 #链式赋值
print(a,id(a))
print(b,id(b))
print(c,id(c))
print('---------支持参数赋值-----------')
a=20
a+=30 #相当于a+=30
print(a)
print(type(a))
a-=10 #相当于a=a-10
print(a)
a*=2
print(a)
a/=3
print(a)
print(type(a)) #float
a//=2
print(a)
a,b,c=20,30,50
print(a,b,c)
#a,b=20,30,50 报错,因为左右变量的个数和值的个数不对应
print('--------交换两个变量的值-------')
a,b=10,20
print('交换之前',a,b)
#交换
a,b=b,a
print('交换之后',a,b)
# 2022/4/3 20:44
a,b=10,20
print('a>b吗?',a>b) #False
print('a,a<b) #True
print('a<=b吗?',a<=b) #True
print('a>=b吗?',a>=b) #True
print('a==b吗?',a==b) #False
print('a!=b吗?',a!=b) #True
'''
一个 = 称为赋值运算符,==称为比较运算符
一个变量由三个部分组成,标识,类型,值
==比较是标识还是值呢?比较的是值
比较对象的标识使用 is
'''
a=10
b=10
print(a==b) #True 说明,a与b的value相等
print(a is b)#True 说明,a与b的id标识,相等
#以下代码没学过,后面会给大家讲解
list1=[11,22,33,44]
list2=[11,22,33,44]
print(list1==list2)
print(list2 is list1)
print(id(list2))
print(id(list1))
print(a is not b) #False a和b的id标识是不相等的吗
print(list1 is not list2)#True
运算符 | 运 算 | 数 | 运算结果 | 备注 | |
---|---|---|---|---|---|
True | True | True | 当两个运算数为True的时,运算结果才为True | ||
and | True | False | False | ||
False | True | False | |||
False | False | False | |||
True | True | True | 只要有一个运算数位True,运算结果就为True | ||
True | False | True | |||
or | False | True | True | ||
False | False | False | |||
not | True | False | 如果运算数为True,运算结果为False | ||
False | True | 如果运算数为False,运算结果为True |
print(4&8) #按位与&,
print(4|8) #按位或|,同时为0时结果为0
print(4<<1)#向左移动1位(移动一个位置)相当于乘以2
print(4<<2)#向左移动2位(移动2个位置)
print(4>>1)#向右移动1位,相当于除以2
print(4>>2)#向右移动2位,相当于除以4
print('-------------程序开始----------')
print('1、把冰箱门打开')
print('2、把大象放冰箱里')
print('3、把冰箱门关上')
print('--------------程序结束---------')
print("-----------以下对象的布尔值均为False------")
print(bool(False))#False
print(bool(0))#False
print(bool(0.0))#False
print(bool(None))#False
print(bool(' '))#False
print(bool(""))#False
print(bool([]))#空列表
print(bool(list()))#空列表
print(bool(()))#空元组
print(bool(tuple()))#空元组
print(bool({}))#空字典
print((bool(dict())))#空字典
print(bool(set()))#空集合
print('--------其他对象的布尔值为True-------')
print(52)
print('helloworld')
money=1000#余额
s=int(input('请输入取款金额:'))#取款金额
#判断金额余额是否充足
if money>=s:
money-=s
print("取款成功,余额为:",money)
#双分支结构if...else,二选一执行
'''从键盘录用一个整数,编写程序让计算机判断是奇数还是偶数'''
num=int(input('请输入一个整数'))
#条件判断
if num%2==0:
print(num,'是偶数')
else:
print(num,'是奇数')
'''多分支结构,多选一执行
从键盘录用一个整数 成绩
90-100 A
80-89 B
70-79 C
60-69 D
0-59 E
小于0或大于100 为非法数据(不是成绩的有限范围)
'''
score=float(input('请输入一个成绩:'))
#判断
if score>=90 and score<=100:
print('A级')
elif score>=80 and score<=89:
print('B级')
elif score>=70 and score<=79:
print('C级')
elif score>=60 and score<=69:
print('D级')
elif score>=0 and score<=59:
print('E级')
else:
print("对不起,成绩有误,不在成绩的有效范围")
另一种表达方式(更为简便):
'''多分支结构,多选一执行
从键盘录用一个整数 成绩
90-100 A
80-89 B
70-79 C
60-69 D
0-59 E
小于0或大于100 为非法数据(不是成绩的有限范围)
'''
score=float(input('请输入一个成绩:'))
#判断
if 90<=score<=100:
print('A级')
elif 80<=score<=89:
print('B级')
elif 70<=score<=79:
print('C级')
elif 60<=score<=69:
print('D级')
elif 0<=score<=59:
print('E级')
else:
print("对不起,成绩有误,不在成绩的有效范围")
'''
会员>=200 8折
>=100 9折
不打折
非会员 >=200 9.5折'
不打折
'''
answer=input('您是会员吗?y/n')
money=float(input('请输入您的购物金额:'))
#外层判断是否是会员
if answer=='y':
if money>=200:
print('打八折,付款金额为:',money*0.8)
elif money>=100:
print('打九折,付款金额为:',money*0.9)
else:
print('不打折,付款金额为:',money)
else: #非会员
if money >= 200:
print('打9.5折,付款金额为:', money * 0.95)
else:
print('不打折,付款金额为:', money)
'''从键盘录入两个整数,比较两个整数的大小'''
num_a=int(input('请输入第一个整数'))
num_b=int(input('请输入第二个整数'))
#比较大小
'''if num_a>=num_b:
print(num_a,'大于等于',num_b)
else:
print(input(num_a,'小于',num_b))'''
print('使用条件表达式进入比较')
print(str(num_a)+'大于等于'+str(num_b) if num_a>=num_b else str(num_a)+'小于'+str(num_b))
#pass语句,什么都不做,只是一个占位符,用到需要写语句的地方
answer=input('你是会员吗?y/n')
#判断是否是会员
if answer=='y':
pass
else:
pass
'''第一种创建方式,只有一个参数(小括号只给了一个数'''
r=range(10)#【0,1,2,3,4,5,6,7,8,9】,默认从0开始,默认相差1称为步长
print(r)#range(0,10)
print(list(r))#用于查看range对象中的整数序列 -->list是列表的意思
'''第二种创建方式,给了两个参数(小括号中给了两个数'''
r=range(1,10) #指定了起始值,从1开始,到10 结束(不包含10),默认步长为1
print(list(r))#[1,2,3,4,5,6,7,8,9]
'''第三种创建方式,给了第三个参数(小括号中给了三个数)'''
r=range(1,10,2)
print(list(r))#[1,3,5,7,9]
'''判断指定的整数,在序列中是否存在in,not in'''
print(10 in r)#False,10不在当前的r这个整数序列中
print(9 in r)#True,9在当前的r这个序列中
print(range(1,20,1)) #[1,...,19]
print(range(1,101,1))#[1,2,...,100]
a=1
#判断条件表达式
while a<10:
#执行条件执行体
print(a)
a+=1
'''4步循环过程
- 初试化变量
- 条件判断
- 条件执行体(循环体)
- 改变变量
总结:初始化的变量与条件判断的变量与改变为同一个
'''
'''初始化变量为0'''
sum=0
a=0
'''条件判断'''
while a<5:
'''条件执行体(循环体)'''
sum+=a
'''改变变量'''
a+=1
print('和为',sum)
for item in 'python': #第一次取出来的是P,将P赋值值item,将item的值输出
print(item)
#range()产生一个整数序列,--》也是一个可迭代对象
for i in range(10):
print(i)
#如果在循环体重不需要使用到自定义变量,可将自定义变量写成"_"
for _ in range(5):
print('人生苦短,我用python')
sum=0
for item in range(1,101):
if item%2==0:
sum+=item
print("1到100之间的偶数和为",sum)
'''输出100到999之间的水仙花数
举例:153=3*3*3+5*5*5+1*1*1
'''
for item in range(100,1000):
ge=item%10
shi=item//10%10
bai=item//100
#判断
if ge*ge*ge+shi*shi*shi+bai*bai*bai==item:
print(item)
'''从键盘录入密码,最多录入3次,如果正确就结束循环 '''
for item in range(3):
pwd=input('请输入密码:')
if pwd=='8888':
print('密码正确')
break
else:
print('密码不正确')
a=0;
while a<3:
'''条件执行体(循环体)'''
pwd=input('请输入密码')
if pwd=='8888':
print('密码正确')
break
else:
print('密码不正确')
#改变变量
a+=1
'''要求输出1到50之间所有5的背书,5,,10,,15,,20,,25....
5的倍数的共同点:和5的余数为0的数都是5的倍数
什么样不的数不是5的倍数,1,,2,,3,,4,,5,,6,,7,8,,9.。。。
'''
for item in range(1,51):
if item%5==0:
print(item)
print('------使用continue---------')
for item in range(1,51):
if item%5!=0:
continue
print
与else语句配合使用的三种情况
for item in range(3):
pwd=input('请输入密码:')
if pwd=='8888':
print('密码正确')
break
else:
print('密码不正确')
else:
print('对不起,三次密码均不正确')
a=0
while a<3:
pwd=input('请输入密码')
if pwd=='8888':
print('密码正确')
break
else:
print('密码不正确')
#改变变量
a+=1
else:
print('对不起,三次密码均输入错误')
循环结构中又嵌套了另外的完整的循环结构,其中内层循环作为外层循环的循环体执行
'''输出一个三行四列的矩阵'''
for i in range(1,4):#行表,执行三次,一次是一行
for j in range(1,5):
print('*',end='\t') #不换行输出
print()#打行
for i in range(1,10):
for j in range(1,i+1):
print(i,'*',j,'=',i*j,end='\t')
print()
二重循环中的break和continue用于控制本层循环
'''流程控制语句break与continue在二重循环中的使用 '''
for i in range(5):
for j in range(1,11):
if j%2==0:
#break #仅输出5个1
continue
print(j,end='\t')
print()
列表 | |||||||
---|---|---|---|---|---|---|---|
索引 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
数据 | “hello” | “world” | 123 | 98.6 | “world” | 125 | “world” |
索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
1st = [‘大圣’,’娟子姐]
列表名 赋值号 中括号
'''创建列表的第一种方式,使用[] '''
lst=['hello','world',98]
'''创建列表的第二种方式,使用内置函数list'''
lst2=list(['hello','world',98])
获取列表中制定元素的索引index()
获取列表中的单个元素
lst=['hello','world',98,'hello']
print(lst.index('hello'))#如果列表中有相同的元素只返回列表中相同的第一个元素的索引
#print(lst.index('Python'))#ValueError: 'Python' is not in list
#print(lst.index('hello',1,3))# ValueError: 'hello' is not in list
print(lst.index('hello',1,4))
lst=['hello','world',98,'hello','love']
print(lst[1])#顺序获取索引为1的元素
print(lst[-1])#逆序获取索引为1的元素 ,范围-1到-N 此处输出为love
#获取索引为10
#print(lst[10])#IndexError: list index out of range
lst=[10,20,30,40,50,60,70,80]
#start=1,stop=6,step=1
#print(lst[1:6:1]) #[20, 30, 40, 50, 60]
'''原列表id 4367247040
切的片段id: 4368807424
'''
print('原列表id',id(lst))
lst2=lst[1:6:1]
print('切的片段id:',id(lst2))
print(lst[1:6])#默认步长为1
print(lst[1:6:])
#start=1,stop=6,step=2
print(lst[1:6:2])
#start默认,stop=6,step=2
print(lst[:6:2])
#start=1,stop默认,step=2
print(lst[1::2])
print("---------------step步长为负数的情况----------")
print('原列表',lst) #[10, 20, 30, 40, 50, 60, 70, 80]
print(lst[::-1]) #[80, 70, 60, 50, 40, 30, 20, 10]
#start=7,stop省略,step=-1
print(lst[6::-1]) #[70, 60, 50, 40, 30, 20, 10]
#start=6,stop=0,step=-2
print(lst[6:0:-2]) #[70, 50, 30]
判断指定元素在列表中是否存在
元素 in 列表名
元素 not in 列表名
列表元素的遍历
print('p'in 'python')
print('k' not in 'python')
lst=[10,20,'python','hello']
print(10 in lst) #True
print(100 in lst)#False
print(10 not in lst)#False
print(100 not in lst)#True
print('-------------')
for item in lst:
print(item)
方法/其他 | 操作描述 | |
---|---|---|
增 | append() | 在列表的末尾添加一个元素 |
加 | extend() | 在列表的末尾至少添加一个元素 |
操 | insert() | 在列表的任意位置添加一个元素 |
作 | 切片 | 在列表的任意位置添加至少一个元素 |
#向列表的末尾添加一个元素
lst=[10,20,30]
print('在添加元素之前',lst,id(lst))
lst.append(100)
print('添加元素之后',lst,id(lst))
lst2=['hello','world']
#lst.append(lst2) #将lst2作为一个元素添加到列表的末尾
#向列表的末尾一次性添加多个元素
lst.extend(lst2)
print(lst)
lst3=[True,False,'hello']
#在任意的位置上添加N多个元素
lst[1:]=lst3
print(lst)
方法/其他 | 操作描述 | |
---|---|---|
一次删除一个元素 | ||
remove() | 重复元素只删除第一个 | |
删 | 元素不存在抛出ValueError | |
除 | ||
操 | 删除一个指定索引位置上的元素 | |
作 | Pop() | 制定索引不存在抛出ValueError |
不指定索引,删除列表中最后一个元素 | ||
切片 | 一次至少删除一个元素 | |
clear() | 清空列表 | |
del | 删除列表 |
lst=[10,20,30,40,50,60,30]#从列表中移除
lst.remove(30)
print(lst)
#lst.remove(100) #ValueError: list.remove(x): x not in list
#pop()根据索引移除元素
lst.pop(1)
print(lst) #[10, 40, 50, 60, 30]
#lst.pop(5) #IndexError: pop index out of range
lst.pop() #如果不指定参数(索引),将删除列表中的最后一个元素
print(lst)
print('-------------切片操作-删除至少一个元素,将产生一个列表对象-------')
new_list=lst[1:3]
print('原列表',lst)
print('切片后的列表',new_list)
'''不产生新的列表对象,而是删除原列表中的内容 '''
lst[1:3]=[]
print(lst)
'''清除列表中的所有元素'''
lst.clear()
print(lst)
'''del语句将列表对象删除 '''
del lst
#print(lst) #NameError: name 'lst' is not defined.
lst=[10,20,30,40,50]
#一次修改一个值
lst[2]=52
print(lst)
#一次修改多个值
lst[1:3]=[232,123,521]
print(lst)
lst=[60,50,30,20,90,10]
print('排序前的列表',lst,id(lst))
#开始排序,调用列表对象的sort方法,升序排序
lst.sort()
print('排序后的列表',lst,id(lst))
'''
排序前的列表 [60, 50, 30, 20, 90, 10] 4374767296
排序后的列表 [10, 20, 30, 50, 60, 90] 4374767296
'''
#通过指定关键字参数,将列表中的元素进行降序排序
lst.sort(reverse=True)#reverse=True 表示降序排序,reverse=False就是升序排序
print(lst)
#[90, 60, 50, 30, 20, 10]
lst.sort(reverse=False)#reverse=True 表示降序排序,reverse=False就是升序排序
print(lst)
print("----------使用内置函数sorted()对列表进行排序,将产生一个新的列表对象-------")
lst=[20,30,10,98,53]
print('原列表',lst)
#开始排序
new_list=sorted(lst)
print(lst)
print(new_list)
#指定关键字参数,实现列表元素降序排列
desc_list=sorted(lst,reverse=True)
print(desc_list)
lst=[i for i in range(1,10)] #[1, 2, 3, 4, 5, 6, 7, 8, 9]
print(lst)
lst=[i*i for i in range(1,10)] #[1, 4, 9, 16, 25, 36, 49, 64, 81]
print(lst)
'''列表中的元素的值为2,4,6,8,10...'''
lst2=[i*2 for i in range(1,6)]#[2, 4, 6, 8, 10]
print(lst2)
字典
字典示意图
hash(key3) | Hash(key2) | hash(key1) | hash(key5) | |||||
Key3 | key2 | key1 | Key5 | |||||
v | v | v | v | |||||
Value3 | Value2 | value1 | Value5 |
字典的实现原理
字典的创建
#字典的创建方式
'''使用{}创建字典'''
scores={'张三':100,'李四':98,'王五':52}
print(scores)
print(type(scores))
'''第二种创建dict()'''
student=dict(name='jack',age=20)
print(student)
'''空字典'''
di=dict()
print(di)
#获取字典的元素
scores={'张三':100,'李四':98,'王五':52}
'''第一种方式,使用[]'''
print(scores['张三']) #100
#print(scores['小明'])#KeyError: '小明'
'''第二章方式,使用get()方法'''
print(scores.get('张三'))
print(scores.get('小明'))#None
print(scores.get('麻瓜',66))#66是在查找'麻瓜'所对的value
#key的判断
scores={'张三':100,'李四':98,'王五':52}
print(scores)
print('张三' in scores)
print('张三' not in scores)
del scores['张三']#删除指定的key-value对
#score.clear() #清空字典的元素
print(scores)
scores['陈六']=98
print(scores)
scores['陈六']=100
print(scores)
scores={'张三':100,'李四':98,'王五':52}
#获取所有的key
keys=scores.keys()
print(keys)
print(type(keys))#
print(list(keys))#将所有的可以组成的视图转成列表
#获取所有的value
values=scores.values()
print(values)
print(type(values))#
print(list(values))
#获取所有的key-value对
items=scores.items()
print(items) # dict_items([('张三', 100), ('李四', 98), ('王五', 52)])
print(list(items)) #转换之后的列表元素是由元组组成(元组将在下一个章节讲解) [('张三', 100), ('李四', 98), ('王五', 52)]
scores={'张三':100,'李四':98,'王五':52}
#字典元素的遍历
for item in scores:
print(item,scores[item],scores.get(item))
d={'name':'张三','name':'李四'} #key不允许重复
print(d) #{'name': '李四'}
d={'name':'张三','nikename':'张三'}
print(d) #{'name': '张三', 'nikename': '张三'}
lst=[10,20,30]
lst.insert(1,100)
print(lst) # [10, 100, 20, 30]
d={lst:100}#lst是可变的序列,不允许,必须为不可变对象,TypeError: unhashable type: 'list'
print(d)#TypeError: unhashable type: 'list'
item=['Fruits','Books','Others']
prices=[96,78,85,100,120]
d={item.upper():price for item,price in zip(item,prices)}
print(d) #{'FRUITS': 96, 'BOOKS': 78, 'OTHERS': 85} prices列表中多余被压缩
#不可变序列,可变序列
#不可变序列 字符串、元组
s='hello'
print(id(s))#4337127024
s=s+'world'
print(s) #helloworld
print(id(s))#4337157680
#可变序列,列表、字典
lst=[10,20,30]
print(id(lst))#4334023872
lst.append(300)
print(id(lst))#4334023872 id地址不更改
#元组创建方式
#第一种创建方式,使用()
t=('Python','world',98)
print(t)
print(type(t))
t2='Python','world',98 #省略了小括号
print(t2)
print(type(t2))
t3=('python')#无逗号 如果元组中只有一个元素,逗号不能省
print(t3)
print(type(t3))#
t3=('python',)
print(type(t3))#
#第二种创建方式,使用内置函数tuple()
t5=tuple(('Python','world',98))
print(t5)
print(type(t5))
#空元组的创建方式
#空列表的创建方式
lst=[]
lst1=list()
d={}
d2=dict()
#空元组
t4=()
t5=tuple()
print('空列表',lst,lst1)
print('空字典',d,d2)
print('空元组',t4,t5)
t=(10,[20,30],9)
print(t)
print(type(t))
print(t[0],type(t[0]),id(t[0]))#10 4341154320
print(t[1],type(t[1]),id(t[1]))#[20, 30] 4341904576
print(t[2],type(t[2]),id(t[2]))#9 4341154288
'''尝试将t[1]修改为100 '''
print((id(100)))#4341157200
#t[1]=100 #元组是不允许修改元素的 AttributeError: type object 'int' has no attribute 'id'
t[1].append(100) #向列表中添加元素
print(t,id(t[1]))#(10, [20, 30, 100], 9) 4341904576
#元组遍历
t=('Python','world',98)
#第一种获取元组元素的方式,使用索引
print(t[0])
print(t[1])
print(t[2])
#print(t[3])#IndexError: tuple index out of range
'''遍历元组 '''
for item in t:
print(item)
hash(dataA) | hash(dataB) | hash(dataC) | hash(dataD) | |
dataA | dataB | dataB | dataD |
#第一种创建方式使用{}
s={2,3,3,5,6,7,7,}#{2, 3, 5, 6, 7} 集合中不允许重复
print(s)
#第二种创建方式使用set()
s1=set(range(6))
print(s1,type(s1))
s2=set([1,2,5,5,5,6,6])
print(s2,type(s2))
s3=set((1,2,3,3,5,5,52)) #集合中的元素是无序的
print(s3,type(s3))
s4=set('python')
print(s4,type(s4))
s5=set({1,2,3,5,6,7,8,22})
print(s5,type(s5))
#定义一个空集合
s6={}#dict字典类型
print(type(s6))
s7=set()
print(s7,type(s7))
s={10,20,30,408,60}
#判断元素的判断操作
print(10 in s)#True
print(100 in s)#False
print(10 not in s)#False
print(100 not in s)#True
#集合元素的新增操作
print('------集合元素的新增操作------')
s.add(80)
print(s)
s.update({200,400,500})
print(s)
s.update([521,600,800])
print(s)
s.update((999,123))
print(s)
#集合元素删除操作
print('----集合元素删除操作-----')
s.remove(200)
print(s)
s.pop()
print(s)
s.pop()
print(s)
#s.pop(123)#TypeError: set.pop() takes no arguments (1 given)
s.clear()
print(s)
#判断两个集合时候相等(元素相同,就相等)
s={10,20,30,40}
s2={30,50,60,80}
print(s==s2)#False
print(s!=s2)#True
'''一个集合是否是另一个集合的子集'''
s1={10,20,30,40,50,60}
s2={10,20,30,40,50}
s3={10,20,52}
print(s2.issubset(s1))#True
print(s3.issubset(s1))#False
#一个集合是否是另一个集合的超集
print(s1.issuperset(s2))#True
print(s1.issuperset(s3))#False
#两个集合是否含有交集
print(s2.isdisjoint(s3))#False 有交集为False
s4={100,200,300}
print(s2.isdisjoint(s4))#True 没有交集为True
#集合的数字操作
#(1)交集
s1={10,20,30,50}
s2={20,30,50,60}
print(s1.intersection(s2))
print(s1 & s2)#intersection()与&等价,交集操作
print(s1)
print(s2)
#(2)并集操作
print(s1.union(s2))
print(s1|s2) #union与 | 等价,并集操作
print(s1)
print(s2)
#(3)差集操作
print(s1.difference(s2))
print(s1-s2)
#(4)对称差集
print(s1.symmetric_difference(s2))
print(s1^s2)#symmetric_difference(s2)与^ 等价,并集操作
#列表生成式
lst=[i*i for i in range(10)]
print(lst)
#集合生成式
s={i*i for i in range(10)}
print(s)
数据结构 | 是否可变 | 是否重复 | 是否有序 | 定义符号 |
---|---|---|---|---|
列表(list) | 可变 | 可重复 | 有序 | [] |
元组(tuple) | 不可变 | 可重复 | 有序 | () |
字典(dict) | 可变 | key不可重复 | 无序 | {key:value} |
字典(dict) | 可变 | value可重复 | 无序 | {key:value} |
集合(set) | 可变 | 不可重复 | 无序 | {} |
#字符串的驻留机制
a='Python'
b="Python"
c='''Python'''
print(a,id(a))#Python 4345797360
print(b,id(b))#Python 4345797360
print(c,id(c))#Python 4345797360
s1='abc%'
s2='abc%'
print(s1 is s2)
功能 | 方法名称 | 作用 |
---|---|---|
查 | Index() | 查找子串substr第一次出现的位置,如果查找的子串不存在时,则抛出ValueError |
询 | Rindex() | 查找子串substr最后一次出现的位置,如果查找的子串不存在时,则抛出ValueError |
方 | Find() | 查找子串substr第一次出现的位置,如果查找的子串不存在时,则返回-1 |
法 | Rfind() | 查找子串substr最后一次出现的位置,如果查找的子串不存在时,则返回-1 |
#字符串的查询操作
s='hello,hello'
print(s.index('lo'))#3
print(s.find('lo'))#3
print(s.rindex('lo'))#9
print(s.rfind('lo'))#9
#print(s.index('k'))#ValueError: substring not found
print(s.find('k'))#-1
#print(s.rindex('k'))#ValueError: substring not found
print(s.rfind('k'))#-1
功能 | 方法名称 | 作用 |
---|---|---|
大 | Upper() | 把字符串中所有字符都转成大写字母 |
小 | Lower() | 把字符串中所有字符都转成小写字母 |
写 | Swapcase() | 把字符串中所有大写字母都转成小写字母,把所有线小写字母都转成大写字母 |
转 | Capitalize() | 把第一个字符转换为大写,把其余字符转成小写 |
换 | Title() | 把每个单词的第一个转换为大写,把每个单词的剩余字符转换为小写 |
#字符串中的大小写转换的方法
s='hello,python'
a=s.upper()#转成大写之后,会产生一个新的字符串对象
print(a,id(a))
print(s,id(s))
b=s.lower()
print(b,id(b))
print(s,id(s))
print(b==s)
print(b is s)#False
s2='hello,Python'
print(s2.swapcase())
print(s2.title())
功能 | 方法名称 | 作用 |
---|---|---|
字 | Center() | 居中对其,第一个参数指定宽度,第2个参数指定填充符,第2 个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串 |
符 | ljust() | 左对齐,第一个参数指定宽度,第2个参数指定填充符,第2 个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串 |
串 | rjust() | 右对齐,第一个参数指定宽度,第2个参数指定填充符,第2 个参数是可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串 |
对齐 | Zfill() | 右对齐,左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,如果指定的宽度小于等于字符串的长度,返回字符串本身 |
s='hello,Python'
#居中对齐
print(s.center(20,'*'))
#左对齐
print(s.ljust(20,'*'))
print(s.ljust(10))
print(s.ljust(20))
#右对齐
print(s.rjust(20,'*'))
print(s.rjust(20))
print(s.rjust(10))
print('-5201314'.zfill(20))
功能 | 方法名称 | 作用 |
---|---|---|
字 | 从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表 | |
符 | split() | 以通过参数sep指定劈分字符串是劈分符 |
串 | 通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大劈分之后,剩余的子串会单独做为一部分 | |
劈 | ||
分 | rsplit() | 从字符串的右边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表 |
以通过参数sep指定劈分字符串是劈分符 | ||
通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大劈分之后,剩余的子串会单独做为一部分 |
s='hello world Python'
lst=s.split()#['hello', 'world', 'Python']
print(lst)
s1='hello|world|Python'
print(s1.split(sep='|'))#['hello', 'world', 'Python']
print(s1.split(sep='|',maxsplit=1))#['hello', 'world|Python']
print("----------rsplit()从右边开始劈分------")
print(s.rsplit())#['hello', 'world', 'Python']
print(s1.rsplit('|'))#['hello', 'world', 'Python']
print(s1.rsplit(sep='|',maxsplit=1))#['hello|world', 'Python']
功能 | 方法名称 | 作用 |
---|---|---|
判 | Isidentifier() | 判断指定的字符串是不是合法的标识符 |
断 | Isspace() | 判断指定的字符串是否全部由空白字符组成(回车、换行、水平制表符) |
字 | Isalpha() | 判断指定的字符串是否全部由字母组成 |
符 | Isdecimal() | 判断指定的字符串是否由十进制的数字组成 |
串的 | Isnumeric() | 判断指定的字符串是否全部由数字组成 |
方法 | Isalnum() | 判断指定的字符串是否全部由字母和数字组成 |
s='hello,python'
print('1.',s.isidentifier())#False
print('2.','hello'.isidentifier())#True
print('3.','张三_'.isidentifier())#True
print('4.','张三_123'.isidentifier())#True
print('5.','\t'.isspace())#True
print('6.','abc'.isalpha())#True
print('7.','张三'.isalpha())#True
print('8.','张三1'.isalpha())#False
print('9.','123'.isdecimal())#True
print('10.','123四'.isdecimal())#False
print('11','Ⅱ ⅢⅣ'.isdecimal())#False
print('12.','123'.isnumeric())#True
print('13.','123四'.isnumeric())#True
print('14','Ⅱ ⅢⅣ'.isnumeric())#False
print('15.','abc1'.isalnum())
print('16.','张三123'.isalnum())
print('17.','abc!'.isalnum())#False
功能 | 方法名称 | 作用 |
---|---|---|
字符串替换 | replace() | 第1个参数指定被替换的子串,第2个参数指定替换子串的字符串,该方法返回替换后得到的字符串,替换前的字符串不发生变化,调用该方法时,可以通过第3个参数指定最大替换次数 |
字符串的合并 | join() | 将列表或元组中的字符串合并成一个字符串 |
s='hello,Python'
print(s.replace('Python','Java'))
s1='hello,Python,Python,Python'
print(s1.replace('Python','Java',2))#hello,Java,Java,Python
lst=['hello','Java','Python']
print('|'.join(lst))#hello|Java|Python
print(''.join(lst))#helloJavaPython
t=('hello','Java','Python')
print(''.join(t))#helloJavaPython
print('*'.join('Python'))#P*y*t*h*o*n
print('apple'>'app')#True
print('apple'>'banana')#False
print(ord('a'),ord('b'))
print(ord('轩'))
print(chr(97),chr(98))
print(chr(36713))
'''==与is的区别
==比较的是value
is比较的是id是否相等'''
a=b='Python'
c='Python'
print(a is b)#True
print(a is c)#True
print(id(a))#驻留机制4373568240
print(id(b))#驻留机制4373568240
print(id(c))#驻留机制4373568240
s='hello,Python'
s1=s[:5]#由于没有指定起始位置,所以从0开始切
s2=s[6:]#由于没有指定结束位置,所以切到字符串的最后一个元素
s3='!'
newstr=s1+s3+s2
print(s1)
print(s2)
print(newstr)
print('___________')
print(id(s))
print(id(s1))
print(id(s2))
print(id(newstr))
print('------------切片[start:end:step]---------')
print(s[1:5:1]) #从1开始截到5(不包含5),步长为1
print(s[::2]) #默认从0 开始,没有写结束,默认到字符串的最后一个元素,步长为2,两个元素之间的索引间隔为2
print(s[::-1]) #默认从字符串的最后一个元素开始,到字符串的第一个元素结束,因为步长为负数
print(s[-6::1]) #从索引为-6开始,到字符串的最后一个元素结束,步长为1
#(1)%占位符
name='张三'
age=20
print('我叫%s,今年%d岁'%(name,age))
#(2) {}
print('我叫{0},今年{1}岁'.format(name,age))
#f-string
print(f'我叫{name},今年{age}岁')
print('%10d'%99)#10表示的是宽度
print('%.3f'%3.1415926)#.3表示是小数点后三位
#同时表示宽度和精度
print('%10.3f'% 3.1415926)#一共总宽度为10。小数点后3位
print('hellohello')
print('{0:3}'.format(3.1415926)) #.3表示的是一共3位小数
print('{:.3f}'.format((3.1415926)))#.3f表示的是3位小数
print('{:10.3f}'.format(3.1415926))#同时设置宽度和精度,一共是10位,3位是小数
编码与解码的方式
s='天涯共此时'
#编码
print(s.encode(encoding='GBK'))#在GBK这种编码格中 一个中文占两个字节
print(s.encode(encoding='UTF-8'))#在UTF-8这种编辑格式中,一个中文占三个字节
#解码
#byte代表就是一个二进制数据(字节类型的数据)
byte=s.encode(encoding='GBK') #编码
print(byte.decode(encoding='GBK')) #解码
byte=s.encode(encoding='UTF-8')
print(byte.decode(encoding='UTF-8'))
什么是函数
为什么需要函数
函数的创建
def 函数名([输入参数])
函数体
[return xxx]
def calc(a,b):
c=a+b
return c
result=calc(10,20)
print(result)
def calc(a,b):#a,b称为形式参数,简称形参,形参的位置是在函数的定义处
c=a+b
return c
result=calc(10,20)#10,,20称为实际参数的值,简称实参,实参的位置是函数的调用处
print(result)
res=calc(b=10,a=20) # =左侧的变量的名称称为 关键字参数
print(res)
def fun(arg1,arg2):
print('arg1',arg1)
print('arg2',arg2)
arg1=100
arg2.append(10)
print('arg1',arg1)
print('arg2',arg2)
#return
n1=11
n2=[22,33,44]
print('n1',n1)
print('n2',n2)
fun(n1,n2) #将位置传参,arg1,arg2,是函数定义处的形参,n1,n2是函数调用的处的实参,总结:实参名称与形参名称可以不一致
print('n1',n1)
print('n2',n2)
'''在函数调用过程中,进行参数的传递
如果是不可变对象,在函数体的修改不会影响实参的值 arg1的修改为100,不会影响n1的值
如果是可变对象,在函数体的修改会影响到实参的值,arg2的修改,append(10),会影响到N2的值'''
函数返回多个值时,结果为元组
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dgkzGjg0-1650767051607)(/Users/fanxuanhan/Library/Application Support/typora-user-images/image-20220416180849347.png)]
def fun(num):
odd=[ ] #存奇数
even=[ ] #存偶数
for i in num:
if i%2==0:
odd.append(i)
else:
even.append(i)
return odd,even
#函数的调用
lst=[16,29,23,52,53,55,408]
print(fun(lst))
'''
函数的返回值
(1)如果函数没有返回值【函数执行完毕之后,不需要给调用处提供数据】 return可以省略不写
(2)函数的返回值,如果是1个,直接返回类型
(3)函数的返回值,如果是多个,返回的结果为元组
'''
def fun1():
print('hello')
#return
fun1()
def fun2():
return 'hello'
res=fun2()
print(res)
def fun3():
return 'hello','world'
print(fun3())
'''函数在定义时,是否需要返回值视情况而定'''
def fun(a,b=10): #b称为默认值参数
print(a,b)
#函数的调用
fun(100)
fun(20,30)
print('hello',end='\t')
print('world')
def fun(*args):#函数定义时的可变的位置参数
print(args)
#print(args[0])
fun(10)
fun(10,30)
fun(30,408,50)
def fun1(**args):
print(args)
fun1(a=10)
fun1(a=20,b=30,c=40)
print('hello','world','java')
'''def fun2(*args,*a):
pass
以上代码会报错,个数可变的位置参数,只能是1个
def fun2(**args,**args):
pass
以上代码会报错,个数可变的关键字参数,只能是1个'''
def fun2(*arg1,**arg2):
pass
'''
def fun3(**args1,*arg2):
pass
在一个函数的定义过程中,既有个数可变的关键字形参,也有个数可变的位置形参,要求,个数可变的位置形参,放在个数可变的关键字形参之前
'''
def fun(a,b,c):#a,b,c 在函数的定义处,所以是形式参数
print('a=',a)
print('b=',b)
print('c=',c)
#函数的调用
fun(10,20,30)#函数调用时参数传递,称为位置传参
lst=[11,22,33]
fun(*lst)#在函数调用时,将列表中的每个元素都转换为位置实参传入
print('------------------')
fun(a=100,c=300,b=200)#函数的调用,所以是关键字实参
dic={'a':111,'b':222,'c':333}
fun(**dic)#在函数调用时,将字典中的键值对转换为关键字实参传入
def fun(a,b=10): #b是在函数的定义处,所以b是形参,而且进行了赋值,所以b称为默认值形参
print('a=',a)
print('b=',b)
def fun2(*args):#个数可变的位置形参
print(args)
def fun3(**args2):#个数可变的关键字形参
print(args2)
fun2(10,20,30,408,52)
fun3(a=11,b=22,c=33,d=44,e=55)
def fun4(a,b,*,c,d):#从*之后的参数,在函数调用时,只能采用关键字传递
print('a=',a)
print('b=',b)
print('c=',c)
print('d=',d)
#调用fun4函数
#fun4(10,20,30,40)#位置实参传递
fun4(a=10,b=20,c=30,d=40)#关键字实参传递
fun4(10,20,c=30,d=40)#前两个参数,采用的是位置实参传递,而c,d采用的是关键字实参传递
'''需求,c,d只能采用关键字实参传递'''
#函数定义时的形参的顺序问题
def fun5(a,b,*,c,d,**args):
pass
def fun6(*args,**args2):
pass
def fun7(a,b=10,*args,**arg2):
pass
def fun(a,b):
c=a+b #c,就称为局部变量,因为c在函数体内进行定义的变量,a,b为函数的形参,作用范围也是函数内部,相当于局部变量
print(c)
#print(c),因为a,c超出了起作用的范围(超出了作用域)
#print(a)
name='周杰伦'
print(name)
def fun2():
print(name)
#调用函数
fun2()
def fun3():
global age #函数内部din
age=20
print(age)
fun3()
print(age)
使用递归来计算阶乘
def fac(n):
if n==1:
return 1
else:
return n*fac(n-1)
print(fac(6))
def fib(n):
if n==1:
return 1
elif n==2:
return 1
else:
return fib(n-1)+fib(n-2)
print('-----------------------------')
#斐波那契数列第6位上的数字
print(fib(6))
print('-----------------------------')
for i in range(1,7):
print(fib(i))
世界上第一部万用计算机的进化版-马克2号(Mark II)
Debug
age=input('input your age:')
print(type(age))
if int(age)>=18:
print('adult')
i=0
while i<10:
print(i)
i+=1
粗心导致错误的自查宝典
漏了末尾的冒号,如if语句,循环语句,else子句等
缩进错误,该缩进的没缩进,不该缩进的瞎缩进
把英文符号写成中文符号,比如说:引号,冒号,括号
字符串拼接的时候,把字符串和数字拼在一起
没有定义变量,比如while的循环条件的变量
“==”比较运算符和“=”赋值运算符的混用
知识不熟练导致的错误
索引越界问题IndexError
lst=[11,22,33,44]
Print(lst[4])
Append()方法的使用掌握不熟练
lst=[]
lst=append(‘A’,‘B’,‘C’)
Print(lst)
lst=[11,22,33,44]#列表的索引是从0开始
#print(lst[4])
print(lst[3])
lst=[]
#lst=append('A','B','C')
lst.append('A')
lst.append('B')
lst.append('C')
print(lst)
被动掉坑解决方案
Python提供了异常处理机制,可以在异常出现时即时捕获,然后内部“消失化”,让程序继续运行
try:
a=int(input('请输入第一个整数:'))
b = int(input('请输入第二个整数:'))
result=a/b
print('结果为',result)
except ZeroDivisionError:
print('对不起,除数不允许为0')
print('程序结束')
多个except结构
try:
a=int(input('请输入第一个整数:'))
b = int(input('请输入第二个整数:'))
result=a/b
print('结果为',result)
except ZeroDivisionError:
print('对不起,除数不允许为0')
except ValueError:
print('只能输入数字串')
print('程序结束')
try…except…else结构
try:
a=int(input('请输入第一个整数:'))
b=int(input('请输入第一个整数:'))
result=a/b
except BaseException as e:
print('出错了',e)
else:
print('计算结果为:',result)
try…except…else结构
#print(10/0)#ZeroDivisionError
lst=[11,22,33,44]
#print(lst[4])#IndexError
dic={'name':'张三','age':20}
#print(dic['gener'])#KeyError
#print(num)#NameError
#int a=20 #SyntaxError
#a=int('hello')#ValueError
#print(10/0)
import traceback
try:
print('------------')
print(1/0)
except:
traceback.print_exc()
类别,分门别类,物以类聚,人类,鸟类,动物类,植物类…
类是多个类似事物组成的群体的统称。能够帮助我们快速理解和判断事物的性质
不同的数据类型属于不同的类
使用内置函数查看数据类型–print(type(变量))
100、99、520都是int类之下包含的相似的不同个例,这个个例专业术语称为实例或对象
pass
class Student:#Student为类的名称(类名)由一个或多个单词组成,每个单词的首字母大写,其余小写
pass
#Python中一切皆对象Student是对象吗?内存有开空间吗
print(id(Student))#5073195632
print(type(Student))#
print(Student)#
类属性
实例方法
静态方法
类方法
class Student:#Student为类的名称(类名)由一个或多个单词组成,每个单词的首字母大写,其余小写
native_pace='吉林' #直接写在类里的变量,称为类属性
def__init__(self,name,age):
self.name=name #self.name称为实体属性,进行了一个赋值的操作,将局部变量的name的值赋给实体属性
self.age=age
#实例方法
def eat(self):
print('学生在吃饭...')
#静态方法
@staticmethod
def method():
print('我使用了staticmethod进行修饰,所以我是静态方法')
#类方法
@classmethod
def cm(cls):
print('我是类方法,因为我使用了classmethod进行修饰')