課時8:了不得的分支和循環2

目錄:
1、課堂小練習shell

2、"懸掛else"測試

3、條件表達式(三元操做符)spa

4、斷言code

5、課時08課後習題及答案視頻

 

******************blog

1、課堂小練習input

******************io

如今來考考你們,按照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,但接着會進行第2、3、4、五次判斷,而後這些都不符合,退出程序。若採用第2、三種方法,那麼在第一次判斷成立並打印字母A後,接着不須要再進行任何判斷就推出程序。可見雖然是很簡單的例子,但就輸入98來講,假設第一次判斷會消耗一個CPU的時間,那麼第一種方法比第二和第三種方法多消耗了400%的時間!!!ast

*****************

2、"懸掛else"

*****************

什麼叫「懸掛else」?
咱們舉個例子,初學C語言的朋友可能很容易被如下代碼欺騙:

if ( hi > 2 ) if( hi > 7 ) printf(「好棒!好棒!」); else printf(「切~」);

在這個例子中,雖然else很想和外層的if匹配,但事實上按照C語言的就近匹配原則這個else是屬於內層if的。在Python中強制使用縮進,因此在Python中製造出懸掛else的問題是不可能的。

*********************************

3、條件表達式(三元操做符)

*********************************

有了這個三元操做符的條件表達式,你可使用一條語句來完成如下的條件判斷和賦值操做:

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。)

**********

4、斷言

**********

 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關鍵字就很是有用了。

*******************************

5、課時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

 

答案:

 

測試題答案:

0. if not (money < 100): 這行代碼至關於?
if money >= 100:
 
1. assert 的做用是什麼? 
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)
相關文章
相關標籤/搜索