4x00 Python计算机运算符Operator
4x10 运算符 (Operator)
这期分享的是运算符,还有特别例子一起来研究研究:
4x11 - 运算符的概念
运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。例如:2+3,其操作数是2和3,而运算符则是“+”
4x12 - 运算符的分类
- 算术运算符 eg. +, -, *, /, //, %, **
- 赋值运算符 (算术运算符加上"=")
- 比较运算符(关系运算符)
- 逻辑运算符
- 条件运算符(三元运算符)
4x20 - 算术运算符
• 加法运算符 表现形式 +
• 减法运算符 表现形式 -
• 乘法运算符 表现形式 *
• 除法运算符 表现形式 /
• // 整除,只会保留计算后的整数位,总会返回一个整型
• % 取模,求两个数相除的余数
• ** 幂运算,求一个值的几次幂 (幂可以是浮点数,但必须是正数)
- 这里需要注意的数据类型有不一样的结果输出:
- 整数类,浮点类和布尔值,单用或混用在以上算术运算符没问题,但凡有用上浮点数,输出结果也必定是浮点数 eg. 1 + 3.0 = 4.0,print(False - 4*True - 0.3) = - 4.3
特别情况:如果两个都是整数,所有算术运算符里,只有除法"/"返回浮点数; 0不能作为除数 不然会报错ZeroDivisionError- 空值None不能应用在算术运算符里,程序会报错
- 字符串不能与其他数据类型混用,只适用 "+" ,结果是两边字符串相串街起来,用于其他算术运算符会报错 eg. “a” + “b” = “ab”
-字符串可以乘与正整数(不能浮点数),结果是重复字符串若干整次数 eg “ab”*3 = “ababab”,但 字符串和字符串不能相乘,会报错- 在算数操作符中%求余,如第二个操作数是负数,结果也会是负值
- 除法运算 符里,如果 操作数都是整数,Python2.x 结果为整数,Python3.x 结果为浮点数
运算符 | 说明 | 实例 | 结果 |
---|---|---|---|
+ | 加 | 12.35 + 54 | 66.35 |
- | 减 | 4.56 - 0.26 | 4.3 |
* | 乘 | 5*3.6 | 18.0 |
/ | 除 | 7/2 | 3.5 |
% | 求余,返回除后的余数值 | 7%-2 | -1 |
// | 取整除,返回除后的整数部分 | 7//2 | 3 |
** | 幂,返回x的y次方 | 2**4 | 16, 即2^4 |
4x30 - 赋值运算符
赋值运算符的特殊写法 x = x + 3 其实是和 x += 3 是一样的
• += (x += 3 相当于 x = x + 3 )
• -= (x -= 3 相当于 x= x - 3 )
• *= (x = 3 相当于 x = x 3 )
• **= (x **= 3 相当于 x = x ** 3 )
• /= (x /= 3 相当于 x = x / 3 )
• //= (x //= 3 相当于 x = x // 3 )
• %= (x %= 3 相当于 x= x % 3 )
注意:
- 等号得和算术运算符将连接,不得空格,不然会报错
- 赋值的变量名必须在左边 eg. a = 3, 不能 3 = a
运算符 | 说明 | 举例 | 展开式 |
---|---|---|---|
= | 基本赋值 | x=y | x=y |
+= | 加赋值 | x+=y | x=x+y |
-= | 减赋值 | x-=y | x=x-y |
*= | 乘赋值 | x*=y | x=x*y |
/= | 除赋值 | x/=y | x=x/y |
%= | 取余数赋值 | x%=y | x=x%y |
//= | 取整除赋值 | x//=y | x=x//y |
**= | 幂赋值 | x**=y | x=x**y |
4x40 - 比较运算符
- 比较运算符用来比较两个值之间的关系,总会返回一个布尔值,如果关系成立,返回True,否则返回False
• > 比较左侧值是否大于右侧值
• >= 比较左侧的值是否大于或等于右侧的值
• < 比较左侧值是否小于右侧值
• <= 比较左侧的值是否小于或等于右侧的值- 特殊的比较方式
• == 比较两个对象的值是否相等
• != 比较两个对象的值是否不相等
• is 比较两个对象是否是同一个对象 id(),比较的是对象的id
• is not 比较两个对象是否不是同一个对象 id(),比较的是对象的id
运算符 | 作用 | 举例 | 结果 |
---|---|---|---|
> | 大于 | ‘a’ > ‘b’ | False |
< | 小于 | 156<456 | True |
== | 等于 | ‘z’==‘z’ | True |
!= | 不等于 | ‘t’ != ‘d’ | True |
>= | 大于等于 | 443>=987 | False |
<= | 小于等于 | 45.5<=45.5 | True |
eg.
a = 60
b = 70
c = 100
d = 70
print(b > a, b > c)
print(b < a, b < c)
print(b <= c, b <= d)
print(b >= c, b >= d)
print(b == d, b != d)
print(b is c, b is d)
print(b is not c, b is not d)
结果:
True False
False True
True True
False True
True False
False True
True False
- 注意:
• 数字和字符串不能比较
• 对位比较:字符串之间也可以比较,‘a’ < ‘b’ 可以从检查顺序order得知结果ord(‘a’), ord(‘b’),所以’a’ < ‘b’ = True, 但多字符: “abd” > “acd” 就会采用对位比较,如果第一个字母比较不出结果,就跳到第二位字母做比较,如果有了比较结果,之后的字母就不再做比较了
• eg. print(‘3’ == ‘3’) True; print(‘ab’ == ‘bc’) False; print(1 == True) True
a = 1
b = 3
c = 3
print(a is b)
print(id(a),id(b))
print(b is c)
print(id(b),id(c))
结果:
False
4458666656 4458666720
True
4458666720 4458666720
4x50 - 逻辑运算符
4x51 - not 逻辑非
• not可以对符号右侧的值进行非运算对于布尔值,非运算会对其进行取反操作,True变False,False变True
a = 1
a = not a #右边a值为1, not 1(True)则为False,后赋值a
b = False
b = not b #右边b值为False, not False则为True,后赋值b
print('a = ', a, ',', 'b = ', b)
结果:
a = False , b = True
4x52 - and 逻辑与
- and可以对符号两侧的值进行与运算。 只有在符号两侧的值都为True时,才会返回True,只要有一个False就返回False
- 与运算是找False的,如果第一个值为False,则不再看第二个值;如果第一个值为True, 则返回第二值
eg.
a = 1
b = 0
c = 2
print(a and c) #找False,第一值不是False,返回第二值0
print(b and c) #第一值是False,返回第一值0
4x53 - or 逻辑或
- or或运算两个值中只要有一个True,就会返回True
- 或运算是找True的:如果第一个值为True,则不再看第二个值;如果第一个值为False, 则返回第二值
eg.
a = 1
b = 0
c = 2
print(a or c) #找True, 第一值是True,直接返回a值1
print(b and c) #第一值不是True, 返回第二值c=2
表达式1 | 表达式2 | 表达式1 and 2 | 表达式1 or 2 | not 表达式1 |
---|---|---|---|---|
True | True | True | True | False |
True | False | False | True | False |
False | False | False | False | True |
False | True | False | True | True |
4x54 - 非布尔值的与或运算
当我们对非布尔值进行与或运算时,Python会将其当做布尔值运算,最终会返回原值
非布尔值与运算的规则:
• 与运算是找False的,如果第一个值是False,则不看第二个值。如果第一个值是False,则直接返回第一个值,否则返回第二个值
True and print('first line second value')
False and print('second line second value')
结果:
first line second value
(第一行"and", 前面不是False, 就取第二值,也就是执行第二项)
(第二行, 已经找到False,默认没输出,所以也不需执行第二项)
r = 1 and 0 # 找False,第一个不是,就返回第二值0
print(r)
r = 1 and None # 找False,第一个不是,就返回第二值None
print(r)
r = 0 and 1 # 找False,第一个就是了,所以返回第一值0
print(r)
结果:
0
None
0
r = 1 < 2 < 3 # 1 < 2 and 2 < 3
print(r) # 两边都是True,取第二值
• 非布尔值或运算的规则
• 或运算是找True的,如果第一个值是True,则不看第二个值。如果第一个值是True,则直接返回第一个值,否则返回第二个值
True or print('first line second value')
False or print('second line second value')
结果:
second line second value
(第一行“or”已经找到True,默认没输出,所以也不需执行第二项)
(第二行, 前面不是True, 就取第二值,也就是执行第二项)
r = 0 or None # 找True,第一个不是,就返回第二值None
print(r)
r = 1 or 2 # 找True,第一个就是了,所以返回第一值1
print(r)
r = 0 or 1 # 找True,第一个不是,就返回第二值1
print(r)
结果:
None
1
1
4x60 - 位运算符
位运算符是把数字看作二进制来进行计算,需要先将要执行运算的数据转换为二进制,然后才能执行运算;位运算符有:
- 按位与(&)
运算符为"&", 运算法则:两个操作数据的二进制表示, 对应位都是1时, 结果为1, 否则0 - 按位或(|)
运算符为"|", 运算法则:两个操作数据的二进制表示, 对应位都是0时, 结果为0, 否则1
- 按位异或(^)
运算符为"^", 运算法则:两个操作数据的二进制表示相同(同时为0或同时为1), 结果为0, 否则1 - 按位取反(~)
也称为"按位非", 运算符为"~", 运算法则:两个操作数据对应的二进制中1修改为0, 0修改为1
- 左移位(<<)
左移位运算符<<是将一个二进制操作数向左移动指定位数, 左边(高位端)溢出的位将被丢弃, 右边(低位端)空位由0补充, 相当于乘以2n(n为位数)
1| 例:12 << 2
2| 1、首先转化为二进制,12的二进制为0000 1100
3| 2、将二进制数向左移两位,低位补0,得到0011 0000
4| 3、最后将二进制数转化成十进制数,0011 0000转化为十进制为48
5| 所以,12 << 2 = 48
- 右移位(>>)
左移位运算符>>是将一个二进制操作数向右移动指定位数, 右边(低位端)溢出的位将被丢弃, 左边(高位端)空位由0(整数)补充, 相当于除以2n(n为位数)
(正数)
1| 例:20 >> 2
2| 1、首先转化为二进制,20的二进制为0001 0100
3| 2、将二进制数向右移两位,高位补符号位(0),得到0000 0101
4| 3、最后将二进制数转化成十进制数,0000 0101转化为十进制为5
5| 所以,20 >> 2 = 5
(负数)
1| 例:-20 >> 2
2| 1、首先转化为二进制,20的二进制为1110 1100
3| 2、将二进制数向右移两位,高位补符号位(1),得到1111 1011
4| 3、最后将二进制数转化成十进制数,1111 1011转化为十进制为-5
5| 所以,-20 >> 2 = -5
4x70 - 条件运算符(三元运算符) - (… if 条件 else …)
条件运算符在执行时,会 先对条件表达式进行求值判断
如果判断结果为True,则执行语句1,并返回执行结果
如果判断结果为False,则执行语句2,并返回执行结果
语法: 语句1 if 条件表达式 else 语句2
eg:
print('python')if True else print('Java') # python
print('python')if False else print('Java') # Java
a = 60
b = 80
m = a if a > b else b # 条件运算后赋值m
print(m) # a>b = false, false就取else值b 80
4x70 - 运算符的优先级
可以参考官网链接: Docs - language reference - Expressions (operator precedence) - 表格显示的,表格越往下为最优先
假如我们不知道哪个优先级高也没关系,我们来逻辑思考看看:
a = 2 or 3 and 4
print(a) # 我们可以先逻辑分析以下情况:
# 第一种情况:or 和 and 优先平等,但从左到右运行 # 4
# 第二种情况:or 优先级高,由左到右运行 # 4
# 第三种情况:and 优先级高 # 2
结果:2 (可知 and 比 or 优先级高)
这期就分享到这里啦!
5x00 Python条件控制语句的用法 >>>