<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 3.7 Python 布爾表達式用作控制結構* 有了順序、分支和循環控制結構,原則上已足以表達所有算法。然而,為了在解決某些問題時編程更加方便,各種語言還提供了若干其他控制結構。本節介紹 Python 的一個特色, 即布爾表達式可當作控制結構來用。 編程語言中的表達式本來只是用來產生值的,布爾表達式也不例外。布爾表達式的常規 用法是計算產生 True 或 False,并用在分支和循環控制結構當中。但 Python 中的布爾表達式 還可以用作控制結構,這是由 Python 在底層計算布爾表達式時所采用的計算策略決定的。為了理解布爾表達式如何用作控制結構,需要了解 Python 是如何實現布爾運算的,詳情見第 2章。 考慮用一個交互式循環來實現“yes or no”功能:程序詢問用戶一個問題,用戶輸入回 答。只要用戶輸入的字符串以“y”或者"Y"開頭,就算該用戶回答是 yes,程序再進行合適的 處理;否則就跳過處理過程。這個功能很容易用 while 循環語句實現: ``` answer = raw_input("Want to play?(yes or no) ") while answer[0] == "y" or answer[0] == "Y": play() answer = raw_input("Want to play?(yes or no) ") ``` 顯然這里 while 語句中的條件表達式等同于自然語言中的“用戶輸入以 y 打頭或者用戶 輸入以 Y 打頭”。然而,自然語言一般不會這么羅嗦,更簡潔的表達是“用戶輸入以 y 或 Y 打頭”。可惜這種簡明的表達在編程語言中常常是錯誤的,初學編程者受自然語言的影響,很 容易寫出下面這樣的布爾表達式: ``` while answer[0] == "y" or "Y": ``` 上面這個布爾表達式的寫法在大多數語言中都導致語法錯誤,因此能夠被編譯器或解釋器發 現,不會造成嚴重后果。但是在 Python 中,這個表達式的語法卻完全沒有問題。然而,它的 語義卻很有問題,事實上,這個布爾表達式會導致一個無窮循環!原因就在于 Python 在底層 實現布爾運算時所采取的“捷徑”策略。 我們來看表達式 answer[0] == "y" or "Y"的計算。布爾運算符 or 所連接的兩個表達式分別 是 answer[0] == "y"和"Y",左邊的表達式是真正的布爾表達式,計算結果為 True 或 False;而 右邊的表達式是一個字符串,它的值就是固定的非空串"Y"。根據第 2 章中介紹的 Python 對 運算符 or 的計算規則:若 answer[0] == "y"計算到 True,則整個布爾表達式的值就是 True, 不去考慮右邊的表達式;若 answer[0] == "y"計算到 False,則整個布爾表達式返回值"Y",這 個非空串被 Python 視為 True。總之,不管用戶輸入的是什么,表達式 answer[0] == "y" or "Y" 永遠為真,亦即 while 循環是無窮循環。 Python 的這個特性對初學者來說是個潛在的陷阱,很容易犯錯誤。當然,Python 之所以 如此設計,也有它的理由,那就是布爾表達式可以用作控制結構,在某些情況下可以寫出更 簡明的代碼。例如考慮這種需求:程序要求用戶輸入一個字符串,如果用戶沒有輸入數據就 直接按了回車鍵,則程序采用缺省值"Python"。實現這種需求的代碼如下: ``` ans = raw_input("What's your favorite? [Python] ") if s != "": favorite = ans else: favorite = "Python" ``` 利用字符串可被 Python 解釋為布爾值的特性,上面代碼中 if 語句的條件可以簡化成: ``` ans = raw_input("What's your favorite? [Python] ") if ans: favorite = ans else: favorite = "Python" ``` 當用戶直接按回車,則 ans 為空串,并被 Python 解釋為 False,從而 favorite 被賦值為缺省值"Python"。再利用布爾運算 or 的計算捷徑規則,代碼可以進一步簡化為: ``` ans = raw_input("What's your favorite? [Python] ") favorite = ans or "Python" ``` 根據 or 的計算規則,此處第二行語句中的 ans or "Python"等同于一個 if-else 結構,即:若 ans 非空,就直接返回它的值;若 ans 為空串,則返回"Python"。這就是我們所說的“布爾表達式 用作流程控制結構”。 順便說一下,如果考慮到 ans 其實就是函數 raw_input 的返回值,這個例子最終可以精簡 成一行代碼: ``` favorite = raw_input("What's your favorite? [Python] ") or "Python" ``` 與上面第一個版本(5 行代碼)相比,顯然代碼量大大減少了。看上去似乎不錯,但其實程 序的可讀性也大大降低了,因為最后這個一行語句的版本對初學者來說是很難理解的。從良 好編程風格的角度說,寧可多寫幾條語句,也要保證程序的可讀性和以理解性。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看