目录
1.算术运算符
像 + - * / % ** // 这种进行算术运算的运算符 , 称为 算术运算符注意 1 : / 中不能用 0 作为除数 . 否则会 抛出异常print(10 / 0)
异常 是编程语言中的一种常见机制, 表示程序运行过程中, 出现了一些 "意外情况", 导致程序不能继续往下执行了.注意 2: 整数 / 整数 结果可能是小数 . 而不会截断print(1 / 2)
注意 3: % 不是 " 百分数 ", 而是求余数 .print(7 % 2)
7 除以 2 , 商是 3 , 余数是 1.注意 4: ** 是求乘方 . 不光能算整数次方 , 还能算小数次方 .print(4 ** 2) print(4 ** 0.5)
注意 5: // 是取整除法 ( 也叫地板除 ). 整数除以整数 , 结果还是整数 ( 舍弃小数部分 , 并向下取整 . 不是四舍五 入 )print(7 // 2) print(-7 // 2)
2.关系运算符
像 < <= > >= == != 这一系列的运算符称为 关系运算符, 它们是在比较操作数之间的关系.
其中
- <= 是 "小于等于"
- >= 是 "大于等于"
- == 是 "等于"
- != 是 "不等于"
(1) 如果关系符合, 则表达式返回 True. 如果关系不符合, 则表达式返回 False
a = 10 b = 20 print(a < b) print(a <= b) print(a > b) print(a >= b) print(a == b) print(a != b)
(2) 关系运算符不光针对整数/浮点数进行比较, 还能针对字符串进行比较
a = 'hello' b = 'world' print(a < b) print(a <= b) print(a > b) print(a >= b) print(a == b) print(a != b)
注意 :直接使用 == 或者 != 即可对字符串内容判定相等 . ( 这一点和 C / Java 不同 ).字符串比较大小 , 规则是 " 字典序 "关于字典序 :想象一个英文词典 , 上面的单词都是按照字母顺序排列 . 如果首个字母相同 , 就比较第二个字母 . ( 就比如著名单词 abandon).我们认为一个单词在词典上越靠前 , 就越小 . 越靠后 , 就越大.(3) 对于浮点数来说 , 不要使用 == 判定相等 .print(0.1 + 0.2 == 0.3)
注意 : 浮点数在计算机中的表示并不是精确的 ! 在计算过程中 , 就容易出现非常小的误差 .print(0.1) print(0.2) print(0.3) print(0.1 + 0.2)
可以看到 , 0.1 + 0.2 的结果并非是 0.3 , 而是带了个小尾巴 . 虽然这个尾巴非常小了 , 但是 == 是锱铢必较的, 仍然会导致 == 的结果为 False.不止是 Python 如此 , 主流编程语言都是如此 . 这个是 IEEE754 标准规定的浮点数格式所引入的问题. 此处我们不做过多讨论。正确的比较方式 : 不再严格比较相等了 , 而是判定差值小于允许的误差范围 .a = 0.1 + 0.2 b = 0.3 print(-0.000001 < (a - b) < 0.000001)
实际工程实践中, 误差在所难免, 只要保证误差在合理范围内即可 .
3.逻辑运算符
像 and or not 这一系列的运算符称为 逻辑运算符.
and 并且 . 两侧操作数均为 True, 最终结果为 True. 否则为 False. ( 一假则假 )or 或者 . 两侧操作数均为 False, 最终结果为 False. 否则为 True. ( 一真则真 )not 逻辑取反 . 操作数本身为 True, 则返回 False. 本身为 False, 则返回 True.a = 10 b = 20 c = 30 print(a < b and b < c) print(a < b and b > c) print(a > b or b > c) print(a < b or b > c) print(not a < b) print(not a > b)
一种特殊写法a < b and b < c 这个操作等价于 a < b < c . 这个设定和大部分编程语言都不相同 .关于短路求值和其他编程语言类似 , Python 也存在短路求值的规则 .对于 and, 如果左侧表达式为 False, 则整体一定为 False, 右侧表达式不再执行 .对于 or, 如果左侧表达式为 True, 则整体一定为 True, 右侧表达式不再执行 .print(10 > 20 and 10 / 0 == 1) print(10 < 20 or 10 / 0 == 1)
上述代码没有抛出异常, 说明右侧的除以 0 操作没有真正执行.
4.赋值运算符
(1) = 的使用= 表示赋值 . 这个我们已经用过很多次了 . 注意和 == 区分 .= 除了基本的用法之外 , 还可以同时针对多个变量进行赋值 .链式赋值 a = b = 10
多元赋值 a , b = 10 , 20代码实例 : 交换两个变量基础写法:a = 10 b = 20 tmp = a a = b b = tmp
基于多元赋值
a = 10 b = 20 a, b = b, a
(2) 复合赋值运算符Python 还有一些 复合赋值运算符 . 例如 += - = *= /= %=其中 a += 1 等价于 a = a + 1 . 其他复合赋值运算符也是同理 .a = 10 a = a + 1 print(a) b = 10 b += 1 print(b)
注意: 像 C++ / Java 中 , 存在 ++ -- 这样的自增 / 自减运算符 . Python 中则不支持这种运算 . 如果需要使用 , 则直接使用 += 1 或者 - = 1++ -- 最大的问题就是容易分不清前置和后置的区别 . 这一点 Python 语法在设计的时候就进行了规避, 避免出现这种不直观 , 并且容易混淆的语法 .
其他 ...除了上述之外 , Python 中还有一些运算符 , 比如 身份运算符 (is, is not), 成员运算符 (in, not in), 位运算符 ( & | ~ ^ << >>) 等 .此处暂时不介绍 .题目练习:(1) [ 多选 ] 以下关于变量之间加法运算的说法 , 正确的是 :(ACD)A. Python 中的字符串之间够能相加 .B. Python 中的字符串可以和整数相加 .C. Python 中的整数可以和浮点数相加 .D. Python 中的整数可以和布尔值相加 .
说明:整数与bool值相加,但这样的操作没有意义!
(2) [ 单选 ] 以下关于类型的说法 , 正确的是 : (D)A. Python 中既有字符串类型 , 也有字符类型 .B. Python 中既有 float, 也有 double.C. Python 中既有 int, 也有 longD. Python 中的整数表示范围无上限 .(3) [ 单选 ] 以下 Python 代码 , 合法的是(B)A. int a = 10B. a = 10 ;C. a = trueD. a = 'aaa' + 10