Python-迴文檢測和布林操作(and,or,not)
阿新 • • 發佈:2019-02-02
下面是兩個函式都是做迴文檢測的,isP()是精簡版,isP1()是解析版.
def isP(s):
if len(s)<=1:return True
else:return s[0]==s[-1] and isP(s[1:-1])
def isP1(s,indent):
print indent,"A",s
if len(s)<=1:
print indent,'B'
return True
else:
ans=s[0]==s[-1] and isP1((s[1:-1]),indent+indent)
print indent,'C',ans
return ans
isP1("asdffssa"," ")
一些思考:
1.else:return s[0]==s[-1] and isP(s[1:-1])
看起來挺嚇人的,在我開啟百度準備搜一下的瞬間想明白的,如果說Python裡面一切都是物件的話,那麼return的內容s[0]==s[-1] and isP(s[1:-1])
可以被看成一個物件,也就是一個布林操作,變簡單了不是嗎.
2.關於s[0]==s[-1] and isP(s[1:-1])
這個布林操作有一些細節,也就是為什麼當檢查到第一組不同的字母時停止繼續遞迴的原因.
5.2. 布林操作 — and, or, not
這些是布林操作,按升序優先排序:操作 | 結果 | 注
x or y | 如果x為假,那麼返回y,否則返回x | (1)
x and y | 如果x為假,那麼返回x,否則返回y | (2)
not x | 如果x為假,那麼返回True,否則返回False | (3)注:
(1) 這是一個短路操作符,因此只有第一個引數為False時才計算第二個引數。
(2)這是一個短路操作符,因此只有第一個引數為True時才計算第二個引數。
(3)not比非布林操作符的優先順序低,因此not a == b解釋為not (a == b),a == not b是一個語法錯誤。