天天看點

第八課.強大的分支與循環

Python是面向對象的程式設計語言,是由C語言編寫而來的

玩一個輸出分數的小遊戲(判斷分數的等級)

有3種實作方法

第八課.強大的分支與循環
第八課.強大的分支與循環
第八課.強大的分支與循環

這裡的第三種方法是第二種方法的改進,因為第二種方法靠縮進來實作,但是如果條件語句過多,縮進非常不美觀,第三種裡的elif相當于C語言中的else if

Python可以有效避免“懸挂else”

什麼叫“懸挂else”?

我們舉個例子,初學C語言的朋友可能很容易被以下代碼欺騙:

if ( hi > 2 )

         if( hi > 7 )

                  printf(“好棒!好棒!”);

else

         printf(“切~”);

C語言中,Else會和離它最近的if比對,這裡的else會和if( hi > 7 )比對,但是python的縮進完全避免了這個問題

條件表達式(三元操作符)

有了這個三元操作符的條件表達式,你可以使用一條語句來完成以下的條件判斷和指派操作:

x, y = 4, 5

if x < y:

         small = x

else:

         small = y

例子可以改進為:

small = x if x < y else y

斷言(assert)

assert這個關鍵字我們稱之為“斷言”,當這個關鍵字後邊的條件為假的時候,程式自動崩潰并抛出AssertionError的異常。

舉個例子:

>>> assert 3 > 4

以後的課程會講到如何來接收AssertionError異常

第八課.強大的分支與循環

這個就非常類似于C語言中GetLastError()擷取錯誤參數的過程

第八課.強大的分支與循環

一般來說我們可以用Ta在程式中置入檢查點,當需要確定程式中的某個條件一定為真才能讓程式正常工作的話,assert關鍵字就非常有用了。

Whlie 條件:

循環體

這裡的while和C語言中的while是一樣的,非常好了解

雖然說Python是由C語言編寫而來的,但是Ta的for循環跟C語言的for循環不太一樣,Python的for循環顯得更為智能和強大!

文法:

for 目标 in 表達式:

循環體

舉個例子

第八課.強大的分支與循環
第八課.強大的分支與循環

這裡的len()就是一個求長度的BIF

這裡的j會自動增加,不用手動控制(智能)

下面介紹經常和for一起配合使用的小夥伴range(),這個是一個BIF(内置函數)

range()

文法:range( [strat,] stop[, step=1] )

這個BIF有三個參數,其中用中括号括起來的兩個表示這兩個參數是可選的。

step=1表示第三個參數的值預設值是1。

range這個BIF的作用是生成一個從start參數的值開始到stop參數的值結束的數字序列。

看定義可能會迷茫,直接看圖就懂了

第八課.強大的分支與循環

range(5)會生成一個從0開始到5結束的數字序列(不包括5)

list(range(0, 10)) 轉換成清單是:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],注意不包含 10 哦

range(2,9)會生成一個從2開始到9結束的數字序列(不包括9)

Range(1,10,2)會生成一個從1開始到10結束并且每格數字相差2的序列(有點類似于等差數列,2相當于公差d,1相當于首項,8相當于末項)

break和continue

不會C的朋友就隻能百度啦,我這隻針對有C基礎的,簡單說一下

break語句的作用是終止目前循環,跳出循環體。(退出本層循環)

continue語句的作用是終止本輪循環并開始下一輪循環(退出本次循環

)(這裡要注意的是:在開始下一輪循環之前,會先測試循環條件)。

第八課.強大的分支與循環

這個程式是這節課的重點,如果讀懂了(答案和你預想的一樣),就說明學會了這節課的内容,如果不一樣,那還得加油哦~(認真讀幾遍都會有結果哒)

第八課.強大的分支與循環

答案

第八課.強大的分支與循環

測試題

  1. 假設有 x = 1,y = 2,z = 3,請問如何快速将三個變量的值互相交換?

    x, y, z = z, y, x

  2.  if not (money < 100): 這行代碼相當于?

    if money >= 100:

  3. 猜猜 (x < y and [x] or [y])[0] 實作什麼樣的功能?

    這其實是 Python 的作者還沒有為 Python 加入三元操作符之前,Python 社群的小夥伴們靈活的使用 and 和 or  搭配來實作三元操作符的功能,這裡邊有涉及到清單和切片的知識,這部分知識很快就會講解,迫不及待的朋友可以先稍微預習下。

  4. 你聽說過成員資格運算符嗎?

    Python 有一個成員資格運算符:in,用于檢查一個值是否在序列中,如果在序列中傳回 True,否則傳回 False。

4.設計一個驗證使用者密碼程式,使用者隻有三次機會輸入錯誤,不過如果使用者輸入的内容中包含"*"則不計算在内。

  1. count = 3
  2. password = 'FishC.com'
  3. while count:
  4.     passwd = input('請輸入密碼:')
  5.     if passwd == password:
  6.         print('密碼正确,進入程式......')
  7.         break
  8.     elif '*' in passwd:
  9.         print('密碼中不能含有"*"号!您還有', count, '次機會!', end=' ')
  10.         continue
  11.     else:
  12.         print('密碼輸入錯誤!您還有', count-1, '次機會!', end=' ')    
  13.     count -= 1

5.編寫一個程式,求 100~999 之間的所有水仙花數。

如果一個 3 位數等于其各位數字的立方和,則稱這個數為水仙花數。例如:153 = 1^3 + 5^3 + 3^3,是以 153 就是一個水仙花數

  1. for i in range(100, 1000):
  2.     sum = 0
  3.     temp = i
  4.     while temp:
  5.         sum = sum + (temp%10) ** 3
  6.         temp //= 10         # 注意這裡要使用地闆除哦~
  7.     if sum == i:
  8.         print(i)