1.数字类型(int float bool complex)
小结:
二进制1+1=10
八进制7+1=10
十六进制f+1=10
浮点型简单来说就是表示带有小数的数据,而恰恰小数点可以在相应的二进制的不同位置浮动,可能是这样就被定义成浮点型了。
2.字符串(str)类型
”’
有引号的就是字符串,单引号,双引号,三引号
转义字符\ +字符
(1)可以将无意义的字符变得有意义
(2)可以有意义的字符变得无意义
\n: 换行
\r\n:换行
\t : 缩进(水平制表符) 默认四个空格距离
\r : 将\r 后面的字符串拉到了当选行的行首
”’
python中单引号双引号没有区别 但是在其他语言中有区别
比如说php
r”字符串” 原型化输出字符串
比如说小张买了三个药水 李四买了 四个药水 张三买了五个药水 你会发现 这些话整体来说除了数量在改变 字符串并没有改变
3.列表类型 (list)
定义一个空列表
定义普通列表
获取列表中的元素
在python分为 正向索引和逆向索引
正向索引 (从0开始) 0 1 2 3 4 ……
0 1 2 3 4
-5 -4 -3 -2 -1
逆向索引 (只有python可以)(从-1开始) -1 -2 -3 -4 -5
len() 获取容器类型数据中元素的个数
python逆向索引的特点,瞬间得到列表最后一个索引
修改列表中的元素
4.元组类型(tuple)
特征:只能获取,不可以修改,有序
定义一个元组
获取元组中的元素
正向索引
逆向索引
修改元组中的元素 :元组中的值不能修改
注意点
我们发现下面打印结果并不是元组类型
接下来我们看下一个
我们发现添加个逗号 打印结果是元组类型
总结: 逗号 才是区分是否是元组的标识符
定义空元组
这个打印结果也是元组 但是没加逗号 这是为什么呢 ?
因为里面没有值 是一个空元组
字符串类型 (补充)
”’
特征:可获取,不可修改,有序
”’
正向索引
我们发现 空格和符号都占有一个索引位置
5.集合类型 set(交差并补)
我们打印发现每次的结果都不一样,所以说 集合是 无序的
获取集合中的元素
获取我们发现报错 那是为什么呢?
刚刚说过集合是无序的所以说 没有办法按照索引来获取集合中的元素
接下来再看几行代码
我们打印完发现 原本集合中有两个Sam 却只输出了一个Sam 这说明集合具有 自动去重功能
我们再看看下面的代码 看看可不可以定义 空集合
打印结果报错 显然这样是不可以定义空集合的 ,接下来让我们看看如何定义一个空集合?
打印返回集合类型 定义空集合只需要set+()只有这 一种方法可以创建空集合
总结:
6.字典类型 (dict)
”’
键值对存储的数据
dictvar = {键1:值1,键2:值2,……}
3.6版本之前,完全无序
3.6版本之后,存储的时候,保留了字典定义的字面顺序,在获取内存中的数据时重新按照字面顺序做了排序,所以看起来有序,实际上存储时还是无序。
”’
接下来我们 创建一个字典
获取 字典中的值
修改 字典中的值
定义空 字典
重要: set和 dict 的注意点
”’
字典的键和 集合的值 有数据类型上面的要求:
( 允许的类型范围)不可变的数据类型: Number str tuple
( 不允许的类型)可变的数据类型 : list set dict
字典的键有要求值没有要求
字典的值可以任意换掉,但是键不可以。键就相当于一个人的身份证号
哈希算法的提出目的是让数据尽量均匀的在内存当中分配,以减少哈希碰撞,提升储存分配的效率;哈希算法一定是无序的散列,所以集合 和字典 都是无序的
”’
字典允许的类型范围
集合允许的内容
定义:
把不可变的任意长度值计算成固定长度的唯一值,这个值可正可负,可大可小,但长度固定
该算法叫哈希算法(散列算法),这个固定长度值叫哈希值(散列值)
特点:
1.计算出来的值长度固定且该值唯一
2.该字符串是密文,且加密过程不可逆
用哈希计算得到一个字符串的用意?
例如:比对两个文件的内容是否一致?
例如:比对输入的密码和数据库存储的密码是否一致
字典的键和集合中的值都是唯一值,不可重复:
为了保证数据的唯一性,
用哈希算法加密字典的键得到一个字符串。
用哈希算法加密集合的值得到一个字符串。
如果重复,他们都是后面的替换前面的。自动去重
版本:
3.6版本之前都是 字典和集合都是无序的
3.6版本之后,把字典的字面顺序记录下来,当从内存拿数据的时候,
根据字面顺序重新排序,所以看起来像有序,但本质上无序
可哈希的数据 (不可变的数据):Number(int float bool complex) str tuple
不可哈希的数据 (可变的数据): list set dict
在同一文件中,变量的缓存机制(仅针对3.6 版本)
–>Number 部分
1.对于整型而言, -5~正无穷范围内的相同值 id一致
2.对于浮点数而言,非负数范围内的相同值 id一致
3.布尔值而言,值相同情况下,id一致
4.复数在 实数+虚数 这样的结构中永不相同(只有正虚数的情况例外)
–> 容器类型部分
5.字符串 和 空元组 相同的情况下,地址相同
6.列表,元组,字典,集合无论什么情况 id标识都不同 [空元组例外]
Number 类型的强制转换(int float complex bool)
可以转换的数据类型: int float bool 纯数字字符串
可以转换的数据类型: int float bool 纯数字字符串
可以转换的数据类型:int float bool 纯数字字符串 complex
可以转换的类型: 布尔可以强转一切数据类型
布尔型为假的十种情况:0 , 0.0 , False , 0j ” [] () set() {} None
初始化变量时,不清楚用什么值,无脑写上None
默认转换成当前数据类型的一个值 int() float() complex() bool()
额外的扩展
Number 自动类型转换(int float complex bool)
注意:低精度默认向高精度进行转换bool--> int --> float --> complex
'''小数的精度损耗 (小数后面一般有时截取15~18位,但是不完全,存在精度损耗)"""不要用小数作比较,咬不准"""print(0.1 + 0.2 == 0.3)print(5.1 + 5.9 == 11.0)0.0999999999999999'''
容器类型的强制转换(str list tuple set dict)
可以转换的类型: 所有的数据类型都可以转换, 在当前的数据类型两边套上引号
如果是字符串:把字符串中的每个元素单独拿出来,作为列表中的新元素
如果是字典:只保留字典中的键
如果是其他容器数据:就是单纯的在元数据类型的两年换上[ ] 括号
如果是字符串:把字符串中的每个元素单独拿出来,作为元组中的新元素
如果是字典: 只保留字典中的键
如果是其他容器数据:就是单纯的在原数据类型的两边换上( ) 括号
如果是字符串:把字符串中的每个元素单独拿出来,作为集合中的新元素
如果是字典 :只保留字典中的键
如果是其他容器数据:就是单纯的在元数据类型的两边换上{}括号
要求:必须是等长的二级容器,并且里面的元素个数是2个;外层是列表,元组,集合 , 里层是列表或者元组的等长二级容器 => 字典;
可以实现,不推荐使用,因为达不到想要的目的,集合无序,不推荐使用
字符串长度只能是2位,有极大的局限性,不推荐使用
讲列表转换成集合的数据类型,在转换回字典,因为集合有去重功能
四级容器
如何获取bingo?
等长的二级容器
外面是容器,里面的元素也是容器,且元素个数相同
使用方法一:isinstance(数据,类型)
该数据是这个类型,返回True 反之,返回False
类型:int float complex bool str list tuple set dict
使用方法二: isinstance (数据,(类型1,类型2,类型3…))
如果该数据在所对应的类型元组当做,返回True,反之,返回False
使用方法一:
使用方法二:
被除数 ÷ 除数 = 商
注意点:如果被除数或者除数是小数,那么得到正常结果之后,数值后面带上 .0变成小数
比较运算符的结果要么是True,要么是False 只有两个值
一真则真,一假则假
一真则真,全假则假
无论后面的表达式是True 还是False 都已经无法改变最后的结果,那么直接短路,后面的代码不执行;
(1) True or print(“程序执行了~ 1111”)
(2) False ande print(“程序执行了~2222”)
先脑补计算当前表达式的布尔值是True还是False,如果出现了True or 表达式 或者False and 表达式的情况,直接返回牵着,后面代码不执行,如果没有出现短路效果,直接返回后者
res = 5 and 6 # 6
”’
True and True => True
True and False => False
”’
接下来看一段代码
优先级从高到低:() > not > and > or
小练习:
#结果是这么来的:
"""
000 ... 10011
000 ... 01111
000 ... 00011 => 3
"""
结果是这么来的:
"""
000 ... 10011
000 ... 01111
000 ... 11111
"""
量遏制不相同 => True 反之返回False
结果是这么来的:
"""
000 ... 10011
000 ... 01111
000 ... 11100
"""
这个数乘以2的n次幂
结果是这么来的:"""
000 ... 101 => 5000 .. 1010 => 10000 ..10100 => 20000 .101000 => 40"""
这个数地板除2的n次幂
结果是这么来的:
"""000 ... 101000 ... 010 => 2000 ... 001 => 1000 ... 000 => 0"""
-(n+1)
练习1:
结果是这么来的:”””
原码:000 ... 10011反码:000 ... 10011补码:000 ... 10011补码: 000 ... 10011按位非: 111 ... 01100给你补码->原码补码:111 ... 01100反码:100 ... 10011原码:100 ... 10100 => -20"""练习2
结果是这么来的:
"""原码:100 ... 10011反码:111 ... 01100补码:111 ... 01101补码: 111 ... 01101按位非: 000 ... 10010给你补码->原码 (因为是整数 ,原反补相同)000 ... 10010 => 19"""
个别运算符:
运算符优县级最高的: **
运算符优先级最低的: =
()可以提升优先级
一元运算符 > 二元运算符(优先级)
一元运算符:同一时间,操作一个值 ~ –
二元运算符:同一时间,操作一个值 + – * / ……
同一种类运算符:
算数运算符:乘除 > 加减
逻辑运算符:() > not > and > or
位运算符: (<< >>) > & > ^ > |
整体排序:
算数运算符 > 位运算符 > 比较运算符 > 身份运算符 > 成员运算符 > 逻辑运算符、
赋值运算符用来做收尾
小练习
作用域:作用的范围
缩进:要么全都使用/t Tab 要么全都是使用4个空格 来表达相同的作用域,不能混在一起;
其他语言的写法(了解)
流程:代码执行的过程
控制:对代码执行过程中的把控
三大结构:
(1)顺序结构:默认代码从上到下,依次执行
(2)分支结构:单项分支 双向分支 多项分支 巢状分支
(3)循环结构:while / for
if 条件表达式:
code1
code2
当条件表达式成立,返回True,执行对应的代码块
if条件表达式:
code1 …
else:
code2…
如果条件表达式成立,返回True,执行if这个区间的代码块
如果条件表达式不成立,返回False,执行else这个区间的代码块
if 分支的代码快啊也叫做镇区间
else 分支的代码块也叫做假区间
input 等待用户输入字符串(注意:结果一定是字符串)
如果admin = Sam 密码:password = 111 显示登陆成,否者显示登陆失败
“””
if 条件表达式1:
code1
elif 条件表达式2:
code2
elif 条件表达式3:
code3
else:
code4
如果条件表达式1成立,执行对应的分支code1,反之判断条件表达式2是否成立
如果条件表达式2成立,执行对应的分支code2,反之判断条件表达式3是否成立
如果条件表达式3成立,执行对应的分支code3,如果不成立,直接走ekse分支,到此程序执行完毕
elif 可以是0个 或者 多个
else 可以是0个 或者 一个
“””
“””单项分支,双向分支,多项分支的互相嵌套组合”””
小练习
height
女生找对象
男生在1米~1.5米之间 小强 你在哪里?
男生在1.5~1.7米之间 没有安全感~
男生 1.7~ 1.8米之间 帅哥 留个电话
男生 1.8~2米之间 帅哥 你建议多一个女朋友吗
快捷键用法:
tab 向右缩进
shift + tab 向左缩进
特点:减少冗余代码,提升执行效率
语法:
while 条件表达式:
code1
(1)初始化一个变量
(2)写上循环的条件
(3)自增自减的值
死循环
“””
while True:
print(1)
“””
help 查看某个方法的文档
如果用上面的方法不仅代码量多 而且太蠢了 接下来我们用while 循环
方法一:
方法二:
方法三:
*公式: 任意数 和 n 进行取余,余数的范围: 0 ~ (n-1)***
0 % 2 = 0
1 % 2 = 1
2 % 2 = 0
3 % 2 = 1
被除数 % 2 => 0 或者 1
0 % 5 = 0
1 % 5 = 1
2 % 5 = 2
3 % 5 = 3
4 % 5 = 4
5 % 5 = 0
6 % 5 = 1
7 % 5 = 2
被除数 % 5 => 0 或者 1,2,3,4
intersection() 交集
简写 &
difference() 差集
简写 –
union() 并集
简写 |
symmetric_difference() 对称差集 (补集情况涵盖在其中)
简写 ^
issubset() 判断是否是子集
简写 <
issuperset 判断是否是父集
简写>
isdisjoint() 检测两集合是否不相交 不相交 True 相交False
frozenset 单纯的只能做交差并补操作,不能做添加或者删除的操作
不能再冰冻集合中添加或者删除元素
冰冻集合只能做交差并补
遍历冰冻集合
Original: https://www.cnblogs.com/shuaiyao666/p/15849674.html
Author: 小帅同学啊
Title: python基础
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/815044/
转载文章受原作者版权保护。转载请注明原作者出处!