1. 程式人生 > >Python-迴文檢測和布林操作(and,or,not)

Python-迴文檢測和布林操作(and,or,not)

下面是兩個函式都是做迴文檢測的,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是一個語法錯誤。