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 + 5466.35
-4.56 - 0.264.3
*5*3.618.0
/7/23.5
%求余,返回除后的余数值7%-2-1
//取整除,返回除后的整数部分7//23
**幂,返回x的y次方2**416, 即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=yx=y
+=加赋值x+=yx=x+y
-=减赋值x-=yx=x-y
*=乘赋值x*=yx=x*y
/=除赋值x/=yx=x/y
%=取余数赋值x%=yx=x%y
//=取整除赋值x//=yx=x//y
**=幂赋值x**=yx=x**y

4x40 - 比较运算符

  • 比较运算符用来比较两个值之间的关系,总会返回一个布尔值,如果关系成立,返回True,否则返回False
    > 比较左侧值是否大于右侧值
    >= 比较左侧的值是否大于或等于右侧的值
    < 比较左侧值是否小于右侧值
    <= 比较左侧的值是否小于或等于右侧的值
  • 特殊的比较方式
    == 比较两个对象的值是否相等
    != 比较两个对象的值是否不相等
    is 比较两个对象是否是同一个对象 id(),比较的是对象的id
    is not 比较两个对象是否不是同一个对象 id(),比较的是对象的id
运算符作用举例结果
>大于‘a’ > ‘b’False
<小于156<456True
==等于‘z’==‘z’True
!=不等于‘t’ != ‘d’True
>=大于等于443>=987False
<=小于等于45.5<=45.5True

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 2not 表达式1
TrueTrueTrueTrueFalse
TrueFalseFalseTrueFalse
FalseFalseFalseFalseTrue
FalseTrueFalseTrueTrue

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 优先级高)

这期就分享到这里啦!

<< 3x00 Python程式员该懂的基本数据

5x00 Python条件控制语句的用法 >>>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值