一、運算子
1、 數學運算
+ 加法 - 減法 * 乘法 / 除法 // 除法取整 % 除法取餘 ** 冪
2、 賦值運算子
a +=1 等價於 a = a + 1 a -=1 等價於 a = a - 1 a *=2 等價於 a = a * 2 a /=2 等價於 a = a / 2 a //=2 等價於 a = a // 2 a %=2 等價於 a = a % 2 a **=2 等價於 a = a ** 2
3、 比較運算子
> 大於 < 小於 >= 大於等於 <= 小於等於 = 等於 != 不等於
舉例:
# 輸入a,b,c三個數字,取出最大的那個數
a=int(input("a:")) b=int(input("b:")) c=int(input("c:")) max=0 # 這裡可以不定義,也可以定義任意值;我只是為了看看作用域問題,我是菜鳥 if a>=b: max=a if max >= c: pass else: max=c else: max=b if max >= c: pass else: max=c print("最大數字是:",max)
4、 邏輯運算子
邏輯運算子是用來做邏輯計算的。像我們上面用到的比較運算子,每一次比較其實就是一次條件判斷,都會相應的得到一個為True或False的值。而邏輯運算子的的運算元就是一個用來做條件判斷的表示式或者變數。方法:先把所有and算出來,再算or;同時結合短路原則。
結果為True的時候,我們一般稱 結果為 真, 邏輯運算子會有一個真值表。
短路原則:
對於and,如果前面的第一個條件為假,那麼這個and前後兩個條件組成的表示式的計算結果就一定為假,第二個條件就不會被計算;
對於or,如果前面的第一個條件為真,那麼這個or前後兩個條件組成的表示式的計算結果就一定為真,第二個條件就不會被計算;
5、 成員運算子
not in 、in (判斷某個單詞裡是不是有某個字母)
成員運算子用來判斷一個元素是否是另一個元素的成員。 比如說我們可以判斷 “hello” 中是否有 “h”, 得到的結果也是True 或者 False。
>>> "h" in "hello" # 這裡的意思是 “h” 在“Hello” 中,判斷後結果為True True >>> "h" not in "hello" # 這裡的意思是 “h” 不在“Hello” 中,判斷後結果為False False
6、 身份運算子
is、is not(講資料型別時講解,一般用來判斷變數的資料型別)
用來判斷身份。
>>> a = 123456 >>> b = a >>> b is a #判斷 a 和 b 是不是同一個 123456 True >>> c = 123456 >>> c is a #判斷 c 和 a 是不是同一個 123456 False >>> c is not a #判斷 c 和 a 是不是不是同一個 123456 True
這裡我們首先將123456賦值給a,後有將a賦值給b, 這樣其實是 a和b 的值都是123456, 但是後面c的值也是123456,為什麼 第一次a is b 的結果為True ,c和 a 的結果為False 呢?
原因是這樣的: 我們知道程式是執行在記憶體裡的,第一次 我們將123456賦值給a的時候,其實是在記憶體裡開闢了一塊空間,將123456放在這塊空間裡,為了找到這裡的123456, 會有一個指向這塊空間的地址,這個地址叫做記憶體地址,是123456儲存在記憶體中的地址。a其實指向的就是儲存123456的記憶體空間的地址。執行了b=a,就是讓b指向的地址和a一樣。之後我們執行了 c = 123456 ,這裡就會再開闢一塊記憶體空間,並將指向該空間的記憶體地址賦值給c ,這樣的話 ,a和b 指向的是同一個123456, c 指向的是另外一個123456 。
7、 位運算子
我們平時用到的數字在計算機中是以二進位制表示的, 這個二進位制數叫做這個數的機器數。機器數是帶符號的,在計算機用一個數的最高位存放符號, 正數為0, 負數為1.
比如:十進位制中的數 +7 ,計算機字長為8位,轉換成二進位制就是00000111。如果是 -7 ,就是 10000111 。那麼,這裡的 00000111 和 10000111 就是機器數。
原碼:
原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其餘位表示值. 比如如果是8位二進位制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符號位. 因為第一位是符號位, 所以8位二進位制數的取值範圍就是: 11111111 到 01111111 即 -127 到 127
反碼:
反碼的表示方法是: 正數的反碼是其本身 負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
補碼:
補碼的表示方法是: 正數的補碼就是其本身 負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]補
[-1] = [10000001]原 = [11111110]反 = [11111111]補
案例:
我們設定a=234 (二進位制為 11101010), b=44 (二進位制為 101100)
& 按位與運算子:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0
a = 11101010 = 234
b = 00101100 = 44
a & b = 00101000 = 40
| 按位或運算子:只要對應的二個二進位有一個為1時,結果位就為1。
a = 11101010 = 234
b = 00101100 = 44
a | b = 11101110 = 238
^ 按位異或運算子:當兩對應的二進位相異時,結果為1
a = 11101010 = 234
b = 00101100 = 44
a ^ b = 11000110 = 198
~ 按位取反運算子:對資料的每個二進位制位取反,即把1變為0,把0變為1
a = 10000000 = 128
~a = 01111111 = 127
<< 左移動運算子:運算數的各二進位全部左移若干位,由"<<"右邊的數指定移動的位數,高位丟棄,低位補0。
a = 10110011 = 179
a << 2 = 1011001100
>> 右移動運算子:把">>"左邊的運算數的各二進位全部右移若干位,">>"右邊的數指定移動的位數;低位丟棄,高位補0;
a = 10110011 = 179
a >> 2 = 00101100 = 44
二、運算子優先順序
運算子 描述
** 指數 (最高優先順序)
~ + - 按位翻轉, 一元加號和減號 (最後兩個的方法名為 +@ 和 -@)
* / % // 乘,除,取模和取整除
+ - 加法減法
>> << 右移,左移運算子
& 位 `AND`
^ | 位運算子
<= < > >= 比較運算子
<> == != 等於運算子
= %= /= //= -= += *= **= 賦值運算子
is is not 身份運算子
in not in 成員運算子
not and or 邏輯運算子
-
and和or判斷語句時,遵循短路原則;即:and前面條件為假,後面的不去判斷;or前面條件為真,後面條件不去判斷;
-
運算子那麼多,優先順序記不住怎麼辦? 使用小括號。通過使用小括號,我們就可以很方便的進行優先順序的區分。