python-day2-運算符

# ### 變量的緩存機制 (僅對python3.6版本負責)

# -->Number 部分(int,float.bool,complex)
# 1.對於整數而言,-5~正無窮範圍內的相同值,id一致
var1 = 10
var2 = 10
var1 = -100
var2 = -100
print(id(var1),id(var2))

# 2.對於浮點數而言,非負數範圍內的相同值 id一致
var1 = 0.15
var2 = 0.15
var1 = - 1.6
var2 = - 1.6
print(id(var1),id(var2))


# 3. 布爾值而言,值相同情況下,id一致
var1 = True
var2 = True
print(id(var1),id(var2))

# 4.複數在 實數+虛數 這樣的結構中永不相同(只有虛數的情況下例外)
var1 = 3+4j
var2 = 3+4j
var1 = 8j
var2 = 8j
var1 = -60j
var2 = -60j
print(id(var1),id(var2))


# -->容器類型部分(str,list,tuple,set,dict)
# 5.字符串 和 空元組 相同的情況下,地址相同
var1 = "您好"
var2 = "您好"
print(id(var1),id(var2))

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

# 6.列表,元組,字典,集合無論什麼情況 id標識都不同 [空元組例外]
var1 = (1,2,3)
var2 = (1,2,3)
print(id(var1) , id(var2))


# ### 運算符
var1 = 10
var2 = 5
# 1.算數運算符 + - * / // % **
# +
res = var1 + var2
print(res)

# -
res = var1 - var2
print(res)

# *
res = var1 * var2
print(res)

# / (結果一定是小數)
res = var1 / var2 # 2.0
print(res)

# // (地板處,取整數)
# 商 = 被除數 // 除數
res = var1 // var2 # 2
# 如果被除數或者除數都是小數,那麼在正常取得這個結果之後加上.0
res = 10.0 // 5 # 2.0
print(res)

# % (取餘)
# 被除數和除數如是負數的求法:
# 如果被除數是負數,先全部看做正整數求出餘數,然後給餘數加負號,最後加上除數
# 如果除數是負數,先全部看做正整數求出餘數,然後給除數加負號,最後餘數加上帶負號的除數
res = var1 % var2
res = 7 % 5 # 2
res = -7 % 5 # -2 + 5 = 3
res = 7 % -5 # 2 + (-5) = -3
res = -7 % -5 #-2 # 被除數和除數都是負數,餘數頭上直接加負號 => -3
print(res)

# **
res = 5 ** 2
print(res)

# 2. 比較運算符: > < >= =< == !=
res = 10 > 8
res = 10 <= 8
res = 10 >= 10
print(res)

# == 是在比較,比較兩個值是否相同, = 是在賦值,將右側的值賦值給左側
res = 10 == 10 # True
res = 10 != 10 # False
print(res)

出處:https://www.cnblogs.com/liucx/

# 3.賦值運算符: = += -= *= /= //= %= **=
# 賦值運算(從右往左看)

# +=
'''var1 = var1 + var2'''
var1 = 8
var2 = 3
var1 += var2
print(var1)

# -=
'''var1 = var1 - var2'''
var1 = 8
var2 = 3
var1 -= var2
print(var1)

# *=
'''var1 = var1 * var2'''
var1 = 8
var2 = 3
var1 *= var2
print(var1)

# /=
'''var1 = var1 / var2'''
var1 = 8
var2 = 3
var1 /= var2
print(var1)

# //=
'''var1 = var1 // var2'''
var1 = 8
var2 = 3
var1 //= var2
print(var1)

# %=
'''var1 = var1 % var2'''
var1 = 10
var2 = 3
var1 %= var2
print(var1)

# **=
'''var1 = var1 **= var2'''
var1 = 10
var2 = 2
var1 **= var2
print(var1)

# 4.成員運算符: in 和 not in (針對容器型數據)
# 字符串
"""需要字符串是一個連續的片段"""
strvar = "天天向上,好好學習"
res = "上" in strvar
res = "天天" in strvar
res = "上學" in strvar # False
res = "上學" not in strvar # True
print(res)

# list tuple set
listvar = ["小劉","小李","小陳","小張"]
tupvar = ("小劉","小李","小陳","小張")
setvar = {"小劉","小李","小陳","小張"}
res = "小劉" in listvar
res = "小李" not in tupvar
res = "aa" in setvar
print(res)

# dict
"""in 或 not in 在字典當中,判斷的是鍵,不是值"""
dic = {"xk":"星空","lt":"藍天","by":"白雲"}
res = "星空" in dic # False
res = "xk" in dic
print(res)


