资源简介 第三章 算法的程序实现 3.2 Python语言程序设计 必修1《数据与计算》 3.2.4 运算符 学习目标 运算符 运算符 运算符的结合性 运算符的优先级 不同数值类型的True和False的情况 运算符 运算符 1 也叫操作符。 2 是对数据进行运算的符号。(用于执行程序代码运算。) 3 针对一个或多个操作数项目来进行运算。 4 参与运算的数据称为操作数或运算对象 ·分类 按操作数的个数: 单目(或一元)运算符:~ - 双目(或二元)运算符:== + / * 三目(或三元)运算符:exp1 if contion else exp2 ·定义 运算符 运算符 ·按功能分类 运 算 符 算术运算符:( + - * / // % ** ) 赋值运算符:( = 及其扩展 ) 关系运算符:( == != >= <= > < ) 位运算符:( & | ^ ~ << >> ) 逻辑运算符:( and or not ) 条件运算符:( exp1 if contion else exp2 ) 成员运算符:( in not in ) 身份运算符:( is is not ) 分量运算符:( . ) 强制类型转换:( 类型 ) 索引运算符:( [ ] ) 其它:( ( ) - ) 运算符 运算符 ·定义 同一优先级的运算符在表达式中操作的组织方向。 当一个运算对象两侧运算符的优先级别相同时, 运算对象与运算符的结合顺序 例如: a-b+c b两侧有-和+两种运算符的优先级相同,按先左后右结合方向,b 先与减号结合,执行a-b的运算,再执行加c的运算 ·结合性 运算符 运算符 ·种类:+ - * / // % ** 1、结合性:从左向右 2、优先级: ** → +(正号)、-(负号) → * 、/、 //、% → +、- 1、算术运算符 注意: 1)当+为正号,-为负号时,这两个运算符为单目运算符,结合性为从右向左 2)除号( / )的运算结果一定是小数,不管是否除尽,也不管参与运算的是整数还是小数 3)求余( % )和整除( // ),只有当有小数参与运算时,其结果为小数,否则就是整数 4)求余结果的正负号与第一个数字没有关系,只由第二个数字决定 运算符 运算符 例如: 1、2 ** 3 = 8 2、2 * 3 = 6 3、5 / 2 = 2.5 4 / 2 = 2.0 -5 / 2 = -2.5 -5.5 / 2 = -2.75 4、5 // 2 = 2 -5 // 2 = -3 5 // 2.0 = 2.0 4.0 // 2 = 2.0 -5.5 // 2 = -3.0 5、5 % 2 = 1 5 % 2.0 = 1.0 4.0 % 2 = 0.0 -5 % 2 = 1 5.5 % 2 = 1.5 -5.5 % 2 = 0.5 1、算术运算符 运算符 运算符 ·符号:= ·格式 变量标识符 = 常量、变量或表达式 ·结合性 从右向左 ·作用 将一个数据(常量、变量或表达式)赋给一个变量 ·赋值转换规则 使赋值号右边表达式值自动转换成其左边变量的类型 ·赋值表达式的值与变量值相等,且可嵌套 2、赋值运算符 运算符 运算符 例如: a = 13; a = x; a = x + 2; a = b = 5 ·复合赋值运算符 1.种类 += -= *= /= %= **= //= &= |= ^= <<= >>= 2.格式:exp1 op= exp2 3.结合性:从右向左 4.优先级:赋值运算符都是同一等级 5.作用: exp1 = exp1 op exp2 2、赋值运算符 运算符 运算符 例如: a += 13 a = a + 13 x *= y + 8 x = x * ( y + 8 ) m %= n m = m % n ·a = a + 1 和 a += 1 有何区别? 首先理解Python对象的三要素 1.id:是对象的唯一标识,是对象在内存中的存储地址 2.type:是对象的数据类型 3.value:是对象的值,即对象在内存中存放的数据 2、赋值运算符 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}5 10 11 20 对象5的地址:116958664 对象5的数据类型:整型 对象5的数值:5 运算符 运算符 ·a = a + 1 和 a += 1 有何区别? 当a为不可变类型时,两者之间没有区别。 当a为可变类型时:(可变与不可变类型之后章节会介绍) Python执行的过程: 2、赋值运算符 a = a + 1 1)读取右边的a的地址,计算a+1 2)读取左边的a的地址 3)将右边a+1传递给左a,编译器认为左右两个a不一致 a += 1 1)读取左边的a的地址,计算a+1 2)a+1传递给a自身,编译器认为左右两个a是同一个 1.执行效率:a += 1更快 2.a=a+1的两个a的地址不同;而a+=1中a的地址是一样的 注意 运算符 运算符 ·种类 == != > < >= <= ·结合性 从左向右 ·优先级 关系运算符都是同一等级 ·关系表达式的值 是逻辑值“True(真)”或“False(假)” 注意: <> 等同于 !=,但是在Python3.x中已经废止 3、关系运算符 运算符 运算符 例1: a>b+c a>(b+c) a>b!=c (a>b)!=c a==b>c (a==b)>c a=b>c a=(b>c) 例2:判断下列表达式 a=3;b=2;c=1 1)a>b a 2)a>c!=b a==b>c 3)a>b>c ac 4)d=ab>c d=a!=c>b 3、关系运算符 注意: 1.Python中允许x 2.d=a 3.复数不能进行大小比较,只能比较是否相等 运算符 运算符 【=】和【==】有何区别 ·【=】 它是赋值语句,例如:a=2 语句执行后,变量a被创建,但是它没有结果(result),连None都没有,所以不能让赋值语句参与计算。例如:if(a=2)是语法错误。 函数调用时,用来给参数赋值是允许的。例如:f(1,2,c=3) ·【==】 它是关系运算符,比较运算是一种表达式 表达式总是会有一个结果(result),result是一个bool类型,True或False 关系运算符可以参加计算 注意:在Python中,下面两个表达式都为True 1==True 0==False 3、关系运算符 运算符 运算符 ·种类 & | ^ ~ << >> ·结合性 从左向右 其中 ~ 为从右向左 ·优先级 ~ → >>、<< → & → ^ → | ·计算 位运算是按照数据在内存中的二进制位(Bit)进行操作的 注意:Python中的位运算符只能用来操作整数类型 4、位运算符 运算符 运算符 1.按位与运算符:& 例1: a = 60 b = 13 4、位运算符 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 1 1 1 1 0 0 b的原码: a的原码: {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 0 0 1 1 0 1 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 0 0 1 1 0 0 & 这是12在内存的二进制位 a & b=12 例2: a = 60 b = -13 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 1 1 1 1 0 0 b的补码: a的原码: {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}1 1 1 1 0 0 1 0 & {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 1 1 0 0 0 0 这是48在内存的二进制位 a & b=48 注意: 正数在内存的二进制位是以原码的形式存储 负数在内存的二进制位是以补码的形式存储 0的原码补码是一样的:0000 0000 运算符 运算符 1.按位或运算符:| 例1: a = 60 b = 13 4、位运算符 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 1 1 1 1 0 0 b的原码: a的原码: {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 0 0 1 1 0 1 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 1 1 1 1 0 1 | 这是61在内存的二进制位 a | b=61 例2: a = 60 b = -13 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 1 1 1 1 0 0 b的补码: a的原码: {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}1 1 1 1 0 0 1 1 | {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}1 1 1 1 1 1 1 1 这是-1在内存的二进制位 a | b=-1 注意: 已知补码如何求原码? 1)对补码进行补码操作,所得结果即原码 2)找到补码左右两边的第一个1不变,再将中间的数都取反,即得原码 运算符 运算符 1.按位异或运算符:^ 例1: a = 60 b = 13 4、位运算符 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 1 1 1 1 0 0 b的原码: a的原码: {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 0 0 1 1 0 1 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 1 1 0 0 0 1 ^ 这是49在内存的二进制位 a ^ b=49 例2: a = 60 b = -13 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 1 1 1 1 0 0 b的补码: a的原码: {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}1 1 1 1 0 0 1 1 ^ {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}1 1 0 0 1 1 1 1 这是-49在内存的二进制位 a ^ b=-49 运算符 运算符 1.按位取反运算符:~ 例1: a = 13 b = -13 4、位运算符 a的原码: {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 0 0 1 1 0 1 ~ ~ a = -14 b的补码: {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}1 1 1 1 0 0 1 1 ~ {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 0 0 1 1 0 0 这是12在内存的二进制位 ~ b = 12 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}1 1 1 1 0 0 1 0 这是-14在内存的二进制位 运算符 运算符 1.左移运算符:<< 例1: a = 13 c = 2 4、位运算符 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 0 0 1 1 0 1 a的原码: << 这是52在内存的二进制位 这两位删除 例2: b = -13 c = 2 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 0 0 1 1 0 1 0 0 a << c=52 这两位增加添0 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}1 1 1 1 0 0 1 1 b的原码: << 这是-52在内存的二进制位 这两位删除 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}1 1 1 1 0 0 1 1 0 0 b<这两位增加添0 运算符 运算符 1.右移运算符:>> 例1: a = 13 c = 2 4、位运算符 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 0 0 1 1 0 1 a的原码: >> 这是3在内存的二进制位 这两位删除 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 0 0 0 0 1 1 0 1 a >> c=3 这两位增加添0 运算符 运算符 1.右移运算符:>> 例2: b = -13 c = 2 4、位运算符 b的原码: >> 这是60在内存的二进制位 这两位删除 b >> c=60 这两位增加添0 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}1 1 1 1 0 0 1 1 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}0 0 1 1 1 1 0 0 1 1 运算符 运算符 ·种类 not(非) and(与) or(或) ·结合性 从左向右 其中 not 为从右向左 ·优先级 not → and → or 5、逻辑运算符 运算符 运算符 ·逻辑运算真值表 5、逻辑运算符 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}a b not a not b a and b a or b 真 真 假 假 真 真 真 假 假 真 假 真 假 真 真 假 假 真 假 假 真 真 假 假 注意: 真--------True 假--------False 说明: 1)当a和b都为真时,a and b才为真,否则为假 2)当a和b都为假时,a or b才为假,否则为真 运算符 运算符 例1: a<=x and x<=b (a<=x) and (x<=b) a==b or x==y (a==b) or (x==y) not a or a>b (not a) or (a>b) 例2: a = 1 b = 0 c = 3 d = 5 1) not a 2)not b 3) d and ac or b 5) b and d!=0 and aa 7) a and b or c>0 or not d 8)not d or c>=c and not b or c or d>a 5、逻辑运算符 False True False True True False True True 运算符 运算符 ·短路特性 判定逻辑表达式True或False时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能判定表达式的True或False时,才执行该运算符。 例1: a = 1 b = 0 c = 3 d = 5 1) b and d!=0 and a 2)a>b or b!=0 or c>a 3) a and b and c>0 or not d 4)not d or c>=c and not b or c or d>a 5、逻辑运算符 False True False True 说明: 1)左侧第一个表达式中,都是and逻辑运算符,b=0为假,整个表达式已经可以判定为假,and之后的运算符都不执行。 2)左侧第一个表达式中,都是or逻辑运算符,a>b为真,整个表达式已经可以判定为真,or之后的运算符都不执行。 运算符 运算符 ·格式: exp1 if contion else exp2 说明:condition 是判断条件,exp1 和 exp2 是两个表达式 1)若condition 成立(结果为真),就执行 exp1,并把 exp1 的结果作为整个表达式的结果 2)若 condition 不成立(结果为假),就执行 exp2,并把 exp2 的结果作为整个表达式的结果。 例如:max = a if a>b else b ·支持嵌套 例如: a if a>b else c if c>d else d a if a>b else (c if c>d else d) 6、条件运算符 运算符 运算符 7、成员运算符 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}运算符 描述 in 如果在指定的序列中找到值返回 True,否则返回 False。 not in 如果在指定的序列中没有找到值返回 True,否则返回 False。 例如: a = 1; b = 6; list = [1, 2, 3, 4, 5 ] if ( a in list ): print ("1 - 变量 a 在给定的列表中 list 中") if ( b not in list ): print ("2 - 变量 b 不在给定的列表中 list 中") else: print ("2 - 变量 b 在给定的列表中 list 中") 输出结果: 1 - 变量 a 在给定的列表中 list 中 2 - 变量 b 在给定的列表中 list 中 运算符 运算符 8、身份运算符 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}运算符 描述 is is 是判断两个标识符是不是引用自一个对象。即地址相同 is not is not 是判断两个标识符是不是引用自不同对象。即地址不同 ·is 和 == 有何区别? 1)is 判断的是两个标识符是否是同一个对象。同一个对象的地址相同 2)== 判断的是两个标识符在内存里存储的数值是否相同 不同数值类型的True和False的情况 运算符 ·真值表 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}数据类型 值(False) 值(True) 布尔 False(与0等价) True(与1等价) 数值 0 、 0.0 非零的数值 字符串 ''、""(空字符串) 非空字符串 容器 []、()、{}、set() 至少有一个元素的容器对象 None None 非None对象 运算符的优先级 运算符 ·优先级表 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}运算符说明 Python运算符 优先级 结合性 优先级顺序 小括号 ( ) 20 无 高 索引运算符 x[i] 或 x[i1: i2 [:i3]] 19 左 | 属性访问 x.attribute 18 左 | 乘方 ** 17 左 | 按位取反 ~ 16 右 | 符号运算符 +(正号)、-(负号) 15 右 | 乘除 *、/、//、% 14 左 | 加减 +、- 13 左 | 位移 >>、<< 12 左 | {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}运算符说明 Python运算符 优先级 结合性 优先级顺序 按位与 & 11 左 | 按位异或 ^ 10 左 | 按位或 | 9 左 | 关系运算符 ==、!=、>、>=、<、<= 8 左 | 赋值运算符 =、%=、/=、//=、-=、+=、*=、**=、>>=、<<= 7 右 | is 运算符 is、is not 6 左 | in 运算符 in、not in 5 左 | 逻辑非 not 4 右 | 逻辑与 and 3 左 | 逻辑或 or 2 左 | 三目运算符 exp1 if contion else exp2 1 左 低 展开更多...... 收起↑ 资源预览