5. Python 條件控制語句細解

1. 條件判斷語句(if語句)

  if 條件判斷語句在上一篇博文 4. Python3 運算符細解裏的第9點 Python 條件運算符(三元運算符)
裏簡單的介紹過。Python語言 的條件語句是通過一條多條語句的執行結果(True 或 False)來 決定執行的代碼塊
  if 條件判斷語句的執行流程:
    if 語句在執行時,會先對條件表達式進行求值判斷
    如果爲True,則執行 if 後的語句;
    如果爲False,則不執行。
在這裏插入圖片描述
  代碼執行過程:
在這裏插入圖片描述

  語法:
   if 條件表達式 :
    代碼塊

  參考實例:

if condition_1:
    statement_block_1		# 如果 "condition_1" 爲 True 將執行 "statement_block_1" 塊語句
elif condition_2:			# 如果 "condition_1" 爲False,將判斷 "condition_2"
    statement_block_2		# 如果"condition_2" 爲 True 將執行 "statement_block_2" 塊語句
else:
    statement_block_3		# 如果 "condition_2" 爲False,將執行"statement_block_3"塊語句

  每個代碼塊中都保存着一組代碼,同一個代碼塊中的代碼,要麼都執行要麼都不執行
  代碼塊以 縮進 開始,直到代碼恢復到之前的縮進級別時結束;
  代碼塊就是一種爲代碼分組機制

  注意:
  1、每個判斷條件開始的後面要使用冒號 :,表示接下來是 滿足條件後要執行的語句塊
  2、使用縮進劃分語句塊, 相同縮進數 的語句在一起組成一個語句塊。
  3、在Python中沒有 switch – case語句

  

1.1 if-else語句

  語法

   if 條件表達式 :
    代碼塊
   else :
    代碼塊

  參考實例:

a = int(input("請輸入你想驗證的數字: "))
if a > 0 :
	print('這是一個正數')
else :
	print('這是一個負數')

  執行流程
   if-else語句 在執行時,先對 if 後的條件表達式進行求值判斷
   如果爲 True ,則執行 if 後的代碼塊;
   如果爲 False ,則執行 else 後的代碼塊。
  

1.2 if-elif-else 語句

  語法

   if 條件表達式 :
    代碼塊
   elif 條件表達式 :
    代碼塊
   elif 條件表達式 :
    代碼塊
  …
   else :
    代碼塊

  參考實例:

age = int(input("請輸入你家狗狗的年齡: "))
print("")							
if age <= 0:
    print("你是在逗我吧!")
elif age == 1:
    print("相當於 14 歲的人。")		
elif age == 2:
    print("相當於 22 歲的人。")
elif age > 2:
    human = 22 + (age -2)*5
    print("對應人類年齡: ", human)

# 退出提示
input("點擊 enter 鍵退出")			
# 最後結果:
# 請輸入你家狗狗的年齡: 1
# 
# 相當於 14 歲的人。
# 點擊 enter 鍵退出

  執行流程
   if-elif-else語句在 執行時,會自上向下依次條件表達式進行求值判斷
   如果表達式的結果爲 True ,則執行當前代碼塊,然後 語句結束
   如果表達式的結果爲 False ,則繼續向下判斷,直到找到 True 爲止
   如果所有的表達式都是 False ,則執行 else 後的代碼塊。

   總結: if-elif-else 中 只會有 一個代碼塊會執行。

  

2. input() 函數

  講了這麼久的 Pythion語言 語法,我們穿插的講一個很實用且經常會用到的函數來換換思路。
  input() 函數: 該函數用來獲取用戶的輸入信息,返回的數據類型爲 string 類型
  小提示:在 Python3.x 中 raw_input() 和 input() 進行了整合,去除了 raw_input( ),僅保留了input( )函數,其接收任意任性輸入,將所有輸入默認爲字符串處理,並返回字符串類型。
  input()函數 調用開始後,程序會立即暫停,等待用戶輸入信息
  用戶輸入完內容以後,點擊回車程序纔會繼續向下執行;
  用戶輸入完成以後,其所輸入的的內容會以返回值的形式返回。

