06-流程控制

程序的三大流程

控制流程(也稱爲流程控制)是計算機運算領域的用語,意指在程序運行時,個別的指令(或是陳述子程序)運行或求值的順序。php

  • 在程序開發中,一共有三種流程方式:python

    • 順序 —— 從上向下,順序執行代碼
    • 分支 —— 根據條件判斷,決定執行代碼的 分支
    • 循環 —— 讓 特定代碼 重複 執行

不論是多麼複雜的程序,都是由這些不少簡單的流程控制構建起來的。git

判斷(if)語句

if語句是最簡單的選擇結構。若是知足條件就執行設定好的操做,不知足條件就執行其餘其餘操做。程序員

判斷的定義

  • 若是 條件知足,才能作某件事情,
  • 若是 條件不知足,就作另一件事情,或者什麼也不作

正是由於有了判斷,才使得程序世界豐富多彩,充滿變化!數據結構

判斷語句 又被稱爲 「分支語句」,正是由於有了判斷,才讓程序有了不少的分支函數

判斷偶數

需求3d

  1. 輸入一個數
  2. 若是這個數爲偶數就打印
# 1. 輸入一個數字
num = int(input("請輸入一個數字"))

# 2. 判斷這個數是否爲偶數
# if 語句以及縮進部分的代碼是一個完整的代碼塊
if 0 == num % 2:
    print("%s這個數是二的倍數" % num)

else

思考code

在使用 if 判斷時,只能作到知足條件時要作的事情。那若是須要在 不知足條件的時候,作某些事情,該如何作呢?orm

答案對象

else,格式以下:

if 要判斷的條件:
    條件成立時,要作的事情
    ……
else:
    條件不成立時,要作的事情
    ……

注意

  • ifelse 語句以及各自的縮進部分共同是一個 完整的代碼塊
# 輸入一個數字
num = int(input("請輸入一個數字:"))

# elif 語句以及縮進部分的代碼也是一個完整的代碼塊0
if 0 == num % 2:
    print("%s這個數是二的倍數" % num)
   
# else 語句以及縮進部分的代碼是一個完整的代碼塊
else:
    print("%s多是其餘的數" % num)

if 語句進階

elif

  • 在開發中,使用 if 能夠 判斷條件
  • 使用 else 能夠處理 條件不成立 的狀況
  • 可是,若是但願 再增長一些條件條件不一樣,須要執行的代碼也不一樣 時,就可使用 elif
  • 語法格式以下:
if 條件1:
    條件1知足執行的代碼
    ……
elif 條件2:
    條件2知足時,執行的代碼
    ……
elif 條件3:
    條件3知足時,執行的代碼
    ……
else:
    以上條件都不知足時,執行的代碼
    ……
# 輸入一個數字
num = int(input("請輸入一個數字:"))


# 判斷這個數是否爲偶數
# if 語句以及縮進部分的代碼是一個完整的代碼塊
if not num:
    print("你輸入的是零或者不是數字")

# elif 語句以及縮進部分的代碼也是一個完整的代碼塊0
elif 0 == num % 2:
    print("%s這個數是二的倍數" % num)

elif 0 == num % 3:
    print("%s這個數是三的倍數" % num)

elif 0 == num % 4:
    print("%s這個數是三的倍數" % num)

# else 語句以及縮進部分的代碼是一個完整的代碼塊
else:
    print("%s多是其餘的數" % num)

注意

  1. elifelse 都必須和 if 聯合使用,而不能單獨使用
  2. 能夠將 ifelifelse 以及各自縮進的代碼,當作一個 完整的代碼塊

elif 的應用場景是:同時 判斷 多個條件,全部的條件是 平級

  • 在開發中,使用 if 進行條件判斷,若是但願 在條件成立的執行語句中增長條件判斷,就可使用 if 的嵌套
  • if 的嵌套 的應用場景就是:在以前條件知足的前提下,再增長額外的判斷
  • if 的嵌套 的語法格式,除了縮進以外 和以前的沒有區別
  • 語法格式以下:
if 條件 1:
    條件 1 知足執行的代碼
    ……
    
    if 條件 1 基礎上的條件 2:
        條件 2 知足時,執行的代碼
        ……    
        
    # 條件 2 不知足的處理
    else:
        條件 2 不知足時,執行的代碼
        
# 條件 1 不知足的處理
else:
    條件1 不知足時,執行的代碼
    ……

if 的嵌套—水仙花素

水仙花數(Narcissistic number)也被稱爲超徹底數字不變數(pluperfect digital invariant, PPDI)、自戀數、自冪數、阿姆斯壯數或阿姆斯特朗數(Armstrong number),水仙花數是指一個 3 位數,它的每一個位上的數字的 3 次冪之和等於它自己(例如:1^3 + 5^3+ 3^3 = 153)。

需求

輸入一個數,判斷數字是不是水仙花數

  • 水仙花素是一個三位數
  • 每一個位上的數字的 3 次冪之和等於它自己

# 輸入一個數
num_str = input("請輸入一個三位數:")
num = int(num_str)

