控制流程(也稱爲流程控制)是計算機運算領域的用語,意指在程序運行時,個別的指令(或是陳述、子程序)運行或求值的順序。php
在程序開發中,一共有三種流程方式:python
不論是多麼複雜的程序,都是由這些不少簡單的流程控制構建起來的。git
if
語句是最簡單的選擇結構。若是知足條件就執行設定好的操做,不知足條件就執行其餘其餘操做。程序員
正是由於有了判斷,才使得程序世界豐富多彩,充滿變化!數據結構
判斷語句 又被稱爲 「分支語句」,正是由於有了判斷,才讓程序有了不少的分支函數
需求3d
# 1. 輸入一個數字 num = int(input("請輸入一個數字")) # 2. 判斷這個數是否爲偶數 # if 語句以及縮進部分的代碼是一個完整的代碼塊 if 0 == num % 2: print("%s這個數是二的倍數" % num)
思考code
在使用 if
判斷時,只能作到知足條件時要作的事情。那若是須要在 不知足條件的時候,作某些事情,該如何作呢?orm
答案對象
else
,格式以下:
if 要判斷的條件: 條件成立時,要作的事情 …… else: 條件不成立時,要作的事情 ……
注意:
if
和 else
語句以及各自的縮進部分共同是一個 完整的代碼塊# 輸入一個數字 num = int(input("請輸入一個數字:")) # elif 語句以及縮進部分的代碼也是一個完整的代碼塊0 if 0 == num % 2: print("%s這個數是二的倍數" % num) # else 語句以及縮進部分的代碼是一個完整的代碼塊 else: print("%s多是其餘的數" % num)
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)
注意
elif
和 else
都必須和 if
聯合使用,而不能單獨使用if
、elif
和 else
以及各自縮進的代碼,當作一個 完整的代碼塊elif 的應用場景是:同時 判斷 多個條件,全部的條件是 平級 的
if
進行條件判斷,若是但願 在條件成立的執行語句中 再 增長條件判斷,就可使用 if 的嵌套if 條件 1: 條件 1 知足執行的代碼 …… if 條件 1 基礎上的條件 2: 條件 2 知足時,執行的代碼 …… # 條件 2 不知足的處理 else: 條件 2 不知足時,執行的代碼 # 條件 1 不知足的處理 else: 條件1 不知足時,執行的代碼 ……
水仙花數(Narcissistic number)也被稱爲超徹底數字不變數(pluperfect digital invariant, PPDI)、自戀數、自冪數、阿姆斯壯數或阿姆斯特朗數(Armstrong number),水仙花數是指一個 3 位數,它的每一個位上的數字的 3 次冪之和等於它自己(例如:1^3 + 5^3+ 3^3 = 153)。
需求
輸入一個數,判斷數字是不是水仙花數
# 輸入一個數 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 條件1: 條件1知足執行的代碼
不太建議使用,不知足條件時沒有任何提示
只有兩種狀況下使用
if 條件1: 條件1知足執行的代碼 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
語句基本語法需求 —— 打印 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
函數輸出內容的後面增長 , end=""
""
中間能夠指定 print
函數輸出內容以後,繼續但願顯示的內容# 向控制檯輸出內容結束以後,不會換行 print("*", end="") # 單純的換行 print("")
end=""
表示向控制檯輸出內容結束以後,不會換行
假設 Python
沒有提供 字符串的 *
操做 拼接字符串
需求
*
,每一行星號的數量依次遞增* ** *** **** *****
開發步驟
*
應該如何處理?列
的星星顯示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
開發步驟
* ** *** **** ***** ****** ******* ******** *********
*
替換成對應的行與列相乘# 定義起始行 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
Python 頻繁地使用迭代器。它容許在數據結構長度未知和具體實現未知的狀況下遍歷整個數據結構,而且支持迭代快速讀寫中的數據,以及容許不能一次讀入計算機內存的數據流的處理。
在計算機科學裏,遍歷的一種,指的是按照某種規則,不重複地訪問某個對象的全部內容的過程。
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() 函數可建立一個整數列表,通常用在 for 循環中。
函數語法:
range(start, stop[, step])
參數說明:
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 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
是專門在循環中使用的關鍵字
break
某一條件知足時,退出循環,再也不執行後續重複的代碼continue
某一條件知足時,不執行後續重複的代碼
break
和continue
只針對 當前所在循環 有效
從內部中斷循環
break
退出循環
break
只針對當前所在循環有效
案例:登陸帳號
passworld = '123456' while True: passwd = input("請輸入密碼") if passwd == passworld: # 當知足條件時 中斷循環 break # 重複執行的代碼 print("輸入的密碼錯誤,請從新輸入")
continue
# for i in range(10): if i % 2 == 0: continue print(i)
continue
時,條件處理部分的代碼,須要特別注意,不當心會出現 死循環
continue
只針對當前所在循環有效
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('正常結束')