>>>a = input("input:")
input:123                  		# 輸入整數
>>> type(a)
<class 'str'>              		# 字符串
>>> a = input("input:")    
input:runoob              		# 正確,字符串表達式
>>> type(a)
<class 'str'>             		# 字符串

  

3. 循環語句

  循環語句 顧名思義 可以使 指定的代碼塊重複指定的次數。循環語句分成兩種,while循環for循環
  Python語言 循環語句的控制結構圖:
在這裏插入圖片描述

3.1 while 循環語句

  3.1.1 Python語言 中 while 語句 的一般形式:
   while 條件表達式 :
    代碼塊

  while 循環 執行流程圖:
在這裏插入圖片描述

  參考實例(這是一個必須理解且需要背下來的實例):

i = 0
while i < 5:
	print(i)		
	i += 1

# 0
# 1
# 2
# 3
# 4

i = 0
while i < 5:
	i += 1
	print(i)		

# 1
# 2
# 3
# 4
# 5

# 用 while 來計算 1 到 100 的總和:
n = 100
 
sum = 0
counter = 1
while counter <= n:
    sum = sum + counter
    counter += 1
 
print("1 到 %d 之和爲: %d" % (n,sum))		# 1 到 100 之和爲: 5050

  在最後還是再和大家強調一下:需要注意冒號縮進。另外,在 Python語言 中 沒有 do…while 循環

  3.1.2 while 循環語句玩法小技巧(一):無限循環
  我們可以通過設置條件表達式永遠不爲 false 來實現無限循環,參考實例:

var = 1
while var == 1 :  # 表達式永遠爲 true
   num = int(input("輸入一個數字  :"))
   print ("你輸入的數字是: ", num)
 
print ("Good bye!")

# 輸出結果如下:
# 輸入一個數字  :5
# 你輸入的數字是:  5
# 輸入一個數字  :

  可以使用 CTRL+C退出當前的無限循環
  無限循環在 服務器上 客戶端的實時請求 非常有用

  3.1.3 while 循環使用 else 語句
  在 while … else 條件語句執行爲 False 時,執行 else 的代碼塊。
  語法格式如下:

while <expr>:
    <statement(s)>
else:
    <additional_statement(s)>

  循環輸出數字,並判斷大小:

count = 0
while count < 5:
   print (count, " 小於 5")
   count = count + 1
else:
   print (count, " 大於或等於 5")

# 0  小於 5
# 1  小於 5
# 2  小於 5
# 3  小於 5
# 4  小於 5
# 5  大於或等於 5

  3.1.4 while 循環語句玩法小技巧(二):簡單語句組
  類似 if 語句 的語法,如果你的 while 循環體中 只有一條語句,你可以將該語句與while寫在同一行中, 如下所示:

flag = 1
 
while (flag): print ('歡迎訪問雲山·若水在CSDN的博客。')
 
print ("Good bye!")

# 運行結果過:
# 歡迎訪問雲山·若水在CSDN的博客。
# 歡迎訪問雲山·若水在CSDN的博客。
# 歡迎訪問雲山·若水在CSDN的博客。
# …… (無限循環)

  注意:對 while 循環語句製造的無限循環,我們可以使用 CTRL+C中斷循環
  

3.2 for 循環語句

  Python語言 的 for循環 可以 遍歷任何序列 的項目,如一個列表或者一個字符串。在後面的 6. Python語言的列表基礎操作彙總7. Python語言的元組&字典&集合 裏我們還會再着重的講解 Python 的 for 循環 的使用。
  for 循環 的一般格式如下:

for 變量 in 序列(遍歷的規則):
    代碼塊

  for 循環 執行流程圖:
在這裏插入圖片描述
  Python for 循環 參考實例:

>>>languages = ["C", "C++", "Perl", "Python"] 
>>> for x in languages:
...     print (x)
... 
C
C++
Perl
Python
>>>

  以下 for 實例中使用了 break 語句,break 語句用於跳出當前循環體:

