【python基础】第10回 周总结
路径
可以简单的理解为路径就是某个事物所在的具体位置(坐标)
1.相对路径:必须有一个参考系,就是相对于自己的目标文件的位置。
2.绝对路劲:不需要有参考系,是指文件在硬盘上真正存在的路径。
计算机五大组成部分
1.控制器:控制计算机各个硬件的工作
2.运算器:负责数学运算、逻辑运算 是整个计算机的核心所在
3.存储器:负责存取数据,内存,外存
4.输入设备:向计算机内部传递信息
5.输出设备:向计算机外部传递信息
三大核心硬件
1.CPU:中央处理器,是一块超大规模的集成电路,负责处理数据/计算(负责干活的)
2.内存:存储数据(断电之后,数据会消失),速度快,空间小
3.外存(硬盘):永久存储数据,速度慢,空间大
python语法之注释
1. # 注释内容
2. '''注释内容'''
3."""注释内容"""
变量与常量
1.变量:变量就是可以变化的量,量指的是事物的状态,比如人的年龄、性别,游戏角色的等级、金钱等等
2.常量:常量指在程序运行过程中不会改变的量,比如圆周率 3.141592653...
数据类型
1.整型 (int):整型数据只用来表示整数,不包含小数部分的数据值类型
2.浮点型(float):浮点型就是小数
3.字符串(str):描述性性质的信息,使用('内容',"内容",'''内容''',"""内容"""来创建字符串。
4.列表(list):能够存储多个数据 并且能够方便的获取整体或者局部,中括号括起来 内部可以存放多个数据值 数据值与数据值用逗号隔开数据值可以是任意数据类型
5.字典(dict):能够存储多个数据 并且能够方便的获取整体或者局部 并且数据具有对于解释大括号括起来 内部可以存放多个数据 数据的组织形式是K:V键值对(无序)
6.元组(tuple):能够存储多个数据 并且能够方便的获取整体或者局部,小括号括起来 内存可以存放多个数据值 数据值与数据值之间逗号隔开数据值可以是任意数据类型
7.集合(set):集合只用于去重和关系运算,去重:自动去除重复的数据,关系运算:判断两个集合之间数据的关系(无序)
8.布尔值(bool):用来表示事物是否可行 是否正确 是否合理,布尔值为False的数据有,0 None 空字符串 空列表 空字典 ...除上述之外所有的数据对于的布尔值都是True
与用户交换
1.输入:向计算机传递信息,input() # 获取用户输入
2.输出:计算机向外界输出信息,print() # 打印数据值
格式化输出
1.占位符:%s: 支持所有数据类型替换 (以后我们使用最多的就是%s),%d: 只支持给数字占位
运算符
1.算数运算符:+ - * / % // **
2.比较运算符:== != < > >= <=
3.赋值运算符:+= -= *= %= ......,链式赋值 x=y=z=10 ,交叉赋值 m n = n m ,解压赋值 a, *args = [1, 2, 3, 4, 5]
4.逻辑运算符:逻辑运算符用于连接多个条件,进行关联判断,会返回布尔值True或False
and (与)链接的多个条件必须都成立结果才成立(True)
or (或)链接的多个条件有一个成立结果就成立(True)
not (非)将条件取反(原本是对的就变成错的 如果是错的就变成对的)
优先级先看括号里(),无括号,not>and>or 两边都不为0的情况 or 直接取前面的值 and 直接取后面的值,如果存在0的情况 and 直接取0 or 直接取非05.成员运算符:in 在什么什么之内 ,not in 不在什么什么之内
6.身份运算符:is 判断数据值的内存地址是否一致,== 判断数据值得值是否一致 地址无所谓,id() 该方法会返回一串数字 相当于内存地址
流程控制
本质就是事物的执行流程 事物的执行流程总共就三种,顺序结构,分支结构,循环结构
1.顺序结构:从上往下依次执行,之前我们写的代码都是顺序结构
2.分支结构:根据条件的不同执行不同的代码,用到if判断
单if分支:if 条件
条件成立执行执行的代码(子代码) # 条件可以是布尔值 也可以是表达式,判断的条件可以是一个 也可以是有逻辑运算符连接的多个
if...else分支:if 条件:
条件成立之后执行的子代码
else:
条件成立之后执行的子代码 # 判断的条件可以是一个 也可以是由逻辑运算符连接的多个
if...elif...else分支:if 条件1:
条件1成立执行的子代码
elif 条件2:
条件1不成立 条件2成立执行的子代码
elif 条件3:条件1和2都不成立
条件3成立执行的子代码
else:上述所有的条件都不成立执行的子代码
# if elif else三者连用 永远只会走一个分支,elif 和 else都不能单独使用 必须结合if
if的嵌套:if 条件1:
if 条件2:
else:
else:
3.循环结构:根据条件的判断绝对是否一直做某件事,用到while与for 在取值中 for 比 while 更简洁
while
2.子代码运行完毕之后 再次回到while后面的条件判断处 判断条件是否成立
3.如果成立则继续运行子代码 完毕后再次判断while后面的条件是否成立
4.依次往复 直到条件不成立才会结束
1.自己写结束条件 利用while后面的条件判断
2.在循环体代码中添加关键字强制结束
在python2中有两个
range() :直接产生一个列表 当数据量很大的时候可能会造成内存溢出(爆满)
xrange():就是python3里面的range方法
在python3中只有一个
range()类似于是一个工厂 什么时候要什么时候创建给你 节省内存
数据类型的内置方法
数据类型是用来记录事物状态的,而事物的状态是不断变化的(如:一个人年龄的增长(操作int类型),单个人名的修改(操作str)类型,学生列表中增加学生(操作list类型)等),这意味着我们在开发程序时需要频繁对数据进行操作,为了提升我们的开发效率,python针对这些常用的操作,为每一种数据类型内置了一系列方法。内置方法可以简单的理解成是每个数据类型自带的功能
使用数据类型的内置方法统一采用句号符:数据类型,方法名()
1.整型相关方法
关键字 int() 整型就是整数 主要用于计算 没有内置方法
print(type(int('123'))) # 字符串 内部是纯数字情况 可以转换 print(type(int('12a11'))) # 字符串里面必须是纯数字才可以转换 print(type(int('12.12'))) # 小数点也不行 # 十进制转换其他进制 如果数字前面没有任何标识 默认就是十进制 print(bin(50)) # bin() 将十进制转二进制 0b110010 0b是二进制的标识 print(oct(50)) # oct() 将十进制转八进制 0o62 0o是八进制数的标识 print(hex(50)) # hex() 将十进制转换十六进制 0x32 0x是十六进制的标识 # 其他进制转十进制 # 自动识别进制数 print(int(0b110010)) # 50 print(int(0o62)) # 50 print(int(0x32)) # 50 # 人为识别进制数 print(int('0b110010', 2)) # 50 print(int('0o62', 8)) # 50 print(int('0x32', 16)) # 50
2.浮点型相关方法
关键字 float
print(float('123')) # 123.0 print(type(float('123'))) # float print(float('12.12')) # 只可以识别一个小数点 print(float('12a12')) # 不可以 print(float('12.12.12')) # 不可以
3.布尔值相关方法
关键字bool 没有特殊说明的情况下 1 对应 True 0 对应 Float
print(float(True)) # 1.0 print(float(False)) # 0.0 print(int(True)) # 1 print(int(False)) # 0
4.字符串相关方法
关键字str 类型转换:兼容所有数据值
索引取值:单个字符 支持负数
切片取值:多个字符 支持负数 切片的顺序默认从左到右
s1 = 'hello world' print(s1[0:3]) # hel 从索引0的位置开始切到索引2的位置 顾头不顾尾 print(s1[-1:-3]) # 切片的顺序默认从左到右 所以返回为空 print(s1[-1:-3:-1]) # dl 可以通过第三个参数的正负一 控制方向 print(s1[-3:-1]) # rl 顾头不顾尾
间隔/方向:
print(s1[:]) # hello world 所以 print(s1[::]) # hello world 针对整个字符串 隔一个取一个 print(s1[0:5:1]) # hello 默认1可以不写 print(s1[0:5:2]) # hlo 间隔取一个
统计字符串中字符的个数 len
print(len('hello world')) # 可以看见字母只有十个 而结果是11 空格也算字符串
移除字符串首尾指导的字符 strip
# 移除字符串首尾指导(空格)的字符 中间不能 # 用于用户登录功能,输入时打空格
按照指定的字符切割字符串 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']
字符串大小写相关 lower 小写 upper 大写
s2 = 'HeLLo Big BAby 666 你过的还好吗' print(s2.lower()) # hello big baby 666 你过的还好吗 print(s2.upper()) # HELLO BIG BABY 666 你过的还好吗 print(s2.islower()) # 判断字符串中所有的字母是否是全小写 False print(s2.isupper()) # 判断字符串中所有的字母是否是全大写 False print('aaa'.islower()) # True print('AAA'.isupper()) # True
字符串的格式话输出 format
# 方式1: %s 占位 没有什么优势 rest = 'my name is {} my age is {}' print(rest.format('zhang', 21)) # my name is zhang my age is 21 # 方式2: 支持索引取值 并且支持重复使用 rest2 = 'my name is {0} my age is {1}' print(rest2.format('zhang', 21)) # my name is zhang my age is 21 rest2 = 'my name is {0} my age is {1} {0} {1} {1}' print(rest2.format('zhang', 21)) # my name is zhang my age is 21 zhang 21 21 # 方式3: 支持关键字取值(按k 取值) 并且支持重复使用 rest3 = 'my name is {name} my age is {age}' print(rest3.format(name='zhang', age=12)) # my name is zhang my age is 12 rest3 = 'my name is {name} my age is {age} {name} {age}' print(rest3.format(name='zhang', age=12)) # my name is zhang my age is 12 zhang 12 # 方式4 重要 定义变量 f 打印 name = 'zhang' age = 12 print(f'my name is {name} my age is {age}') # my name is zhang my age is 12 print(f'my name is {name} {name} my age is {age} {age}') # my name is zhang zhang my age is 12 12
统计字符串中指定字符出现的次数 count
rest = 'zafhkjavbuqgiufqkjbckjbzbciuzzhfliuqhajbjb' print(rest.count('z')) # 4 print(rest.count('jb')) # 4
判断字符串的开头或者结尾 startswith开头 endswith结尾
rest = 'my name is zhang my age is 12' print(rest.startswith('my')) # True print(rest.startswith('m')) # True print(rest.startswith('a')) # False print(rest.endswith('2')) # True print(rest.endswith('12')) # True print(rest.endswith('e')) # False
字符串的替换 replace
rest = 'zhang zhnag zhang 12 21 12 21' print(rest.replace('zhang', 'zzz')) # zzz zhnag zzz 12 21 12 21 print(rest.replace('12', '21')) # 从左往右全部替换 # zhang zhnag zhang 21 21 21 21 print(rest.replace('zhang', 'zzz', 1)) # 从左往右替换指定个数 # zzz zhnag zhang 12 21 12 21
字符串的拼接 join
rest1 = 'hello' rest2 = 'world' print(rest1 + rest2) # 字符串支持加号拼接 # helloworld print(rest1 * 3) # 字符串支持乘号拼接 # hellohellohello print(''.join(['hello', 'world', 'hhh'])) # join方法拼接 # helloworldhhh print('|'.join(['hello', 'world', 'hhh'])) # join方法拼接 #hello|world|hhh print('$'.join(['hello', 'world', 11])) # 列表中的数据都必须是字符串类型 报错!!
判断字符串中是否是纯数字 isdigit
print('123'.isdigit()) # Ture print('123a'.isdigit()) # False print(''.isdigit()) # False
查找某个字符对应的索引值 index find
rest = 'hello world' print(rest.index('w')) # 6 print(rest.find('w')) # 6 index查找索引 如果没有则报错 print(rest.index('d', 0, 5)) '''find 查找索引 如果没有则返回 -1 ,-1 表示没有,出错,不能执行''' print(rest.find('d', 0, 5))
正文相关操作 开头首字母大写 title 首字母大写 capitalize
rest = 'my name is zhang' print(rest.title()) # 表示每个单词的首字母都大写 # My Name Is Zhang print(rest.capitalize()) # 表示一句话的单词首字母大 # My name is zhang
5.列表的相关方法
关键字list 能够被for 循环的数据类型都可以装换成列表
索引取值
l1 = ['zhang', 'li', 'wang', 'liu'] # 1.索引取值 print(l1[1]) # li print(l1[-1]) # liu
切片操作
print(l1[0:3]) # ['zhang', 'li', 'wang'] print(l1[:]) # ['zhang', 'li', 'wang', 'liu'] print(l1[-3:-1]) # ['li', 'wang']
间隔方向
print(l1[::2]) # ['zhang', 'wang']
统计列表中数据值的个数
print(len(l1)) # 4