1、程序的流程圖:
程序流程圖用一系列圖形、流程線和文字說明描述程序的基本操作和控制流程,它是程序分析和過程描述的最基本方式。
流程圖的基本元素:
起止框:表示程序邏輯的開始或結束;
判斷框:表示一個判斷條件,並根據判斷結果選擇不同的執行路徑;
處理框:表示一組處理過程,對應於順序執行的程序邏輯;
輸入輸出框:表示程序中的數據輸入或結果輸出;
注釋框:表示程序的注釋;
流向線:表示程序的控制流,以帶箭頭直線或曲線表達程序的執行路徑;
連接點:表示多個流程圖的連接方式,常用於將多個較小流程圖組織成較大流程圖。
程序流程圖示例:由連接點A連接的一個程序程序的基本結構
2、程序由三種基本結構組成:順序結構、分支結構和循環結構。
任何程序都由這三種基本結構組合而成,這些基本結構都有一個入口和一個出口。
1)順序結構
是程序按照線性順序依次執行的一種運行方式,其中語句塊1S1和語句塊S2表示一個或一組順序執行的語句程序的基本結構。
2)分支結構
程序根據條件判斷結果而選擇不同向前執行路徑的一種運行方式,基礎的分支結構是二分支結構。
由二分支結構會組合形成多分支結構程序的基本結構。
3)循環結構
程序根據條件判斷結果向後反覆執行的一種運行方式,根據循環體觸發條件不同,包括條件循環和遍歷循環結構
3、擴展
在三種基本控制邏輯基礎上,Python語言進行了必要且適當的擴展。
1)try-except
在分支結構原理的基礎上,Python增加了異常處理,使用try-except保留字。
異常處理以程序異常為判斷條件,根據一段代碼執行的正確性進行程序邏輯選擇。
2)break和continue
在循環結構原理的基礎上,Python提供兩個循環控制符break和continue,對循環的執行過程進行控制。
break控制符用來結束當前循環,continue控制符用來結束當前循環的當次循環過程。
4、程序的分支結構
1)單分支結構: if語句
Python的單分支結構使用if保留字對條件進行判斷,語法格式:
其中,if、:和<語句塊>前的縮進都是語法的一部分。
<語句塊>是if條件滿足後執行的一個或多個語句序列,縮進表達<語句塊>與if的包含關係。
<條件>是一個產生True或False結果的語句,當結果為True時,執行<語句塊>,否則跳過<語句塊>。
# 判斷用戶輸入數字的奇偶性
s = eval(input("請輸出一個整數:"))
if s % 2 == 0:
print("這是個偶數")
print("輸入數字是:", s)
<條件>可以是一個或多個條件,多個條件間採用and或or進行邏輯組合。and表示多個條件「與」的關係,or表示多個條件「或」的關係
# 判斷用戶輸入數字的特定
s = eval(input("請輸出一個整數:"))
if s % 3 == 0 and s % 5 == 0:
print("這個數字既能被3整除,又能被5整除")
print("輸入數字是:", s)
2)二分支結構: if-else語句
Python的二分支結構使用if-else保留字對條件進行判斷,語法格式:
其中,if、:和語句塊前的縮進都是語法的一部分。
<語句塊1>在if中<條件>滿足即為True時執行,<語句塊2>在if中<條件>不滿足即為False時執行。
簡單說,二分支結構根據條件的True或False結果產生兩條路徑。
# 判斷用戶輸入數字的某個屬性
s = eval(input("請輸出一個整數:"))
if s % 3 == 0 and s % 5 == 0:
print("這個數字能夠同時被3和5整除")
else:
print("這個數字不能夠同時被3和5整除")
二分支結構還有一種更簡潔的表達方式,適合<語句塊1>和<語句塊2>都只包含簡單表達式的情況,語法格式:
<表達式1> if <條件> else <表達式2>
# 判斷用戶輸入數字的某個屬性
s = eval(input("請輸出一個整數:"))
token = "" if s % 3 == 0 and s % 5 == 0 else "不"
print("這個數字{}能夠同時被3和5整除".format(token))
3)多分支結構: if-elif-else語句
Python的if-elif-else描述多分支結構,語句格式:
多分支結構通常用於判斷同一個條件或一類條件的多個執行路徑。
注意:
Python會按照多分支結構的代碼順序依次評估判斷條件,尋找並執行第一個結果為True條件對應的語句塊,當前語句塊執行後跳過整個if-elif-else結構。
利用多分支結構編寫代碼時要注意多個邏輯條件的先後關係。
示例:
獲取用戶輸入的一個百分製成績,轉換成五分制,給出對應的A、B、C、D、E等級。
# 將百分製成績轉換為五分製成績
score = eval(input("請輸出一個百分製成績:"))
if score >= 60.0:
grade = "D"
elif score >= 70.0:
grade = "C"
elif score >= 80.0:
grade = "B"
elif score >= 90.0:
grade = "A"
else:
grade = "E"
print("對應的五分製成績是:{}".format(grade))
>>>
請輸出一個百分製成績:80
對應的五分製成績是:D
顯然,百分制80分不應該是等級D,上述代碼運行正確但邏輯存在錯誤,在於弄錯了多個邏輯條件的先後關係,修改後代碼。
# 將百分製成績轉換為五分製成績
score = eval(input("請輸出一個百分製成績:"))
if score >= 90.0:
grade = "A"
elif score >= 80.0:
grade = "B"
elif score >= 70.0:
grade = "C"
elif score >= 60.0:
grade = "D"
else:
grade = "E"
print("對應的五分製成績是:{}".format(grade))
4)判斷條件及組合
分支結構中的判斷條件可以使用任何能夠產生True或False的語句或函數。
形成判斷條件最常見的方式是採用關係操作符
>>>4 < 5
True
>>>"Python" > "python"
False
Python語言中,任何非零的數值、非空的數據類型都等價於True,0或空類型等價於False,可以直接用作判斷條件。
>>>0 == False
True
>>>"" == True
False
Python語言使用保留字not、and和or對條件進行邏輯運算或組合。
保留字not表示單個條件的「否」關係,and表示多個條件之間的「與」關係,保留字or表示多個條件之間的「或」關係。
>>>not True
False
>>>a = 80
>>>( a > 100) or ( a > 50 and a < 90)
True
5、程序的循環結構
Python語言的循環結構包括兩種:遍歷循環和無限循環。
遍歷循環使用保留字for依次提取遍歷結構各元素進行處理;
無限循環使用保留字while根據判斷條件執行程序。
1)遍歷循環: for
遍歷循環可以理解為從遍歷結構中逐一提取元素,放在循環變量中,對於每個所提取的元素執行一次語句塊。
for語句的循環執行次數是根據遍歷結構中元素個數確定的。
遍歷結構可以是字符串、文件、range()函數或組合數據類型等。
對於字符串,可以逐一遍歷字符串的每個字符,基本使用方式:
>>>>for c in "Python":
print(c)
P
Y
T
H
O
n
使用range()函數,可以指定語句塊的循環次數,基本使用方式:
>>>>for i in range(5):
print(i)
0
1
2
3
4
遍歷循環還有一種擴展模式,使用方法:
當for循環正常執行之後,程序會繼續執行else語句中內容。
else語句只在循環正常執行之後才執行並結束,因此,可以在<語句塊2>中放置判斷循環執行情況的語句。
遍歷循環示例:
for s in "PY":
print("循環執行中: " + s)
else:
s = "循環正常結束"
print(s)
>>>
循環執行中: P
循環執行中: Y
循環正常結束
2)無限循環: while
Python通過保留字while實現無限循環:
當程序執行到while語句時,判斷條件如果為True,執行循環體語句,語句結束後返回再次判斷while語句的條件;當條件為False時,循環終止,執行與while同級別縮進的後續語句。
示例:
>>>n== 0
>>>while n< 10:
print(n)
n= n+ 3
0
3
6
9
無限循環也有一種使用保留字else的擴展模式,使用方法:
在這種擴展模式中,當while循環正常執行之後,程序會繼續執行else語句中內容。
else語句只在循環正常執行後才執行,因此,可以在語句塊2中放置判斷循環執行情況的語句。
s, idx = "PY", 0
while idx < len(s):
print("循環執行中: " + s[idx])
idx += 1
else:
s = "循環正常結束"
print(s)
>>>
循環執行中: P
循環執行中: Y
循環正常結束
3)循環控制: break和continue
循環結構有兩個輔助循環控制的保留字:break和continue。
break用來跳出最內層for或while循環,脫離該循環後程序從循環後代碼繼續執行。
while True:
s = input("請輸入一個名字(按Q退出): ")
if s == "Q":
break
print("輸入的名字是:", s)
print("程序退出")
>>>
請輸入一個名字(按Q退出): 毛澤東
輸入的名字是: 毛澤東
請輸入一個名字(按Q退出): 鄧小平
輸入的名字是: 鄧小平
請輸入一個名字(按Q退出): Q
程序退出
如果有2層或多層循環,break退出最內層循環。
continue用來結束當前當次循環,即跳出循環體中下面尚未執行的語句,但不跳出當前循環。
for s in "PYTHON":
if s == "Y" or s == "y":
continue
print(s, end="")
>>>
PTHON
註:
continue語句和break語句的區別是:continue語句只結束本次循環,不終止整個循環的執行,而break具備結束循環的能力。
6、程序的異常處理
Python程序一般對輸入有一定要求,但當實際輸入不滿足程序要求時,可能會產生程序的運行錯誤。
>>>n = eval(input("請輸入一個數字: "))
請輸入一個整數: python
Traceback (most recent call last):
File "
n = eval(input("請輸入一個數字: "))
File "", line 1, in
NameError: name 'python' is not defined
由於使用了eval()函數,如果用戶輸入不是一個數字則可能報錯。
這類由於輸入與預期不匹配造成的錯誤有很多種可能,不能逐一列出可能性進行判斷。
為了保證程序運行的穩定性,這類運行錯誤應該被程序捕獲併合理控制。
Python語言使用保留字try和except進行異常處理,基本的語法格式:。
語句塊1是正常執行的程序內容,當執行這個語句塊發生異常時,則執行except保留字後面的語句塊2。
try:
n = eval(input("請輸入一個數字: "))
print("輸入數字的3次方值為: ", n**3)
except:
print("輸入錯誤,請輸入一個數字!")
>>>
請輸入一個數字: 1010
輸入數字的3次方值為: 1030301000
>>>
請輸入一個數字: python
輸入錯誤,請輸入一個數字!
除了輸入之外,異常處理還可以處理程序執行中的運行異常。
>>>for i in range(5):
print(10/i, end=" ")
Traceback (most recent call last):
File "
print(10/i, end=" ")
ZeroDivisionError: division by zero
try:
for i in range(5):
print(10/i, end=" ")
except:
print("某種原因,出錯了!")
>>>
某種原因,出錯了!