sites = ["Baidu", "Google","CSDN","Taobao"]
for site in sites:
    if site == "CSDN":
        print("雲山·若水的CSDN博客。")
        break
    print("循環數據 " + site)
else:
    print("沒有循環數據!")
print("完成循環!")


# 執行腳本後,在循環到 "CSDN"時會跳出循環體:
# 循環數據 Baidu
# 循環數據 Google
# 雲山·若水的CSDN博客。
# 完成循環!

  

4. 循環嵌套

  Python語言 允許在一個循環體裏面 嵌入 另一個循環。

  循環嵌套語法

if 表達式1:
    語句
    if 表達式2:
        語句
    elif 表達式3:
        語句
    else:
        語句
elif 表達式4:
    語句
else:
    語句
#-----------------------------------------
while 表達式:
   while 表達式:
      代碼塊
   代碼塊
#-----------------------------------------
for 變量 in 循環規則:
   for 變量 in 循環規則:
       代碼塊
   代碼塊

  參考實例:

num=int(input("輸入一個數字:"))
if num%2==0:
    if num%3==0:
        print ("你輸入的數字可以整除 2 和 3")
    else:
        print ("你輸入的數字可以整除 2,但不能整除 3")
else:
    if num%3==0:
        print ("你輸入的數字可以整除 3,但不能整除 2")
    else:
        print  ("你輸入的數字不能整除 2 和 3")

# 執行後輸出結果爲:
# 輸入一個數字:6
# 你輸入的數字可以整除 2 和 3

#-----------------------------------------

# 9*9 乘法表
i = 0
while i < 9 :
    i += 1
    # print(i)
    j = 0
    while j < i:
        j += 1
        print(j,'*',i,'=',i*j,' ',end='')
    print()

#-----------------------------------------

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, '等於', x, '*', n//x)
            break
    else:
        # 循環中沒有找到元素
        print(n, ' 是質數')
        
# 輸出結果:
# 2  是質數
# 3  是質數
# 4 等於 2 * 2
# 5  是質數
# 6 等於 2 * 3
# 7  是質數
# 8 等於 2 * 4
# 9 等於 3 * 3

  

5. range()函數

  如果你需要遍歷數字序列,可以使用內置range()函數,它會生成數列。

# 案例
>>>for i in range(5):
...     print(i)
...
0
1
2
3
4

  使用range()函數獲取指定區間的值:

>>>for i in range(5,9) :
    print(i)
5
6
7
8
>>>

  使用range()函數以指定數字開始並指定不同的增量(甚至可以是負數,有時這也叫做’步長’):

>>>for i in range(0, 10, 3) :
    print(i)
0
3
6
9
>>>

  負數:

>>>for i in range(-10, -100, -30) :
    print(i)
-10
-40
-70
>>>

  可以結合range()和len()函數以遍歷一個序列的索引:

>>>a = ['Google', 'Baidu', 'CSDN', 'Taobao', 'QQ']
>>> for i in range(len(a)):
...     print(i, a[i])
... 
0 Google
1 Baidu
2 CSDN
3 Taobao
4 QQ
>>>

  最後,使用range()函數來創建一個列表:

>>>list(range(5))
[0, 1, 2, 3, 4]
>>>

  

6. break 和 continue

  break 可以用來 立即退出循環語句,包括 else 語句;
  continue 用來 跳過當前循環

  break 執行流程圖:
在這裏插入圖片描述

  continue 執行流程圖:
在這裏插入圖片描述
  代碼執行過程:

在這裏插入圖片描述
  break語句 可以跳出 for 和 while 的循環體。如果你從 for 或 while 循環中 終止,任何對應的循環 else 塊將不執行。

  continue語句 被用來告訴 Python執行程序 跳過當前循環塊中的剩餘語句,然後繼續進行下一輪循環。

   while 循環中使用 break 語句:

n = 5
while n > 0:
    n -= 1
    if n == 2:
        break
    print(n)
print('循環結束。')

# 輸出結果爲:
# 4
# 3
# 循環結束。

   while 循環中使用 continue 語句:

