万事开头难

python运算符

一 判断类型 isinstance

语法一

isinstance(要判断的数据,要判断的类型)

如果该数据是这个类型,返回True,反之返回False

res = isinstance(111,int)

res = isinstance([],tuple)

 

语法二

isinstance(要判断的数据,(类型1,类型2,类型3))

如果该数据在后面的类型元组中,返回True,反之返回False

res = isinstance('你好',(int,float,bool,tuple,str))
res = isinstance({'a','b','c'},(int ,float,list,tuple ,str) )
print(res)

二 .运算符

1.1算数运算符

var1 = 3
var2 = 5
res = var1 + var2
print(res) 

# - 
var1 = 3
var2 = 5
res = var1 - var2
print(res) 

# *
var1 = 3
var2 = 5
res = var1 * var2
print(res) 

# / 结果一定是小数
var1 = 3
var2 = 5
res = var1 / var2
res = 6 / 2
print(res) 

# // 地板除 
"""被除数 ÷ 除数 = 商"""
res  = 6 // 2
res = 7 // 100
"""如果被除数或者除数身上有小数,在得到正常结果之后,加上.0"""
res = 7.0 // 3
print(res)


# % 取余
"""
先正常算出余数,如果被除数身上有符号,那么该余数身上补负号和除数相加
如果被除数或者除数身上都有符号,直接算出余数,然后前面套上负号即可;
"""
res = 7 % 4
res = -7 % 4  # -3 + 4 = 1
res = 7 % -4  # 3 + (-4) = -1
res = -7 % -4 # -3
res = -91 % 8 # -3 + 8 = 5
res = 91 % -8 # 3 + (-8) = -5
res = -91 % -8# -3
print(res)
 
# ** 幂运算
res = 3 ** 40
print(res)
View Code

 

1.2比较运算符

"""比较运算符只能得到两个结果,要么是True,要么是False"""
res = 5 > 3  # True
res = 6 <= 6 # True
res = 6 == 7 # False
res = 6 != 7 # True

#注意点 : == 符号
if 5 == 5:   # 5 = 5 errror
    print(1)
View Code

 

 1.3 身份运算符 is 和 is not(检测链各个数据在内存当中是否是同一地址)

# 1.Number类型
# 整型 -5~正无穷
var1 = 15
var2 = 15
print(id(var1),id(var2))
print(var1 is var2)

# 浮点型 非负数
var1 = 4.5
var2 = 4.5
print(var1 is var2)

# 复数 (实数+虚数 永不相同,只有虚数的情况下例外)
var1 = 4 + 90j
var2 = 4 + 90j
print(var1 is not var2)
print(4j is 4j)

# 布尔型
var1 = True
var2 = False
print(var1 is not var2)

# 2.容器类型
# str 和 空元祖 在值相同的情况下,地址相同
var1 = ""
var2 = ""
var1 = (1,)
var2 = (1,)
print(var1 is var2)
# 剩下的容器永不相同
var1 = [1,2]
var2 = [1,2] 
print(var1 is var2)
View Code

 

1.4 逻辑运算符: and or not

#and 逻辑与    全真则真,一假则假

res = True and True # True
res = True and False # False
res = False and True # False
res = False and False# False
print(res)

# or 逻辑或 一真则真,全假则假

res = True or True # True
res = True or False # True
res = False or True # True
res = False or False# False
print(res)

# not 逻辑非

res = not True
res = not False
print(res)
View Code

 

什么是逻辑短路

两种形式:

  (1) True or 表达式

  (2) Fasle and 表达式

无论后面的表达式是什么,都无法改变最后的结果,会出现逻辑短路

True or True => True

True or False => True

1.5 赋值运算符  = += -= *= /= //= %= **=

var1 = 10
var1 = 10 !=10

# +=
var1 = 4
var2 = 6
"""var1 = var1 + var2"""
var1 += var2
print(var1)

# -= 
var1 = 4
var2 = 6
"""var1 = var1 - var2"""
var1 -= var2
print(var1)

# *= 
var1 = 100
var2 = 3
"""var1 = var1 * var2"""
var1 *=  var2
print(var1 , var2)

 

1.6 成员运算符: in 和 not in (针对于容器类型)

# 字符串
"""必须是连续的片段"""
strvar = '瘦成闪电,胖成坚果'
res = '闪电' in strvar
res = '瘦胖' in strvar
print(res)

