1.程序的流程圖
程序流程圖用一系列圖形,流程線和文字說明描述程序的基本操作和控制流程,它是程序分析和過程描述的最基本方式。
流程圖的基本元素包括:

- 起止框:表示程序邏輯的開始或結束。
- 判斷框:表示一個判斷條件,並根據判斷結果選擇不同的執行路徑。
- 處理框:表示一組處理過程,對應於順序執行的程序邏輯。
- 輸入輸出框:表示程序中的數據輸入或結果輸出。
- 注釋框:表示程序的注釋。
- 流向線:表示程序的控制流,以帶箭頭直線或曲線表達程序的執行路徑。
- 連接點:表示多個流程圖的連接方式,常用於將多個較小流程圖組織成較大流程圖。

- 程序由三種基本結構組成:順序結構,分支結構和循環結構。
- 任何程序都由這三種基本結構組合而成。
- 基本結構都有一個入口和一個出口。
循環結構是程序根據條件判斷結果向后反復執行的一種運行方式, 根據循環體觸發條件不同,包括條件循環和遍歷循環結構 。
2.順序結構
順序結構是程序按照線性順序依次執行的一種運行方式, 其中語句塊1S1和語句塊S2表示一個或一組順序執行的語句 。

3.程序的分支結構
(1).單分支結構:if語句
if <條件>: 語句塊 # 示例:判斷用戶輸入數字的奇偶性 s = eval(input('請輸入一個整數:')) if s % 2 == 0: print('這是一個偶數') print('輸入數字是:{}'.format(s)) # 條件可以是一個或多個條件,多個條件采用and或or進行邏輯組合, # and表示多個條件‘與’的關系, # or表示多個條件'或'的關系,
(2).二分支結構:if-else語句
if 條件: 語句塊1 # 語句塊1在if中滿足條件時,執行 else: 語句塊2 # 語句塊2在if中不滿足條件時,執行 # 更簡潔的表達方式:語句塊1 if 條件 else 語句塊2 # 示例: username = input('請輸入登錄賬號:') password = int(input('請輸入登錄密碼:')) if username == 'admin' and password == 123456: print('登錄成功!') else: print('賬號或密碼錯誤!')
(3).多分支結構:if-elif-else語句
# 多分支結構通常用於判斷同一個條件或一類條件的多個執行路徑。 # 多分支結構從上到下依從評估判斷條件,尋找並執行第一個結果為True條件對應的語句。 # 示例:將百分制創建轉換為五分制成績 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.程序的循環結構
(1)遍歷循環: for
# 遍歷循環可以理解為從遍歷結構中逐一提取元素, 放在循環變量中, 對於每個所提取的元素執行一次語句塊。 for <循環變量> in <遍歷結構>: 語句塊 # <遍歷結構>可以為字符串,文件,range()函數以及組合數據類型等 # 遍歷字符串: for <循環變量> in <字符串變量>: 語句塊 # 遍歷range(): for <循環變量> in range(循環次數): 語句塊 # 示例: for s in 'py': print('循環執行中:' + s) else: s = '循環正常結束' print(s)
(2).無限循環:while
while <條件>: <語句塊> # 判斷條件是否為True,是,則執行語句。語句結束后返回再次判斷while語句的條件。 # 當條件為False時,循環終止。 # while語句擴展模式: while <條件>: <語句塊1> else: <語句塊2> # 循環正常執行之后,才執行else下的語句 # 示例:求1-10以內的整數 i = 1 while i <= 10: print(i) i += 1 else: print('執行結束')
(3)循環控制:break和continue
- break用來跳出最內層for或while循環, 脫離該循環后程序從循環后代碼繼續執行。 如果有2層或多層循環, break退出最內層循環。
- continue用來結束當前當次循環, 即跳出循環體中下面尚未執行的語句, 但不跳出當前循環。
- 區別是: continue語句只結束本次循環, 不終止整個循環的執行, 而break具備結束循環的能力。
while True: s = input("請輸入一個名字(按Q退出): ") if s == "Q": break print("輸入的名字是:", s) print("程序退出")
for s in "PYTHON": if s == "Y" or s == "y": continue print(s, end="")
5.異常處理
-
-
異常機制:指當程序出現錯誤后,程序的處理方法。
- python中異常的類都是基於繼承來實現的,BaseException是所有異常類的基類,所有的內置異常都是它的派生類。
-
SystemExit:Python退出異常
KeyboardInterrupt: 鍵盤打斷(Ctrl+C)
GeneratorExit: 生成器退出
Exception: 普通異常(只會使用這部分的異常)
Exception是除了SystemExit,GeneratorExit和KeyboardInterrupt之外的所有內置異常的基類,包括自定義異常。
-
StopItertion:當迭代器中沒有數據項時觸發,由內置函數next()和迭代器的next方法觸發。
-
ArithmeticError:算法異常的基類。
-
AssertionError:assert語句失敗時觸發。
-
AttributeError:屬性引用和屬性賦值異常。
-
BufferError:緩存異常,當一個緩存相關的操作不能進行時觸發。
-
EOFError:文件末尾,當內置函數input()時生成,表示到達文件末尾。
-
ImportError:導入異常。
-
LookupError:當使用映射或者序列時,如果鍵值或者索引無法找到的時候觸發,它是KeyError和IndexError的基類。
-
MemoryError:內存錯誤,當操作超出內存范圍時觸發。
-
NameError:名稱異常,在局部或者全局中無法找到文件名稱時觸發。
-
OSError:當一個系統函數返回一個系統相關的錯誤時觸發。
-
ReferenceError:引用異常,當底層的對象被銷毀后訪問時觸發。
-
RuntimeError:包含其他分類中沒有被包括進去的一般錯誤。
-
SyntaxError:編譯器的內部錯誤。
-
TypeError:類型異常,當操作或者函數應用到不合適的類型時觸發。
-
ValueError:值異常,當操作或者函數的類型正確,但是值不正確時觸發。
-
Warning:警告。
5.1 try...except.....
try: <語句塊1> except: <語句塊2> # 語句塊1是正常執行的程序內容, 當執行這個語句塊發生異常時, 則執行except保留字后面的語句塊2。 # 如果在except子句后將異常類型設置為exception,異常處理程序將捕獲除了程序中斷外的所有異常。因為excetion類是其他異常類的基類。
try: open('hello.text','r') except: # 異常時,給出的提示 print('hello.text文件不存在')
5.2 捕獲具體的異常
# 捕獲具體的異常: try: open('hello.text','r') except FileNotFoundErrorr: # 只要FileNotFoundErrorr類的異常時,才會給出來的提示 print('hello.text文件不存在') except: # 除了FileNotFoundErrorr類的異常時,報出來的錯誤 print('程序錯誤')
5.3 try...except...else....
try: result = 10/0 except ZeroDivisionError: # 只要FileNotFoundErrorr類的異常時,才會給出來的提示 print('0不能被整除') except: # 除了FileNotFoundErrorr類的異常時,報出來的錯誤 print('程序錯誤') else: # 若沒有觸發異常則執行以下代碼 print(result)
5.4 嵌套異常
try: s = 'hello' b = 'world' try: # 嵌套異常 print(s - b) except: print('字符串不支持減法運算') except: # 如果外層語句執行錯誤,則內層語句將不執行 print('異常')
5.5 try...findally.....
# finally子句的作用:無論異常是否發生,finally子句都會被執行。finally子句通常用於關閉因異常而不能釋放的系統資源。每一個try語句都必須有一個except子句和finally子句與之對應。 try: s = 'hello' b = 'world' try: print(s - b) except: print('字符串不支持減法運算') except: print('異常') finally: # 無論是否異常,都執行 print(s + b)
# 當程序中出現錯誤時,python會自動引發異常,也可以通過raise語句顯示的引發異常。但是執行了raise語句,raise語句后的代碼將不能被執行。 try: s = None if s is None: print('s是空對象') raise NameError except TypeError: print('異常')
5.7 自定義異常
# 自定義異常必須繼承Exception類,自定義異常按照命名規范以Error結尾。自定義異常使用raise語句引發,而且只能通過手工發生觸發。 from __future__ import division class DivisionException(Exception): # 自定義異常 def __init__(self, x, y): Exception.__init__(self, x, y) self.x = x self.y = y if __name__ == '__main__': try: x = 3 y = 4 if x % y > 0: print(x / y) raise DivisionException(x, y) except DivisionException as div: # 拋出異常 print('異常DivisionException:x / y = %.2f' % (div.x / div.y))
t = 'hello' assert len(t) >= 2 # 條件為True,不拋出異常 assert len(t) == 1 # 條件為False,斷言失敗,拋出異常。
6.案例
import random target = random.randint(1,1000) count = 0 while True: try: guess = eval(input('請輸入一個猜測的整數(1至1000): ')) except: print('輸入有誤, 請重試, 不計入猜測次數哦! ') continue count = count + 1 if guess > target: print('猜大了') elif guess < target: print('猜小了') else: print('猜對了') break print("此輪的猜測次數是:", count)
