Python 基础之python运算符

一.运算符

 1.算数运算符 + - * / // % **

var1 = 5
var2 = 8

#(1)  +
res = var1 + var2
print(res)

# (2)  -  
res = var1 - var2
print(res)

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

# (4) / ,结果一定是小数)
var1 = 8
var2 = 2
res = var1 / var2
print(res)

# (5) // 地板除 (整除)
var1 = 8
var2 = 2
res = var1 // var2
print(res)

# 如果相除的两个含有小数,那么就在结果上加上.0
var1 = 8.0
var2 = 2
res = var1 //var2
print(res)

#(6) % 取余
print("<=================>")
var1 = 7
var2 = 4
res = var1 % var2
print(res)

print("<================>")
var1 = -7
var2 = 4
res = var1 % var2
print(res) #1
# -3 +4 =1

print("<===================>")
var1 = 7
var2 = -4
res = var1 % var2
print(res) #-1
# 3-4 = -1

# (7) ** 幂运算
var1 = 3
res = var1 ** 3
print(res)

 

2.比较运算符 > < >= <= == !=

#(1) >  大于 
var1 = 10
var2 = 20
res = var1 > var2
print(res)

# (2) <  小于
var1 = 10
var2 = 20
res = var1 < var2
print(res)

#(3) >=  大于等于
var1 = 20
var2 = 20
res = var1 >= var2
print(res)

#(4) <=  小于等于
var1 = 20
var2 = 20
res = var1 <= var2
print(res)

#(5) ==  等于
var1 = 14
var2 = 13
res = var1 == var2
print(res)
 
'''
2个等号,不是一个等号,一个等号是在做变量的赋值,两个是比较是否相同
if var1 == var2
   print(123)
'''

# (6) !=  不等于
var1 = 14
var2 = 13
res = var1 != var2
print(res)

 

3.赋值运算符 = += -= *= /= //= **=

 

# (1)  =  将右边的值赋值给左侧
var1 = 19
var2 = 18
var2 = var1
print(var2)

# (2)  +=  加等于
var1 +=var2
#var1 = var1 + var2  var1 = 19 + 20 = 39
print(var1)

#(3)  -=  减等于
var1 -= var2
#var1 = var1 - var2
print(var1)


#(4) *=  减等于
var1 *= var2
#var1 = var1 * var2
print(var1)

#(5)  /=  除等于
var1 /= var2
# var1 = var1 / var2
print(var1)

# (6)  //=  整除等于
var1 //= var2
# var1 = var1 // var2
print(var1)


#(7)  %=  取余等于
var1 %= var2
# var1 = var1 % var2
print(var1)

# (8)  **=  幂等于
var1 **= var2
# var1 = var1 ** var2
print(var1)

4.成员运算符 in not in (针对容器类型)

 

""" 如果是字符串,必须是一个连续的片段才能判断成功"""

# (1) 对于str
# str
strvar = "英雄爱江山,更爱美人"
res = "爱江山" in strvar
print(res)


# (2) 对于list  tuple  set
listvar = [1,2,34,56,7]
res = 2 in listvar
print(res)

res = 55 not in listvar
print(res)

tuplevar = (323,31231,32131,3121)
res = 432 not in tuplevar
print(res)

setvar = {(1,2,3),(4,5,6),7}
res = (1,2,3) in setvar
print(res)

#(3)对于dict (in  not in 判断字典是字典的键)
dictvar = {"hxd":"","sch":""}
res  = "" not in dictvar  #True 因为大不在键里,所以是not in
print(res)
res = "hxd" in dictvar
print(res)

res = "aaa" not in dictvar
print(res)

5.身份运算符 is is not

(检测两个数据在内存当中是否是同一个值)

var1 = 6
var2 = 6
print(id(var1),id(var2))

var1 = ""
var2 = "不好"

#is 用来判断2个变量的地址是否一致
res = var1 is var2
print(res)

res = var1 is not var2
print(res)

# var1 == var2 var1 is var2 区别

一个是在比较两个值是否相同
一个是在比较两个值地址是否相同

6.逻辑运算符 and or not

# (1) and 逻辑与
'''
全真则真,一假则假
'''
res = True and True
print(res)
res = True and False
print(res)
res = False and True
print(res)
res = False and False
print(res)
#第一个为真,其他都为假

#(2) or 逻辑或
''' 全假则假,一真则真'''
res = True or True
res = True or False
res = False or False
res = False or True
print(res)


# (3) not 逻辑非
''' 真变假 假变真'''
res = not False
res = not True
print(res)

#(4)逻辑短路 (后面的代码就不走了)
'''
#两种情况
res = False and 布尔值
res = True or 布尔值
'''

