今天碰到一道有意思的題目,看了之後發現自己對python與或的理解還是欠缺,如下。
題目:求1+2+…+n
如果不加限制,我們有很多方法計算該值,例如高斯公式,遞迴等。
我們思考下遞迴的解法:
def
sumnums_if
(self, n:
int)
->
int:
ifnot n:
return n
return n + self.sumnums_if(n-
1)
即當n等於0的時候,開始自底向上返回。
那麼,當限制了if語句的時候,我們如下實現這個判斷呢?
實際上,我們可以使用and或者or運算子實現該操作,**如下:
def
sumnums
(self, n:
int)
->
int:
return n and n + self.sumnums(n -
1)
and運算子:每一項都為true,則整個表示式為true,當執行到某乙個false項時,不再往後執行,直接返回false
or運算子:與and不用的是,or運算子只要表示式中有一項為true,則整個表示式為true,即執行到某乙個true項時,也不再向後執行,直接返回true
我們來看點例子:
1、二元運算:
如果乙個true,乙個false或兩個false:
return
true
andfalse
# 返回false
return
true
o***lse
# 返回true
如果兩邊都是true,則and返回右邊的,or返回左邊的:
return1or
2# 返回1
return
1and
2# 返回2
2、多元運算:從左到右,兩兩運算,兩兩運算時邏輯見上面二元運算
例如下面三句**,第一句返回1,第二句返回3,第三句返回2
return1or
2or3#返回1
return
1and
2and
3#返回3
return
1and2or
3#返回2
我們在回頭看下上面的and型遞迴實現,是不是豁然開朗了呢~ (與運算) (或運算) (異或運算)
即 兩個運算元同為 1 的時候為1 0 0 0 1 0 1 0 1 1 1 1 1 即 兩個運算元中至少有乙個為 1 的時候為1 0 0 0 0 1 1 1 0 1 1 1 0 即 兩個運算元不同的時候為1 運算規則 1 0 0 1 即 對乙個二進位制數按位取反,即將0變1,1變0。將乙個運算物件的...
與運算( ) 或運算( ) 異或運算( )
預算規則 0 0 0 0 1 0 1 0 0 1 1 1 即 兩個同時為1,結果為1,否則為0 例如 3 5 十進位制3轉為二進位制的3 0000 0011 十進位制5轉為二進位制的5 0000 0101 結果 0000 0001 轉為十進位制 1 即 3 5 1 運算規則 0 0 0 0 1 1 ...
與運算( ) 或運算( ) 異或運算( )
一 與運算子 預算規則 0 0 0 0 1 0 1 0 0 1 1 1 即 兩個同時為1,結果為1,否則為0 例如 3 5 十進位制3轉為二進位制的3 0000 0011 十進位制5轉為二進位制的5 0000 0101 結果 0000 0001 轉為十進位制 1 即 3 5 1 二 或運算 運算規則...