# 列表,元组,集合
lst = ['更这事','既迎合','孙翔宇']
res = '张银' in lst
tup = ('万胜府','像欧诺个话','梁瑞奇怪')
res = '万胜府' not in tup
setvar = {'刘玉播','黄建昌','放进孙'}
res = '放进孙' not in setvar

# 字典
"""in或者not in 在字典中,判断的是键,不是值"""
dic = {'hxr':'小黄人','hlz':'回落至'}
res = '小换人' in dic
res = 's1' in dic
res = 's1' not in dic
print(res)
View Code

 三. 位运算符

1.按位与&

var1 = 19
var2 = 15
print(var1 & var2)
"""
19的二进制
0000 ... 10011
15的二进制
0000 ... 01111

0000 ... 10011
0000 ... 01111
0000 ... 00011 => 3
"""
View Code

2. 按位或 |

var1 = 19
var2 = 15
print(var1 | var2)
"""
19的二进制
0000 ... 10011
15的二进制
0000 ... 01111

0000 ... 10011
0000 ... 01111
0000 ... 11111 => 31
"""

3.按位异或^ 两个值不一样,返回真,否则返回假

"""
1 0 => 1
1 1 => 0
0 0 => 0
0 1 => 1
"""
var1 = 19
var2 = 15
print(var1 ^ var2)
"""
19的二进制
0000 ... 10011
15的二进制
0000 ... 01111

0000 ... 10011
0000 ... 01111
0000 ... 11100 => 28
"""
View Code

4. <<左移

""" 左移相当于做乘法 : 5 * 2的n次幂 """
res = 5 << 1 # 10
res = 5 << 2 # 20
res = 5 << 3 # 40
print(res)
"""
0000 ...  101
0000 ... 1010  移动一位 10
0000    10100  移动二位 20
"""
View Code

5.>>右移

""" 右移相当于做除法 : 5 // 2的n次幂 """
res = 5 >> 1 # 2
res = 5 >> 2 # 1
res = 5 >> 3 # 0
print(res)
"""
0000 ...  101
0000 ...  010  移动一位 2
0000 ...  001  移动二位 1
0000 ...  000  移动三位 0
"""
View Code

6. ~按位非

"""公式: -(n+1)"""
var1 = ~19
print(var1)
"""
~ 按位非每一位都取反,包括符号位,求反码每一位除了符号位,都取反.

原码:0000 ... 10011
反码:0000 ... 10011
补码:0000 ... 10011

补码:     0000 ... 10011
按位非:   1111 ... 01100

给你补码求原码:
补码: 1111 ... 01100
反码: 1000 ... 10011
原码: 1000 ... 10100 => -20
"""

var1 = ~(-22)
print(var1)
"""
原码: 1000 ... 10011
反码: 1111 ... 01100
补码: 1111 ... 01101

补码:    1111 ... 01101
按位非:  0000 ... 10010

给你补码求原码:
正数 : 补码 = 反码 = 原码

原码:  0000 ... 10010 => 18
"""
View Code

7. 运算符总结

 1 """
 2 (1) 个别运算符:
 3     优先级最高 ** 幂运算
 4     优先级最低 =  赋值运算符
 5     () 括号可以提升运算优先级
 6     
 7 (2) 整体 一元运算符 > 二元运算符
 8     一元运算符: 同一时间,只操作一个值 - ~
 9     二元运算符: 同一时间,操作两个值 + - * / ...
10     
11 (3) 同一层级
12     逻辑: () > not > and > or
13     算数: 乘除 > 加减
14     位运算符: ( << >> ) > & > ^ > |
15 
16 (4) 其他运算符
17     算数运算符 > 位运算符 > 比较运算符 > 身份运算符> 成员运算符 > 逻辑运算符
18     赋值运算符是最后算完进行赋值,做收尾工作的.
19 """    
20 res = 5+5 << 6//3 is 40 and True
21 print(res)
22 
23 """
24 res = 10 << 2 is 40 and True
25 res = 40 is 40 and True
26 res = True and True
27 res = True
28 """
29 # 加上括号包起来,让别人能看懂代码;
30 res = (5+5) << (6//3) is 40 and True
View Code

 

posted @ 2020-11-23 17:21  Bo7-w  阅读(83)  评论(0编辑  收藏  举报