#print 默认返回一个None None的布尔值是假
# res = False and print(1)
print("============================")
res = True and print(2)
print(res)
print("=========================")
res = True or print(3)   #当最后结果为真的时候就不会返回None
print(res)
print("===========================")
res = False or print(4)
print(res)
print("==========")
res = True and 3
print(res)
# 逻辑运算符优先级
## python 语言支持逻辑运算符, 以下假设变量a 10, b20:
##运算符  逻辑表达式  描述 实例
##and  x and y    布尔"" - 如果 x Falsex and y 返回 False,否则它返回 y 的计算值。    (a and b) 返回 20
##or   x or y 布尔"" - 如果 x True,它返回 x 的值,否则它返回 y 的计算值。 (a or b) 返回 10
##not  not x  布尔"" - 如果 x True,返回 False 。如果 x False,它返回 True。   not(a and b) 返回 False

''' () > not > and > or '''
# (5+6)*37
res = 5 or 6 and 7
print("5 or 6 and 7等于:",res)
#5 or 7 => 7

res = not (5 or 6)and 7
#| 5 or 6=> 5 | not 5 => False | False and 7 => False
print("not (5 or 6)and 7 等于:%s" %(res))

res = 5>6 or 7<8 and 9>10 or 11<12
print(res)
'''
# res = 5>6 or 7<8 and 9>10 or 11<12
#下面是解析:
False or True and False or True
False or False or True
False or True => True
'''

print(res)

'''
有一种情况不用考虑and和or优先级问题,
就是or 端口,比如 True or .......=> 结果一定为Ture
'''

# #数据类型的判断 isinstance
'''
isinstance (要判断的数据,判断的类型)要么返回真, 要么返回假
isinstance (要判断的数据,(元组,放在各种类型,满足一个条件即为真))

'''
# 5 int 类型的吗?
res = isinstance(5,int)
print(res)

res = isinstance("2233",list)
print(res)

# 有一个类型满足 返回真 一个都不满足 返回假
res = isinstance(5,(int,list,tuple,str))
print(res)

7.位运算符 & | ~ ^ << >>

var1 = 19
var2 = 15
#(1)  & 按位与
res = var1 & var2
print(res)
"""
000...10011
000...01111
000...00011
"""

# (2) | 按位或
res = var1 | var2
print(res)

"""
000...10011
000...01111
000...11111
"""

#(3) ^ 按位异或
res = var1 ^ var2
"""
000...10011
000...01111
000...11100
"""
print(res)

#(4) << (左移  右边的值相当于乘以2的几次幂 n<<m 相当于n2m次幂
res = 5 << 1
res = 5 << 2
print(res)
'''
000...101
000...1010
'''

# (5) >> 右移 (右移 右边的值相当于除以2的几次幂 n <<m 相当于n2m次幂)
res = 5 >>1 #5 // 2 1次幂 => 2
res = 5 >>2 #5 // 2 2次幂 => 1
res = 5 >>3 #5 // 2 3次幂 => 0
print(res)

'''
000...101
000....10 => 2
000....01 => 1
'''

#(6)  ~ 按位非 (按位非 操作的二进制的补码 对二进制的每一位进行取反,包括符号位) 公式:-(n+1)
res = ~19
print(res)
'''
000...10011 (补码)
111...01100 (按位非)

#给补码求原码
111.。。01100

100...10011 (反码)
100...10100  (原码= 反码+1)
十进制 => -20
'''
res = ~(-19)
print(res)
'''
1000...10011 (原码)
1111...01100  (反码)
1111...01101  (补码)
#现在 进行按位非
0000...10010
因为高位都是0是正数
原码=反码=补码
0000...10010 (原码)

 

二.运算符的优先级

() 括号优先级最高
** 优先级其次
= 优先级最低

一元元算符:同一时间只操作一个数字的(- ~)
二元运算符:同一时间能操作二个数字的(+,-,...)
~19+5

一般来说,一元运算符大于二元运算符的优先级

+ - * /   =>  * / 大于 + -
() not and or =>  not > and  > or

如果都是二级运算符:
算数运算符 > 位运算符 > 比较运算符 > 身份运算符 > 成员运算符 > 逻辑运算符
赋值运算符 作为最后等号右边的值算好后进行赋值

res = 5+5 << 6 // 3 is 40 and True
print(res)

'''
5+5 << 2 is 40 and True
10 <<2 is 40 and True
40 is 40 and True
True and True
True
'''

 

posted @ 2018-07-15 11:20  pycoder_hsz  阅读(368)  评论(0编辑  收藏  举报