# 5.身份運算符: is 和 is not (檢測兩個數據在內存當中是否是同一個值)
# 整型 -5 ~ 正無窮
var1 = 100
var2 = 100
print(var1 is var2)

# 浮點型 非負數
var1 = 4.8
var2 = 4.8
print(var1 is not var2)

# 相同的布爾值
var1 = True
var2 = True
print(var1 is var2)

# 實數+虛數 這樣結構裏,永遠不同
var1 = 5-90j
var2 = 5-90j
var1 = 90j
var2 = 90j
print(var1 is var2)

# 容器(除了相同的字符串和相同的空元組之外,剩下的所有容器都不一樣)
var1 = ()
var2 = ()
var1 = (1,2)
var2 = (1,2)
print(var1 is var2)



# 6.邏輯運算符 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)

print("====")

# 邏輯短路
"""
短路場景:
(1)True or 表達式
(2)False and 表達式
後面的代碼由於邏輯問題,沒有觸發執行
"""
print(True or print("1111")) # 打印 True
print(False and print("2222")) # 打印 False

res = True or True # True
res = True or False # True
res = False and True # False
res = False and False # False
print(res)
"""
1.先腦補當前這個值的布爾型是True還是False
2.依據真假用來判斷是否短路
3.短路返回前者,否則返回後者
"""
res = 8 or 6 # 8 短路,返回前者
res = 5 and 6 # 6 不短路,返回後者
res = False and 6 # False 短路
res = 6 and True
print(res)

# 邏輯符號的優先級
# () > not > and > or
res = 5 or 6 and 7 # 5 or 7 => 5
res = not 5 or 7 and 8 # False or 7 and 8 =>False or 8 => 8
res = not(5 or 6) and 7 # not 6 and 7 => False and 7 => False
res = 0 or 6 and 7 # 0 or 7 => 7
res = 0 or 6 and 0 # 0 or 0 =>0
res = 1>2 and 3<4 or 7>10 and 10<11 or 11> 12 and 34<1
'''
False and True or False and True or False and False
False or False or False
False or False
False
'''
print(res)

# 7.位運算符: & | ^ << >> ~
# & 按位與
var1 = 19
var2 = 15
res = var1 & var2
print(res) #3
"""
10011 => 19
01111 => 15
00011
"""

# | 按位或
var1 = 19
var2 = 15
res = var1 | var2
print(res) # 31
"""
10011 => 19
01111 => 15
11111
"""

# ^ 按位異或 (相同的兩個值是False,不同的兩個值是True)
var1 = 19
var2 = 15
res = var1 ^ var2
print(res) # 28
"""
10011 => 19
01111 => 15
11100
"""

# << >>
'''<< 左移是做乘法 乘以2的n次冪'''
res = 5 << 2 # 5 * 2 的2次冪 => 20
res = 2 << 3 # 2 * 2 的3次冪 => 16
res = 3 << 1 # 3 * 2 的1次冪 => 6
print(res)
"""
5 => 0000 0101 => 左移2位 => 0001 0100 => 20
2 => 0000 0010 => 左移3位 => 0001 0000 => 16
2 => 0000 0011 => 左移1位 => 0000 0110 => 6
"""

""">> 右移是做除法,除以2的n次冪"""
res = 5 >> 1 # 5 // 2的1次冪 => 2
res = 5 >> 2 # 5 // 2的2次冪 => 1
res = 5 >> 3 # 5 // 2的3次冪 => 0
print(res)
"""
0000 0101 => 右移1位 => 0000 0010 => 2
0000 0101 => 右移2位 => 0000 0001 => 1
0000 0101 => 右移3位 => 0000 0000 => 0
"""

# ~ 按位非
"""公式:-(n+1)"""
res = ~ -19 # 18
res = ~ -10 # 9
res = ~ 10 # -11
print(res)


# 總結
"""
優先級最高的運算符: **
優先級最低的運算符: =

一元運算符優先級 > 二元運算符
一元運算符 : 同一時間只操作一個數字的 - ~
二元運算符 : 同一時間操作兩個數字的 + - * /...

同級運算符比較:
乘除 > 加減
() > not > and > or
(<< >>) > & ^ > |

算術運算符 > 位運算符 > 比較運算符 > 身份運算符 > 成員運算符 > 邏輯運算符 >
賦值運算符做收尾,等所有值運算結束之後,賦值給左側變量.

"""# 用括號包起來,更加方便大家閱讀;
res = (5 + 5) << (6 // 3) is 40 or False
# res = 10 << 2 is 40 or False
# res = 40 is 40 or False
# res = True or False
# res = True
print(res)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章