n = 5
while n > 0:
    n -= 1
    if n == 2:
        continue
    print(n)
print('循環結束。')

# 輸出結果爲:
# 4
# 3
# 1
# 0
# 循環結束。

  參考實例:

for letter in 'CSDN':     # 第一個實例
   if letter == 'D':
      break
   print ('當前字母爲 :', letter)
  
var = 10                    # 第二個實例
while var > 0:              
   print ('當期變量值爲 :', var)
   var = var -1
   if var == 5:
      break
   print ("Good bye!")

# 輸出結果:
# 當前字母爲 : C
# 當前字母爲 : S
# 當期變量值爲 : 10
# 當期變量值爲 : 9
# 當期變量值爲 : 8
# 當期變量值爲 : 7
# 當期變量值爲 : 6
# Good bye!

#-----------------------------------------

# 循環字符串 CSDN,碰到字母 D 跳過輸出:

for letter in 'CSDN':     # 第一個實例
   if letter == 'D':        # 字母爲 D 時跳過輸出
      continue
   print ('當前字母 :', letter)
 
var = 10                    # 第二個實例
while var > 0:              
   var = var -1
   if var == 5:             # 變量爲 5 時跳過輸出
      continue
   print ('當前變量值 :', var)
print ("Good bye!")

# 輸出結果:
# 當前字母 : C
# 當前字母 : S
# 當前字母 : N
# 當前變量值 : 9
# 當前變量值 : 8
# 當前變量值 : 7
# 當前變量值 : 6
# 當前變量值 : 4
# 當前變量值 : 3
# 當前變量值 : 2
# 當前變量值 : 1
# 當前變量值 : 0
# Good bye!

  循環語句可以有 else 子句,它在窮盡列表(以for循環)或條件變爲 False (以while循環)導致循環終止時被執行,但循環被 break 終止時不執行。
  參考實例:

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, '等於', x, '*', n//x)
            break
    else:
        # 循環中沒有找到元素
        print(n, ' 是質數')
        
# 輸出結果:
# 2  是質數
# 3  是質數
# 4 等於 2 * 2
# 5  是質數
# 6 等於 2 * 3
# 7  是質數
# 8 等於 2 * 4
# 9 等於 3 * 3

8. pass 語句

  Python pass 是 空語句,是爲了保持程序結構的完整性。
  pass 不做任何事情,一般用做佔位語句,如下參考實例:

>>>while True:
...     pass  # 等待鍵盤中斷 (Ctrl+C)

  最小的類:

>>>class MyEmptyClass:
...     pass

  以下實例在字母爲 D 時 執行 pass 語句塊:

for letter in 'CSDN': 
   if letter == 'D':
      pass
      print ('執行 pass 塊')
   print ('當前字母 :', letter)
 
print ("Good bye!")

# 輸出結果:
# 當前字母 : C
# 當前字母 : S
# 執行 pass 塊
# 當前字母 : D
# 當前字母 : N
# Good bye!

  
  

總結小便條

本篇文章主要講了以下幾點內容:

  1. Python語言 的 條件控制語句三個(其實,所有的計算機語言都這樣):if   while   for

  2. if:條件判斷語句。一句話:滿足哪條走哪條。計算機程序核心內容分兩塊,一塊是計算,另一塊就是 if (判斷)
    if 條件判斷語句的兩個分支分別是: if…else… 和 if…elif…elif…else… ,這倆兩兄弟自然大同小異。

  3. 上面是一大塊的計算機程序核心半壁江山“條件判斷語句”,另一大塊是簡化一些重複問題循環語句; while 和 for 。即然都是循環,一個不夠嗎?雖然都叫“王大柱”但是長得塊頭都還不一樣呢。

   while:循環各種計算和語句。 1,2,3,4,5…

   for:循環遍歷 列表、元組、字典、集合。 a = [0]

  雖然 while 和 for 都能實現彼此功能和作用,但相對的使用便利性和計算量就不是同日而語了,這也就是他們的區別。

  1. 至於其他的一些函數: input() 傳遞輸入str
               range() 便利數字序列
               break 退出循環
               continue 跳過當前循環
               pass 空語句
    先拿個小本本記下,在以後的實操中逐漸體會其真諦。

  2. 至於 print() 、input() 、type() 就不需要在幫忙回顧了吧。

  如果還有點暈,那就去完成作業吧。拜拜~

  
  