# 判斷輸入數是否正確
if num > 100 and num < 1000:
    print("輸入的數正確,繼續驗證。。。")
    
    num1 = int(num_str[0])
    num2 = int(num_str[1])
    num3 = int(num_str[2])
    
    num4 = num1**3 + num2**3 + num3**3
    # 每一個位上的數字的 3次冪之和等於它自己
    if num4 == num:
        print("{} 是水仙花數".format(num))
    else:
        print("{} 不是水仙花數".format(num))

else:
    print("輸入的數字不多是水仙花數,請從新驗證")

總結

if 的三種形式

  • if
if 條件1:
    條件1知足執行的代碼

不太建議使用,不知足條件時沒有任何提示

  • if ... else

只有兩種狀況下使用

if 條件1:
    條件1知足執行的代碼
else:
    以上條件都不知足時,執行的代碼
    ……
  • if ... elif ... elif ... else

多條件選擇使用

if 條件1:
    條件1知足執行的代碼
    ……
elif 條件2:
    條件2知足時,執行的代碼
    ……
elif 條件3:
    條件3知足時,執行的代碼
    ……
else:
    以上條件都不知足時,執行的代碼
    ……

if嵌套

if 條件1:
    if 條件 1 基礎上的條件 2:
        條件 2 知足時,執行的代碼
        ……    
    # 條件 2 不知足的處理
    else:
        條件 2 不知足時,執行的代碼
else:
    以上條件都不知足時,執行的代碼
    ……

循環

while是計算機的一種基本循環模式。當知足條件時進入循環,進入循環後,當條件不知足時,跳出循環。while語句的通常表達式爲:while(表達式){循環體}。

while 循環基本使用

循環的做用就是讓 指定的代碼 重複的執行

while 循環最經常使用的應用場景就是 讓執行的代碼 按照 指定的次數 重複 執行

while 語句基本語法

第一個 while 循環

需求 —— 打印 5 遍 Hello Python

思考 —— 若是要求打印 100 遍怎麼辦?

注意:while 語句以及縮進部分是一個 完整的代碼塊

# 1. 定義重複次數計數器
i = 1

# 2. 使用 while 判斷條件
while i <= 5:
    # 要重複執行的代碼
    print('Hello Python !')

    # 處理計數器 i
    i = i + 1

print("循環結束後的 i = %d" % i)

注意:循環結束後,以前定義的計數器條件的數值是依舊存在的

限制條件的位置不一樣,形成的結果也不一樣

死循環

因爲程序員的緣由,忘記 在循環內部 修改循環的判斷條件,致使循環持續執行,程序沒法終止!

循環計算

用嵌套打印小星星

需求

  • 在控制檯連續輸出五行 *,每一行星號的數量依次遞增
*
**
***
****
*****
  • 使用字符串 * 打印
# 1. 定義一個計數器變量,從數字1開始,循環會比較方便
row = 1

while row <= 5:
    
    print("*" * row)
    
    row += 1

循環嵌套打印小星星

print 函數的使用作一個加強

  • 在默認狀況下,print 函數輸出內容以後,會自動在內容末尾增長換行
  • 若是不但願末尾增長換行,能夠在 print 函數輸出內容的後面增長 , end=""
  • 其中 "" 中間能夠指定 print 函數輸出內容以後,繼續但願顯示的內容
  • 語法格式以下:
# 向控制檯輸出內容結束以後,不會換行
print("*", end="")

# 單純的換行
print("")

end="" 表示向控制檯輸出內容結束以後,不會換行

假設 Python 沒有提供 字符串的 * 操做 拼接字符串

需求

  • 在控制檯連續輸出五行 *,每一行星號的數量依次遞增
*
**
***
****
*****

開發步驟

  1. 完成 5 行內容的簡單輸出
  2. 分析每行內部的 * 應該如何處理?
  • 每行顯示的星星和當前所在的行數是一致的
  • 嵌套一個小的循環,專門處理每一行中 的星星顯示
row = 1

while row <= 5:

    # 假設 python 沒有提供字符串 * 操做
    # 在循環內部,再增長一個循環,實現每一行的 星星 打印
    col = 1

    while col <= row:
        print("*", end="")

        col += 1

    # 每一行星號輸出完成後,再增長一個換行
    print("")

    row += 1

九九乘法表

需求 輸出 九九乘法表,格式以下:

1 * 1 = 1	
1 * 2 = 2	2 * 2 = 4	
1 * 3 = 3	2 * 3 = 6	3 * 3 = 9	
1 * 4 = 4	2 * 4 = 8	3 * 4 = 12	4 * 4 = 16	
1 * 5 = 5	2 * 5 = 10	3 * 5 = 15	4 * 5 = 20	5 * 5 = 25	
1 * 6 = 6	2 * 6 = 12	3 * 6 = 18	4 * 6 = 24	5 * 6 = 30	6 * 6 = 36	
1 * 7 = 7	2 * 7 = 14	3 * 7 = 21	4 * 7 = 28	5 * 7 = 35	6 * 7 = 42	7 * 7 = 49	
1 * 8 = 8	2 * 8 = 16	3 * 8 = 24	4 * 8 = 32	5 * 8 = 40	6 * 8 = 48	7 * 8 = 56	8 * 8 = 64	
1 * 9 = 9	2 * 9 = 18	3 * 9 = 27	4 * 9 = 36	5 * 9 = 45	6 * 9 = 54	7 * 9 = 63	8 * 9 = 72	9 * 9 = 81

