跟黃哥學習python第五章
順序結構、判斷結構
順序結構
順序結構的程序設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執行順序是自上而下,依次執行。
通俗一點的說法,就是代碼從上到下一行一行的執行。請看下面求圓面積代碼,代碼中,請注意,乘法的優先順序高於乘法,所以乘法放前面後面都可以。如果只有順序結構,這樣程序的靈活性不夠,能解決的問題太少,計算機科學家設計編程語言的時候,設計了可以做選擇的判斷結構 和可以反覆做一件事兒的循環結構。
布爾表達式(邏輯表達式)
布爾表達式是一個能計算出一個布爾值True或False的表達式。
布爾類型
布爾類型的類型名是bool類,這個類型只有兩個字面量 True 和 False(注意大小寫形式),
它們表示兩個邏輯常量,True 計算出 True(表示邏輯值「真」),False 計算出 False(表示邏輯值「假」)。
python中任何對象,在if 語句,while 語句,或邏輯操作符中,都可以檢測出真假值。
下面的值,都會被檢測出一個為假的值。
None,False,0, 0.0,空字元串, 空元組(), 空列表[], 空字典{}。instances of user-defined classes, if the class defines a bool() or len() method, when that method returns the integer zero or bool value False.除上面的以外,都為真。
是真還是假,用bool類檢測一下,就知道!邏輯運算符
Boolean Operations — and, or, notnn運算符(Operation) 計算結果(Result) 優先順序nx or y if x is false, then y, else x (1)nx and y if x is false, then x, else y (2)nnot x if x is false, then True, else False (3)nn邏輯運算符優先順序,not 最高,and 第二, or 第三。nnot 運算符優先順序低於其它非邏輯運算符,not a == b 相當於 not (a == b),n如果寫成 a == not b 就會報語法錯誤。n邏輯短路,計算2個值和一個邏輯運算符組成的表達式。nx or y 只有當 bool(x) 為False時,才會計算後面的y,否則直接得出表達式的值。n下面的代碼發生短路情況,0為除數不合法,但發生短路,3/0沒有被計算。n>>> 1 or 3 / 0 n 1nx and y 只有當 bool(x) 為True時,才會計算後面的y。n下面的代碼發生短路情況n>>> 0 and 3 / 0n 0nn特別提示:初學者在布爾表達式中,有幾個糾結。n有的朋友說,下面這樣的表達式為啥不發生短路。為啥結果不是0,而是[]n>>> 0 and 3 / 0 or None and 1 or []n []n黃哥的解答是,邏輯短路,計算2個值和一個邏輯運算符組成的表達式,0 and 3 / 0 發生了短路,n0 and 3 / 0計算結果為0,但整個表達式求值沒有完,要繼續計算 0 and 3 / 0 or None and 1 or [] 變為n0 or None and 1 or [],前面說了and 優先順序高於or,0 or None and 1 or []相當於n0 or (None and 1) or [],進一步簡化,0 or None or [],再看上面nx or y if x is false, then y, else x, 所以0 or None or [] 計算為None or []n最後結果為[]nn第二個糾結是:n>>> 3 and 4n 4nn結果為4,有的朋友糾結說,為啥不是True。n文檔上說了x and y if x is false, then x, else y。n
真值表
關係運算符(也稱比較運算符)
運算符 含義n< 小於n<= 小於等於n> 大於n>= 大於等於n== 相等n!= 不想等nis 是不是同一個對象nis not negated object identitynnx < y < z 想當於 x < y and y < zn關係運算符的結果有一個真假值。n>>> 3 < 4nTruen>>> 3 > 4nFalsen
運算符的結合和優先順序
前面學習的算術運算符,邏輯運算符, 關係運算符可以結合起來,組成表達式。
表達式可以為變數賦值,也可以作為if 語句,while 語句後面的布爾表達式使用,所謂的條件判斷。下面的圖片,展示了python所有的運算符的優先順序,從上往下優先順序熱來熱高,同一個行運算符從左到右運算(除乘方外)。
乘方是從右往左計算。請看一面表達式。 1 + 2 * 5 > 3 * (2 + 6) - 1 上面表達式由算術運算符和關係運算符組合起來的,由於算術運算符優先順序高於關係運算符,所以表達式
相當於(1 + 2 * 5) > (3 * (2 + 6) - 1) 先分別計算">"左邊和右邊,1 + 2 * 5 先計算2 * 51 + 10 再1 + 10 得11, 3 * (2 + 6) - 1 先計算 2 + 6,得 3 * 8 - 1 再 24 - 1 得23,
1 + 2 * 5 > 3 * (2 + 6) - 1 相當於 11 > 23 ,最後整個表達式的值為False。
特別提醒:如果自己寫複雜表達式,可以用括弧。
判斷結構(也叫選擇結構)
人生充滿著選擇,重要時刻,判斷準確,選擇著正確的方向,會少走很多彎路。
很多朋友,學習編程,選擇了python,是不是經過比較選擇的結果。判斷結構語法形式:
1、if 布爾表達式:n 語句塊nn2、if 布爾表達式:n 語句塊n else:n 語句塊nn3、if 布爾表達式:n 語句塊n elif 布爾表達式:n 語句塊n elif 布爾表達式:n 語句塊n ........n else:n 語句塊nn4、if嵌套 n if 布爾表達式:n 語句塊n if 布爾表達式:n 語句塊n else:n 語句塊n else:n 語句塊n
if判斷結構,以if 關鍵字開頭,中間空一個空格,再跟上布爾表達式,再跟上冒號(:)
if之後的布爾表達式俗稱條件,如果它為真,如果為真,則執行if語句下面縮進的語句塊 (或稱為複合語句)。一般語句塊以4個空格為習慣的縮進(相當於c語言的{})。如果 語句塊暫時不寫語句,可以用pass語句暫佔位置,pass語句是啥也不做的意思。兩路分支判斷
if 布爾表達式: n 語句塊 nelse: n 語句塊 n
這個是if 語句後面的條件為真,則執行下面的語句塊,否則執行else下面的語句塊。
多路分支判斷
if 布爾表達式: n 語句塊 nelif 布爾表達式: n 語句塊 nelif 布爾表達式: n 語句塊 n........ nelse: n 語句塊 n
如果if 語句後麵條件為假,就不執行if下面的語句塊,轉到elif 判斷,如果有一個elif
後面的條件為真,則執行下面的語句,執行完,就跳出判斷結構,繼續下面的語句執行。 如果if elif 語句後面的條件都為假,則執行else 下面的語句塊。代碼解釋:上圖中,第三行代碼,input()函數為python內置函數,直接可以調用, input()函數可以傳遞一個參數,一般是傳遞字元串,提示輸入信息。input作用是 從輸入讀一行,並以字元串的形式返回。前面加float(),是將這樣的字元串("89.8") 轉化為浮點數。4到12行為多路分支判斷結構。
if 嵌套
if 或 if-else 語句中可以是任意語句,當然也可以是if或if-else語句。 如果if 或if-esle 中再包含if 或if-else語句,則稱為if 嵌套。 if 布爾表達式:n 語句塊n if 布爾表達式:n 語句塊n else:n 語句塊n else:n 語句塊n
判斷結構實例:
1、判斷是不是閏年
代表年的數字(如2016)能被4整除但不能被100整除,或能被400整除,那麼這個年份為閏年。 n整除的意思是能除盡,沒有餘數,python中用% 運算符, 2016 % 4 結果為 0。 n將閏年的定義,翻譯為python語言中的邏輯表達式,變數year代表年份。 nyear % 4 == 0 and year % 100 != 0 or year % 400 == 0 n前面說過,關係運算符優先邏輯運算符,邏輯運算符and優先or,所以可以寫成上面的表達式。 n為了清晰,可以寫成(year % 4 == 0 and year % 100 != 0) or (year % 400 == 0) n
習題:
特別提示:只有參加黃哥python遠程視頻培訓班 或參加黃哥收費答疑群,才能得到習題和輔導。
點擊黃哥python培訓試看視頻播放地址
推薦閱讀:
TAG:Python |