課後作業:

  1. 求1000以內所有的水仙花數
  2. 獲取用戶輸入的任意數,判斷其是否是質數?
  3. 控制檯輸出 9*9乘法表
  4. 給 用戶9次機會 猜1 - 10 個數字內 隨機來猜數字。如果隨機的數字和用戶輸入的數字一致則表示正確,如果不一致則表示錯誤。最終結果要求用戶怎麼也猜不對。

  
  
  
  
  

參考答案:

# 作業 1
i = 100
while i < 1000:
    print(i)
    # 1.判斷哪些是水仙花數
    # 2. 假設 i 的百位數爲 a 十位數爲 b 個位數爲 c
    # 求 i 的百位數 a
    a = i // 100
    # 求 i 的十位數 b
    b = (i - a*100) // 10
    c = i % 10
    # print(a,b,c)
    if a ** 3 + b ** 3 + c ** 3 == i:
        print(i)

    i += 1

# 作業 2

# 參考答案 1.0
i = 2
while i <= 100:
    # print(i)
    # 創建一個變量  記錄 i 是否爲質數  默認 flag 是質數
    flag = True
    j = 2
    while j < i :
        # 判斷 i 是否能被 j 整除
        if i % j == 0:
            flag = False
        j += 1
    if flag:
        print(i)
    i += 1
    
# 參考答案 2.0
from time import  *
# 獲取程序開始的時間
start = time()

i = 2
while i <= 10000:
    # print(i)
    # 創建一個變量  記錄 i 是否爲質數  默認 flag 是質數
    flag = True
    j = 2
    while j < i :
        # 判斷 i 是否能被 j 整除
        if i % j == 0:
            flag = False
            # 一旦進入循環  則證明 i 一定不是質數  此時內層循環沒必要再進行下去了
            # 使用 break 跳出內層循環
            break
        j += 1
    if flag:
        # print(i)
        pass
    i += 1
# 獲取程序結束的時間
end = time()

# 計算程序所執行的時間
print('程序執行了',end - start,'秒')

# 參考答案 3.0
from time import  *
# 獲取程序開始的時間
start = time()

i = 2
while i <= 10000:
    # print(i)
    # 創建一個變量  記錄 i 是否爲質數  默認 flag 是質數
    flag = True
    j = 2
    while j <= i ** 0.5:
        # 判斷 i 是否能被 j 整除
        if i % j == 0:
            flag = False
            # 一旦進入循環  則證明 i 一定不是質數  此時內層循環沒必要再進行下去了
            # 使用 break 跳出內層循環
            break
        j += 1
    if flag:
        # print(i)
        pass
    i += 1
# 獲取程序結束的時間
end = time()

# 計算程序所執行的時間
print('程序執行了',end - start,'秒')

# 作業 3
i = 0
while i < 9 :
    i += 1
    # print(i)
    j = 0
    while j < i :
        j += 1
        print(j,'*',i,'=',i*j,end=' ')
    print()

# 作業 4

# 思路: 1. 先拿到用戶猜過的數字
#       2. 隨機一個數字去和用戶猜過的數字作比對 如果隨機的這個數字沒有出現在用戶猜過的數字當中。那麼這個數字就是最終的答案
import random

lst = []  # 用來添加用戶猜過的數字
i = 0
while i < 9:
    number = int(input(f'第{i+1}次猜,請輸入一個數字:'))
    lst.append(number)
    print('不好意思,沒有猜對,請繼續猜')

    i += 1

while True:
    number_x = random.randint(1,10)   # 1 <= number_x <= 10

    if number_x in lst:
        continue
    else:
        break

print('正確的號碼是',number_x)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章