開發步驟

  1. 打印 9 行小星星
*
**
***
****
*****
******
*******
********
*********
  1. 將每個 * 替換成對應的行與列相乘
# 定義起始行
row = 1

# 最大打印 9 行
while row <= 9:
    # 定義起始列
    col = 1

    # 最大打印 row 列
    while col <= row:

        # end = "",表示輸出結束後,不換行
        # "\t" 能夠在控制檯輸出一個製表符,協助在輸出文本時對齊
        print("%d * %d = %d" % (col, row, row * col), end="\t")

        # 列數 + 1
        col += 1

    # 一行打印完成的換行
    print("")

    # 行數 + 1
    row += 1

總結:

while condition:
	do something

for迭代

Python 頻繁地使用迭代器。它容許在數據結構長度未知和具體實現未知的狀況下遍歷整個數據結構,而且支持迭代快速讀寫中的數據,以及容許不能一次讀入計算機內存的數據流的處理。

在計算機科學裏,遍歷的一種,指的是按照某種規則,不重複地訪問某個對象的全部內容的過程。

for語句

for item in 'hello world !':
	print(item)

for i in range(10)

In [15]: for i in range(10):
    ...:     print(i)
    ...:
0
1
2
...

range

range() 函數可建立一個整數列表,通常用在 for 循環中。

函數語法:

range(start, stop[, step])

參數說明:

  • start: 計數從 start 開始。默認是從 0 開始。例如range(5)等價於range(0, 5);
  • stop: 計數到 stop 結束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]沒有5
  • step:步長,默認爲1。例如:range(0, 5) 等價於 range(0, 5, 1)
In [18]: list(range(10))
Out[18]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [21]: tuple(range(10))
Out[21]: (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

for迭代可迭代對象

for能夠迭代全部可迭代對象(字符串、列表、元組、集合、字典)

for num in list(range(1000)):
	print(num)

案例:用 for 迭代獲取全部水仙花數

for num in range(1000):
	
	print(num)

案例:用for循環實現九九乘法表

for row in range(1, 10):
    
    for col in range(1, row + 1):
        
        print("%d * %d = %d" % (col, row, row * col), end="\t")
        
    print()

提高(長見識):

用for實現水仙花數

for x in range(0, 10):
    for y in range(0, 10):
        for z in range(1, 10):
            sum = z * 100 + y * 10 + x
            if sum == x ** 3 + y ** 3 + z ** 3:
                print(sum)
# 列表推導式
[(x ** 3 + y ** 3 + z ** 3) for x in range(1, 10) for y in range(0, 10) for z in range(0, 10) if (x*100+y*10+z) == x ** 3 + y ** 3 + z ** 3]

break 和 continue

breakcontinue 是專門在循環中使用的關鍵字

  • break 某一條件知足時,退出循環,再也不執行後續重複的代碼
  • continue 某一條件知足時,不執行後續重複的代碼

breakcontinue 只針對 當前所在循環 有效

break

從內部中斷循環

  • 在循環過程當中,若是 某一個條件知足後 再但願 循環繼續執行,可使用 break 退出循環

break 只針對當前所在循環有效

案例:登陸帳號

passworld = '123456'

while True:
	
    passwd = input("請輸入密碼")	
    if passwd ==  passworld:
		# 當知足條件時 中斷循環
        break

    # 重複執行的代碼
    print("輸入的密碼錯誤,請從新輸入")

continue

  • 在循環過程當中,若是某一個條件知足後,不但願執行循環代碼,可是又不但願退出循環,可使用 continue
  • 也就是:在整個循環中,只有某些條件,不須要執行循環代碼,而其餘條件都須要執行
# 
for i in range(10):
    if i % 2 == 0:
        continue
    print(i)
  • 須要注意:使用 continue 時,條件處理部分的代碼,須要特別注意,不當心會出現 死循環

continue 只針對當前所在循環有效

else語句

else 能夠在while和for循環中運用,else和while或for搭配使用,再也不是條件判斷的含義。而是當while條件不成立時,直接跳出while循環,執行else輸出如:

else與while一塊兒使用

而是當while條件不成立時,直接跳出while循環,執行else輸出如:

count = 0
while count < 12:
   if 5 == count:
        print('中斷 while else 語句')
        # 中斷 while else 語句
        break
   count += 1
else:
   print('正常結束')

else與for一塊兒使用

count = 0
for i in range(10):
	if 5 == count:
        print('中斷 for else 語句')
        # 中斷 for else 語句
        break
else:
   print('正常結束')
相關文章
相關標籤/搜索