第二周学习笔记总结
今日内容概要
- 基本数据类型及常用方法及内置方法
- 用户交互与运算符
- 流程控制
今日内容详细
基本数据类型及常用方法及内置方法
1.可变类型与不可变类型
1.可变类型:值改变,但是id不变,证明就是在改变原值,是可变类型
2.不可变类型:值改变,但是id也跟着变,证明是产生了新值,是不可变类型
2.数字类型常用方法
1.整型int
基本使用
1.1用途:记录年龄,等级,数量等
1.2定义:
age = 10 # age=int(10)
数据类型转换: 只能将纯数字的字符串转成int
核心语法:直接写整数即可
2.浮点型float
基本使用
2.1用途:记录薪资,身高,体重等
2.2定义:
height = 178.5 # height=float(178.5)
数据类型转换: 只能将包含小数的字符串转成float
核心语法:直接写小数即可
该类型总结
存一个值且不可变
3.字符串常用方法
基本使用
1.用途:记录描述性质的状态
2、定义方式:在单引号、双引号、三引号内包含一串字符串
name = 'jason'
addr = "上海"
hobby = '''读书\写字'''
info = """你们好呀 准备好起飞了吗"""
数据类型转换:所有类型都可以被str转成字符串类型
核心语法:引号引起来的部分
3、常用操作+内置的方法
3.1索引取值:单个字符,支持负数
s1 = 'hello jason!'
print(s1[0]) # h
print(s1[-1]) # !
print(s1[-2]) # n
3.2切片取值:多个字符,支持负数,切片的顺序默认从左往右
s1 = 'hello jason!'
print(s1[0:3]) # hel 从索引0的位置开始切到索引2的位置 顾头不顾尾
print(s1[-1:-4]) # 切片的顺序默认从左往右
print(s1[-1:-4:-1]) # !no 可以通过第三个参数的正负一 控制方向
print(s1[-4:-1]) # son 顾头不顾尾
3.3间隔/方向
s1 = 'hello jason!'
print(s1[:]) # 所有
print(s1[::2]) # 针对整个字符串 隔一个取一个
print(s1[0:5:1]) # hello 默认1可以不写
print(s1[0:5:2]) # hlo
3.4统计字符串中字符的个数(长度)
print(len('hello jason!')) # 12 空格也算字符
3.5移除 空白strip: 用来去除字符串左右两边的字符,如果不指定字符默认去除的是空格
name = ' jason '
res = name.strip()
print(name, len(name)) # jason 9
print(res, len(res)) # jason 5
字符串调用内置方法 不是改变原数据 而是产生了新的数据
3.6切分split:针对有规律的字符串,按照某种分隔符切成列表
info = 'jason|123|read'
res = info.split('|') # 切割字符串之后结果是一个列表
print(res, type(res)) # ['jason', '123', 'read'] <class 'list'>
name, pwd, hobby = info.split('|') # name, pwd, hobby = ['jason', '123', 'read']
print(info.split('|', maxsplit=1)) # 从左往右 只切一次 ['jason', '123|read']
print(info.rsplit('|', maxsplit=1)) # 从右往左 只切一次 ['jason|123', 'read']
用join方法把特殊的符号作为连接符号将纯字符串的列表拼接成一个字符串
res1 = 'hello'
res2 = 'world'
print(res1 + res2) # 字符串支持加号拼接
print(res1 * 10) # 字符串支持乘号重复
print(''.join(['hello', 'world', 'hahaha'])) # join方法拼接
print('|'.join(['hello', 'world', 'hahaha'])) # join方法拼接
print('$'.join(['jason', 'say', 666])) # 列表中的数据都必须是字符串类型 报错!!!
输出结果:
helloworld
hellohellohellohellohellohellohellohellohellohello
helloworldhahaha
hello|world|hahaha
报错
3.7成员运算in和not in:判断一个子字符串是否存在于大字符串中
msg='ccc is fff'
print('ccc' in msg)
print('dsb' in msg)
print('aaa' not in msg)
print(not 'aaa' in msg)
需要掌握
1、strip,lstrip,rstrip
desc1 = '$$jason$$'
print(desc1.strip('$')) # jason
print(desc1.lstrip('$')) # jason$$ left 左消除
print(desc1.rstrip('$')) # $$jason right 右消除
2、lower,upper
s2 = 'HeLLo Big BAby 666 你过的还好吗'
print(s2.lower()) # hello big baby 666 你过的还好吗
print(s2.upper()) # HELLO BIG BABY 666 你过的还好吗
3、startswith,endswith
msg='peter is boy'
print(msg.startswith('peter'))判断是不是某个字符串开始
print(msg.endswith('b'))判断是不是某个字符串结尾
4、format字符串的格式化输出
方式1: 等价于%s占位 没有什么优势
res1 = 'my name is {} my age is {}'
print(res1.format('jason', 18))
输出结果:
my name is jason my age is 18
方式2: 支持索引取值 并且支持重复使用
res2 = 'my name is {0} my age is {1} {0} {1} {1} {1}'
print(res2.format('jason', 18))
输出结果:
my name is jason my age is 18 jason 18 18 18
方式3: 支持关键字取值(按k取值) 并且支持重复使用
res3 = '{name} {name} {age} my name is {name} my age is {age}'
print(res3.format(name='jason', age=18))
输出结果:
jason jason 18 my name is jason my age is 18
方式4:推荐使用(******)
name = 'jason'
age = 18
print(f'my name is {name} my age is {age} {name} {age}')
输出结果:
my name is jason my age is 18 jason 18
了解
5.count
res = 'sdashdjasdwjjkashdjasdjqwhasjdjahdjwqhdjkasdhwsdaadadadadad'
print(res.count('j'))
print(res.count('ad'))
输出结果:
9
5
6.replace代替,把字符串内的字符进行替换
res = 'jason jason jason SB SB SB'
print(res.replace('jason', 'tony')) # 从左往右全部替换
print(res.replace('jason', 'tony', 1)) # 从左往右替换指定个数
输出结果:
tony tony tony SB SB SB
tony jason jason SB SB SB
7.isdigit
print('123'.isdigit()) # True
print('123a'.isdigit()) # False
print(''.isdigit()) # False
8.find,index
res = 'hello world jason'
print(res.index('d')) # 10
print(res.find('d')) # 10
'''index查找索引 如果没有则报错'''
print(res.index('d',0,5))
'''find查找索引 如果没有则返回-1'''
print(res.find('d',0,5)) # -1
该类型总结
字符串类型只存一个值而且是有序,字符串的值是不可以改变的
4.列表常用方法
基本使用
1、用途:按照位置记录多个值,索引对应值
2、定义方式:在[]内用逗号分隔开多个任意类型的值
l=['a',11,11.3,] # l=list(['a',11,11.3,])
数据类型转换:但凡能够被for循环遍历的数据类型都可以传给list,被其转换成列表
3.常用操作+内置的方法
3.1、按索引存取值(正向存取+反向存取):即可存也可以取
l1 = ['jason', 'kevin', 'oscar', 'tony']
print(l1[0])
print(l1[-1])
输出结果:
jason
tony
3.2、切片(顾头不顾尾,步长)
l1 = ['jason', 'kevin', 'oscar', 'tony']
print(l1[0:3])
print(l1[:])
print(l1[-4:-1])
输出结果:
['jason', 'kevin', 'oscar']
['jason', 'kevin', 'oscar', 'tony']
['jason', 'kevin', 'oscar']
3.3间隔/方向
l1 = ['jason', 'kevin', 'oscar', 'tony']
print(l1[::2])
输出结果:
['jason', 'oscar']
3.4统计列表中数据值的个数(长度)
l1 = ['jason', 'kevin', 'oscar', 'tony']
print(len(l1)) # 4
5.字典常用方法
1、用途:按照位置记录多个值,索引对应值,并且对于值具有解释
2、定义方式:在{}内用逗号分隔开多个任意类型的值,值的组织形式是K:V键值对
K是对V的描述性性质的信息,一般是字符串
V是真实的数据值,可以是任意数据类型
info_dict = {'姓名': 'jason', '年龄': 18, '爱好': 'read'}
6.布尔值常用方法
1、用途:用来表示事物是否可行,是否正确,是否合理
总共就两个值
2、定义方式:存储布尔值的名字一般使用is开头 # 君子协定
is_right = True # 真 可以 正确
is_delete = False # 假 不可以 错误
数据类型转换:程序中所有的数据类型都可以转成布尔值
7.元组常用方法
1.用途:一般用于存储一些只能看不能改的数据
2.定义方式:在()内用逗号分隔开多个任意类型的值
t1 = (111, 222, 333)
与列表的区别在于元组内数据值不能"直接修改" 而列表可以
8.集合常用方法
1.用途:集合只用于去重和关系运算
去重:自动去除重复的数据
关系运算:判断两个集合之间数据的关系(共同好友 共同点赞)
2.基本使用
s1 = {1, 2, 3, 4, 5}
用户交互与运算符
1.输入
向计算机传递信息
input() # 获取用户输入
name = input('请输入您的用户名>>>:')
"""
1.先获取用户输入的数据
2.再赋值给左边的名字name
3.之后就可以通过名字name反复的使用用户输入的数据
"""
print(name)
input获取到的用户输入都会转成字符串类型
2.输出
计算机向外界输出信息
print() # 打印数据值
print(123) # 括号内可以直接放数据值
name = 'jasen'
print(name) # 括号内也可以放名字
print(123,321,323) # 括号内也可以一次性打印多个值
print(name1,name2,name3,name4)
print(123,name,3333,name1)
3.格式化输出
1.定义
把一段字符串里面的某些内容替换掉之后再输出,就是格式化输出。
2.如何格式化输出
%s占位符:可以接收任意类型的值
%d占位符:只能接收数字
print('亲爱的%s你好!你%s月的话费是%d,余额是%d' %('tony',12,103,11))
亲爱的tony你好!你12月的话费是103,余额是11
4.基本运算符
1.算数运算符
加+
减-
乘*
除/
整除 //
取模 %
幂指数 **(次方)
2.比较运算符
==等于
!= 不等于
3.赋值运算符
python语法中除了有=号这种简单的赋值运算外,还支持增量赋值、链式赋值、交叉赋值、解压赋值,这些赋值运算符存在的意义都是为了让我们的代码看起来更加精简
3.1链式赋值
链式赋值是用一行语句将多个变量赋值为同一个值
3.2交叉赋值
将两个变量互换赋值
3.3解压赋值
可迭代序列或者可迭代对象解压后赋值给多个变量
"""变量的数量必须和序列元素的数量一样多"""
4.逻辑运算符
and 与
or 或
not 非
上述三个运算符都是用来配合条件一起使用
and链接的多个条件必须都成立结果才成立(True),两个为真才为真
or链接的多个条件有一个成立结果就成立(True),两个为假才为假
not将条件取反(原本是对的就变成错的,如果是错的多就变成对的),真变假,假变真
5.成员运算符
in 在什么什么之内
not in 不在什么什么之内
6.身份运算符
is 判断数据值的内存地址是否一致
== 判断数据值得值是否一致,地址无所谓
l1 = [11, 22, 33, 44]
l2 = [11, 22, 33, 44]
print(id(l1)) # 2768135836544
print(id(l2)) # 2768135831424
print(l1 == l2) # True 只判断值
print(l1 is l2) # False 判断内存地址
值相等 内存地址可能不等
内存地址相等 值肯定相等(单次程序中)
流程控制
1.流程控制理论
流程控制的概念
本质就是事物的执行流程,事物的执行流程总共就三种
1.顺序结构:就是让程序按照从头到尾的顺序依次执行每一条 Python 代码,不重复执行任何代码,也不跳过任何代码
2.分支结构:就是让程序“拐弯”,有选择性的执行代码;换句话说,可以跳过没用的代码,只执行有用的代码
3.循环结构:就是让程序“杀个回马枪”,不断地重复执行同一段代码
2.分支结构
1.单if分支
if条件:条件成立执行执行的代码(子代码)
条件可以是布尔值,也可以是表达式
判断的条件可以是一个,也可以是由逻辑运算符连接的多个
2.if...else分支
if条件:条件成立之后执行的子代码
else:条件不成立执行的子代码
判断的条件可以是一个,也可以是由逻辑运算符连接的多个
3.if...else...else分支
if 条件1:
条件1成立执行的子代码
elif 条件2:
条件1不成立,条件2成立执行的子代码
elif 条件3:
条件1和2都不成立,条件3成立执行的子代码
else:
上述所有的条件都不成立执行的子代码
if elif else三者连用,永远只会走一个分支
elif 和 else都不能单独使用,必须结合if
4.if的嵌套使用
循环结构
1.while循环
while 条件:
条件成立之后循环执行的子代码
1.先判断while后面的条件是否成立 如果成立则执行子代码
2.子代码运行完毕之后 再次回到while后面的条件判断处 判断条件是否成立
3.如果成立则继续运行子代码 完毕后再次判断while后面的条件是否成立
4.依次往复 直到条件不成立才会结束
while+break
结束循环体的方式
1.自己写结束条件 利用while后面的条件判断
2.在循环体代码中添加关键字强制结束
break:直接结束break所在的循环体 (结束本层循环),只能结束它所在那一层的循环体代码
while+continue
continue 结束本次循环 直接开始下一次循环(也只影响所在的那一层循环而已)
continue 语句是一个删除的效果,他的存在是为了删除满足循环条件下的某些不需要的成分
continue 语句跳出本次循环,而break跳出整个循环
while+else
当while循环正常执行完的情况下,执行else输出,如果while循环中执行了跳出循环的语句,比如break,将不执行else代码块内的内容
2.for循环
for循环能够做到的事情while循环都可以做到
但是for循环的语法结构更加简单,尤其擅长循环取值
for循环的语法结构
for 变量名 in 可迭代对象: 字符串,列表,字典,元组
for 循环的循环体代码
如果带取值的数据由明确的指向,最好见名知意
如果没有明确的指向,可以使用常见的字母
range方法
range可以看成是一个能够帮助我们快速产生一个包含多个数据值的列表
如果括号内只有一个数字,那么就是从0开始到数字减一结束(顾头不顾尾 左包含右不包含)
括号内有两个数字,第一个是起始位置(包含),第二个是终止位置(不含)
括号内有三个数字,最后一个是数据的间隔数(等差数列)
range方法在不同版本中的作用
在python2中有两个
range()
直接产生一个列表 当数据量很大的时候可能会造成内存溢出(爆满)
xrange()
其实就是python3里面的range方法
在python3中只有一个
range()
类似于是一个工厂 什么时候要什么时候创建给你 节省内存
range方法实操
网络爬虫:python代码模拟网络请求获取数据,很多网址的数据都不止一页,所以有时候需要通过代码模拟
for+break
break能够结束所在的那一层for循环
for+continue
continue能够结束所在的那一次for循环,直接开始下一次
for+else
else配合for一起使用,当for循环没有被强制结束的情况下,循环体结束之后运行else子代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了