本篇学习笔记照片摘自哔哩哔哩up主Python_子木,原视频链接0.前言相关介绍_哔哩哔哩_bilibili侵删
前两章
print和fp
print 直接输出数字,加'' 或者 "" 或 "''"输出字符和字符串
还可以输出表达式,如1+2
将数据输出到文件中
fp=open('D:/text.txt','a+')//a+若没有则新建,存在就继续追加
printf('hello world',file=fp)
fp,close()
print('hello','world','pthon')
转义字符
\n换行
\t空出四个空格。实际是每四个为一个\t,若前方有,则\t会补完剩下的空格
\r回车,会覆盖\r前方的输出
\b退一个格,即吃掉\b之前的一个
\在输出内容中有''时,加个\表示提示'不是字符串的边界,二是应当输出的内容
原字符:r R在'"之前使用,不希望字符串中转义字符起作用
最后一个字符不能是\但可以使两个\\
保留字和标识符
import keyword
print(keyword.kwlist)
这些是Python保留字,即不可使用这些词命名对象
标识符即起的名字
变量
例:
name = '马丽亚'
print(name)
print('标识',id(name))
print('类型',type(name))
print('值',name)
name = 'ss' #可修改
数据类型
int类型
Python默认输出十进制
print(118)
print(0b10101111)
print(0o176)
print(0x1EAF)
结果为
float类型
a-3.14159
print(a,type(a))
n1 = 1.1
n2 = 2.2
print(n1+n2)
结果为
此结果存在误差,需要导入’from decimal import Decimal'
from decimal import Decimal
print(Decimal('1.1')+Decimal('2.2'))
即可正确输出’3.3‘
bool类型
f1 = True
f2 = False
print(f1,type(f1))
print(f2,type(f2))
print(f1+1)
print(f2+1)
结果为
字符串类型
数据类型转换
name = '张三'
age = 20
print('我叫'+name+',今年'+str(age)+'岁')
结果便为“我叫张三,今年20岁”
当将str类型和int类型连接的时候系统会报错,所以只要用str()将int转成str类型即可
int()转str时,字符串只能为整数数字串
注释
三
input
切记input得到的是str类型,要进行数字间的运算需要先转换数据类型
运算符
算术运算符
关于整除
在正数负数运算时,向下取整。
例:
- 9//4=2
- 9//-4=-3
- -9//4=-3
关于余数
赋值运算符
类比C语言~~~
比较运算符
is和is not
print(a is not b) #a的id和b的id是不相等的吗
#结果输出的便是true或者FALSE
布尔运算符
位运算符
运算优先级
四
对象的布尔值
分支结构
和C语言差不多
num = int(input('请输入一个整数'))
if num>1000
print('有钱')
else if num>=100 and num<=1000
print('能活下去')
else
print('吃土')
#下面是新的
num1 = int(input('请输入第一个数'))
num2 = int(input('请输入第二个数'))
print((num1,'大于等于',num2) if num1>= num2 else (num1,'小于',num2))
print(str(num1)+'小于等于'+str(num2) if num1>= num2 else str(num1)+'小于'+str(num2))
##两种表达结果一样
pass
字面意思,跳过
在if等语句中使用
五
内置函数range()
a = range(1,10,2)
print(list(a)) #list为列表的意思,用于查看range对象中的整数序列
#结果为[1,3,5,7,9]
print(9 in a) #结果为true
print(9 not in a) #结果为false
循环结构
while循环
和C语言差不多~~~
a = 1
while a<10
print(a)
a+=2
for-in循环
例
for item in 'python'
print(item)
for i in range(10)
for _ in range(5)
#不使用自定义变量
结果
break、continue
else不仅可以和if连用,还可以与while、for连用
嵌套循环
同C语言
六、列表
列表创建
1.直接创建
list = ['hello','world',2023]
2.list()创建
list = list(['hello','world','2023'])
列表特点
列表查询操作
list = ['hello','world',2023]
print(list[2]) #即为2023
print(list[-1]) #即为2023
列表中也可以使用in 和not in 来判断某数据是否在列表中
for-in 也可以遍历列表中的内容
列表增删改
列表增加
list = [1,2,3]
list,append(10) #list = [1,2,3,10]
list2 = ['hello','world']
list,extend(list2) #list = [1,2,3,10,'hello','world']
list,insert(1,9) #list = [1,9,2,3,10,'hello','world']
切片
list3 = [true,false,'hello']
list[1:]=list3 #list = [1,TRUE,FALSE,'HELLO']
列表的删除
list = [1,2,3,4,5,6,3]
list.remove(3) #list = [1,2,4,5,6,3]
list.pop(1) #list = [1,4,5,6,3]
#切片
new_list = list[1:3]
#list = [1,4,5,6,3]
#new_list = [4,5]
list[1:3] = []
#list = [1,6,3]
list.clear()
#list = []
del list
#list无了
列表的修改
list = [1,2,3,4]
list[2] = 10 #list = [1,2,10,4]
list[1:3] = [3,4,5,6] #list = [1,3,4,5,6,4]
列表的排序操作
list = [2,4,3,7,67,1]
list.sort() #list = [1,2,3,4,7,67]
list.sort(reverse=True) #list = [67,7,4,3,2,1]
list.sort(reverse=False) #list = [1,2,3,4,7,67]
list = [2,4,3,7,67,1]
new_list = sorted(list)
#list = [2,4,3,7,67,1] #new_list = [1,2,3,4,7,67]
列表生成式
list = [i for i in range(1,10)] #list = [1,2,3,4,5,6,7,8,9]
list = [i*i for i in range(1,10)] #list = [1,4,9,16.....]
七、字典
字典的概念
字典的创建
score={'张三':100,'李四':98,'王五':45}
#输出的就是{'张三':100,'李四':98,'王五':45}
student=dict(name='jack',age=20)
#输出{'name':'jack','age':20}
#空字典
d={}
字典中元素的获取
score={'张三':100,'李四':98,'王五':45}
print(score['张三'])
#输出100
print(score.get('张三'))
#同样也是100
#两者区别在于,第一种输入字典中没有的数据时会报错,而第二种的话会输出None
print(score.get('陈六',99))
#会输出99
#此99是在查找’陈六‘不存在时输出的默认值
字典的增删改等操作
#关于字典的修改
score['jack']=100
#修改成功
获取字典试图
字典元素的遍历
字典的特点
字典生成式
items=['Fruits','Books','Others']
price=[96,78,85]
d={item:price for item,price in zip(items,prices)}
#输出结果为{'Fruits':96,'Books':78,'Others':85}
d={item.upper():price for item,price in zip(items,prices)}
#结果是元素变成大写
#当两列表元素不对应时,输出对应索引的元素
八、元组
什么是元组
元组创建方式
t=('Python','World',98)
#第一种可删除括号
t1='Pyrhon','World',98
t2=tuple(('Python','World',98))
t3=()
t4=tuple()##空元组
元组中的元素无法更改
t = (10,[20,30],9)
#t[1]=100 这种方式是不被允许的
t[1].append(100) #这种方式是被允许的
#元组中元素类型是不允许被修改的,但是元素中的内容是可被修改的
元组的遍历
九、集合
什么是集合
集合创建方式
集合的相关操作
集合间的关系
集合间的数学操作
集合生成式
函数
函数的定义和调用
def get_sum(num):
s = 0
for i in range(1,num+1):
s += i
print(f'1到{num}之间的累加和为:{s}')
#函数调用
get_sum(10)#1-10之间的累加和
get_sum(100)#1-100之间的累加和
函数的参数传递
#个数可变的位置参数
def fun(*para):
print(type(para))
for item in para:
print(item)
fun(*para:10,20,30,40)
fun(10)
fun([10,20,30,40])#算作一个参数
#在调用时,参数前加一个*将列表进行解包
fun(*[10,20,30,40])#算作拆开后的四个参数
#个数可变的关键字参数
def fun2(**kwpara):
print(type(kwpara))
for key,value in kwpara.items():
print(key,'----',value)
fun2(name = '张三',age = 18,score = 80)
d={'name':'张三','age':18,'score':80}
#字典需要解包
fun2(**d)
函数返回值
def num(a,b):
s=a+b
return s
get_s1=num(1,2)
get_s2=num(num(1,2),3)
print(get_s1,get_s2)
变量的作用域
a=100#全局变量
def num():
...
...
...
匿名函数lambda*
def calc(a,b):
return a+b
print(calc(10,20))
#匿名函数
s=lambda a,b:a+b
#s就是一个匿名函数
print(type(s))
#调用匿名函数
print(s(10,20))
print('-'*10)
list = [10,20,30,40,50]
for i in range(len(list)):
print(list[i])
print('-'*10)
for i in range(len(list)):
result = lambda x:x[i] #根据索引类型,result是函数,x是形式参数
print(result(list)) #list是实际参数
print('-'*10)
student_scores=[
{'name':'张三','age':18,'score':100},
{'name':'李四','age':19,'score':90},
{'name':'王五','age':20,'score':80},
]
#对列表进行排序,排序的规则是成绩
student_scores.sort(key=lambda x:x.get('score'),reverse=True) #降序
#student_scores.sort是排序的意思,key是关键词,关键词使用函数lambda,x是字典,x.get('score)是x取用'score',reverse=True降序
print(student_scores)
递归函数
def fac(n):
if n == 1:
return 1
else:
return n*fac(n-1) #自己调用自己
print(fac(5))
#120
斐波那契数列
def fac(n):
if n==1 or n==2:
return 1
else:
return fac(n-1)+fac(n-2)
常用内置函数
文件
文件的打开与关闭&文件的读写
#open('文件路径','模式')
#w--可写 r--可读
#没有文件就会创建,但无法创建文件夹
open('test.txt','w')
#打开文件并写入东西
fp1 = open('test.txt','w')
fp1.write('hello world')
fp1.close()
#如果文件存在,会先清空原来的数据
#如果模式变成了a就会追加数据
fp2 = open('Demo/test.txt','w')
#Demo是文件夹,需要自己提前创建
fp2.write('hello world\n'*5)
fp2.close()
#每次打开文件后记得关闭,节省内存
fp3 = open('Demo/test.txt','r')
content = fp3.read()
#默认情况下,read是一字节一字节的读,效率较低
print(content)
fp3 = open('Demo/test.txt','r')
content2 = fp3.readline()
#readline是一行一行的读,但是只能读取一行
print(content2)
fp3.close()
fp3 = open('Demo/test.txt','r')
content3 = fp3.readlines()
#readlines 可以读取多行,但是会将所有数据都读取到,并且以一个列表的形式返回
#而列表的数据是一行一行的数据
print(content3)
fp3.close()
序列化和反序列化
通过文件操作我们可以将字符串写入到一个本地文件。但是,如果是一个对象(例如列表,字典,元组等),就无法直接写入一个文件里,需要对这个对象进行序列化,然后才能写入到文件里
设计一套协议,按照某种规则,把内存中的数据转换为字节序列,保存到文件这就是序列化,反之,从文件的字节序列恢复到内存中,这就是反序列化
Python中提供了JSON这个模块来实现数据的序列化和反序列化
序列化的两种操作
# dumps()
fp = open('test.txt','w')
list = ['zhangsan','lisi']
# 导入JSON模块到该文件中
import json
name = json.dumps(list) # 将Python对象变成 JSON字符串
# 我们在使用scrapy框架的时候 该框架会返回一个对象 我们要将对象写入到文件中 就要用json.dumps
print(type(name))
print(name)
#变成了字符串类型,但仍打印成字典
fp.write(name)
fp.close()
# dump
# 在将对象转换为字符串的同时 指定一个文件的对象 然后把转换后的字符串写入到这个文件里
fp = open('test.txt','w')
list = ['zhangsan','lisi']
import json
json.dump(list,fp)
#相当于name = json.dumps(list) 和fp.write(name)
fp.close()
反序列化
# loads
fp = open('test','r')
content = fp.read
import json
# 将json字符串转换为Python对象
result = json.loads(content)
# load
fp = open('test','r')
import json
result = json.load(fp)