目錄:
一、課堂小練習
二、"懸掛else"
三、條件表示式(三元操作符)
四、斷言
五、課時08課後習題及答案
******************
一、課堂小練習
******************
現在來考考大家,按照100分制,90分以上成績為A,80到90為B,60到80為C,60以下為D,寫一個程式,當使用者輸入分數,自動轉換為ABCD的形式列印。
#p4_1.py score = int(input('請輸入一個分數:')) if 100 >= score >= 90: print('A') if 90 > score >= 80: print('B') if 80 > score >= 60: print('C') if 60 > score >= 0: print('D') if score < 0 or score > 100: print('輸入錯誤!')
#p4_2.py
score = int(input('請輸入您的分數:')) if 100 >= score >= 90: print('A') else: if 90 > score >= 80: print('B') else: if 80 > score >= 60: print('C') else: if 60 > score >= 0: print('D') else: print('輸入錯誤!')
#p4_3.py score = int(input('請輸入一個分數:')) if 100 >= score >= 90: print('A') elif 90 > score >= 80: print('B') elif 80 > score >= 60: print('C') elif 60 > score >= 0: print('D') else: print('輸入錯誤!')
結果分析:假如輸入的分數是98,按照第一種方法是第一次就判斷成功,接著列印字母A,但接著會進行第二、三、四、五次判斷,然後這些都不符合,退出程式。若採用第二、三種方法,那麼在第一次判斷成立並列印字母A後,接著不需要再進行任何判斷就推出程式。可見雖然是很簡單的例子,但就輸入98來說,假設第一次判斷會消耗一個CPU的時間,那麼第一種方法比第二和第三種方法多消耗了400%的時間!!!
*****************
二、"懸掛else"
*****************
什麼叫“懸掛else”?
我們舉個例子,初學C語言的朋友可能很容易被以下程式碼欺騙:
if ( hi > 2 ) if( hi > 7 ) printf(“好棒!好棒!”); else printf(“切~”);
在這個例子中,雖然else很想和外層的if匹配,但事實上按照C語言的就近匹配原則這個else是屬於內層if的。在Python中強制使用縮排,所以在Python中製造出懸掛else的問題是不可能的。
*********************************
三、條件表示式(三元操作符)
*********************************
有了這個三元操作符的條件表示式,你可以使用一條語句來完成以下的條件判斷和賦值操作:
x, y = 4, 5 if x < y: small = x else: small = y
例子可以改進為:
small = x if x < y else y
三元操作符語法:
a = x if 條件 else y (表示當條件為True的時候,a的值賦值為x,否則賦值為y。)
**********
四、斷言
**********
assert這個關鍵字我們稱之為“斷言”,當這個關鍵字後邊的條件為假的時候,程式自動崩潰並丟擲AssertionError的異常。
舉個例子:
>>> assert 3<4 >>> assert 3>4 Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> assert 3>4 AssertionError
一般來說我們可以用Ta在程式中置入檢查點,當需要確保程式中的某個條件一定為真才能讓程式正常工作的話,assert關鍵字就非常有用了。
*******************************
五、課時08課後習題及答案
*******************************
測試題:
0. if not (money < 100): 上邊這行程式碼相當於?
1. assert 的作用是什麼?
2. 假設有 x = 1,y = 2,z = 3,請問如何快速將三個變數的值互相交換?
3. 猜猜 (x < y and [x] or [y])[0] 實現什麼樣的功能?
4. 你聽說過成員資格運算子嗎?
動動手:
0. 視訊中小甲魚使用 if elif else 在大多數情況下效率要比全部使用 if 要高,但根據一般的統計規律,一個班的成績一般服從正態分佈,也就是說平均成績一般集中在 70~80 分之間,因此根據統計規律,我們還可以改進下程式以提高效率。
1. Python 的作者在很長一段時間不肯加入三元操作符就是怕跟C語言一樣搞出國際亂碼大賽,蛋疼的複雜度讓初學者望而生畏,不過,如果你一旦搞清楚了三元操作符的使用技巧,或許一些比較複雜的問題反而迎刃而解。
請將以下程式碼修改為三元操作符實現:
x, y, z = 6, 5, 4 if x < y: small = x if z < small: small = z elif y < z: small = y else: small = z
答案:
測試題答案:
assert這個關鍵字我們稱之為“斷言”,當這個關鍵字後邊的條件為假的時候,程式自動崩潰並丟擲AssertionError的異常。
什麼情況下我們會需要這樣的程式碼呢?當我們在測試程式的時候就很好用,因為與其讓錯誤的條件導致程式今後莫名其妙地崩潰,不如在錯誤條件出現的那一瞬間我們實現“自爆”。
一般來說我們可以用Ta在程式中置入檢查點,當需要確保程式中的某個條件一定為真才能讓程式正常工作的話,assert關鍵字就非常有用了。
2. 假設有 x = 1,y = 2,z = 3,請問如何快速將三個變數的值互相交換?
x, y, z = z, y, x
3. 猜猜 (x < y and [x] or [y])[0] 實現什麼樣的功能?
這其實是 Python 的作者還沒有為 Python 加入三元操作符之前,Python 社群的小夥伴們靈活的使用 and 和 or 搭配來實現三元操作符的功能,這裡邊有涉及到列表和切片的知識,這部分知識很快就會講解,迫不及待的朋友可以先稍微預習下。
4. 你聽說過成員資格運算子嗎?
Python 有一個成員資格運算子:in,用於檢查一個值是否在序列中,如果在序列中返回 True,否則返回 False。
>>> name = '小甲魚' >>> '魚' in name True >>> '肥魚' in name False
動動手答案:
0. 視訊中小甲魚使用 if elif else 在大多數情況下效率要比全部使用 if 要高,但根據一般的統計規律,一個班的成績一般服從正態分佈,也就是說平均成績一般集中在 70~80 分之間,因此根據統計規律,我們還可以改進下程式以提高效率。
score = int(input('請輸入一個分數:')) if 80 > score >= 60: print('C') elif 90 > score >= 80: print('B') elif 60 > score >= 0: print('D') elif 100 >= score >= 90: print('A') else: print('輸入錯誤!') 複製程式碼
1. Python 的作者在很長一段時間不肯加入三元操作符就是怕跟C語言一樣搞出國際亂碼大賽,蛋疼的複雜度讓初學者望而生畏,不過,如果你一旦搞清楚了三元操作符的使用技巧,或許一些比較複雜的問題反而迎刃而解。
small = x if (x < y and x < z) else (y if y < z else z)