




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章程序流程控制3.1條件表達式3.2選擇結構3.3循環結構與迭代3.4random庫的使用3.5程序流程控制的應用實例本章小結
3.1條
件
表
達
式
3.1.1關系運算符
Python語言中的關系運算符如表3-1所示,運算結果是True或False。
【例3-1】
關系運算符使用示例。
3.1.2邏輯運算符
Python語言支持邏輯運算符,邏輯運算符只有3個,它們的優先級(分3級)從高到低依次是:not、and、or。用邏輯運算符描述的表達式稱為邏輯表達式或布爾表達式。
nota:如果a為False,則返回1;否則返回0。
aandb:如果a為False,則返回a;否則返回b。
aorb:如果a為False,則返回b;否則返回a。
【例3-2】
邏輯運算符使用示例。
3.1.3構造條件表達式
使用各種運算符可以構建不同的表達式,例如:
3.2選
擇
結
構
選擇結構是指程序運行到某個節點后,會根據一次判斷的結果來決定之后向哪一個分支方向執行,也稱為分支結構。
假設我們正在編寫一個程序,這個程序的任務是根據用戶輸入的天氣(晴天、雨天、雪天)來給出相應的建議。如果沒有選擇結構,我們可能會這樣寫代碼。
這就是需要選擇結構的原因。有了選擇結構,我們可以根據不同的條件執行不同的代碼,使得程序的行為更加符合我們的預期。例如,上面的代碼可以改寫如下:
3.2.1單分支結構:if語句
單分支結構使用if語句,在條件為真時執行操作,條件為假時不執行操作。
if語句的語法格式為:
其中:
(1)條件表達式可以是任意的數值、字符、關系或邏輯表達式,或用其他數據類型表示的表達式。當它表示條件時,以True(數值為1)表示真,False(數值為0)表示假。
注意:條件表達式的結果一定是真或假,條件表達式后有“:”,表示執行的語句要向右邊縮進。
(2)?<語句序列>稱為if語句的內嵌語句序列或子句序列,內嵌語句序列嚴格地以縮進方式表達,編輯器也會提示程序員開始書寫內嵌語句的位置,如果不再縮進,表示內嵌語句在上一行就寫完了。
if條件語句的執行順序是:首先計算條件表達式的值,若表達式的值為True,則執行內嵌的語句序列,否則不做任何操作。
通過圖3-1可以簡單了解單分支結構中if語句的執行過程。圖3-1if語句執行過程
【例3-3】
單分支結構示例。
3.2.2雙分支結構:if…else語句
雙分支結構使用if…else語句,在條件為真時執行一個操作,在條件為假時執行另一個操作。
if…else語句的語法格式為:
其執行順序是:首先計算條件表達式的值,若條件表達式的值為True,則執行<語句序列1>,否則執行<語句序列2>。
if…else語句的執行過程如圖3-2所示。圖3-2if…else語句的執行過程
【例3-4】
雙分支結構示例。
3.2.3多分支結構:if…elif…else語句
多分支結構使用if…elif…else語句,根據不同的條件執行不同的操作。
當條件表達式有多個值,實際處理的問題有多種條件時,就要用到多分支結構,多分支結構語句的執行過程如圖3-3所示。圖3-3多分支結構語句的執行過程
if…elif…else語句的語法格式為:
if…elif…else語句的執行順序是:首先計算<條件表達式1>的值,若其值為True,則執行<語句序列1>;否則,繼續計算<條件表達式2>的值,若其值為True,則執行<語句序列2>;依此類推,若所有條件表達式的值都為False,則執行<語句序列n?+?1>。
注意:
(1)不管有幾個分支,程序在執行了一個分支以后,其余分支就不再執行。
(2)當多分支中有多個條件表達式同時滿足條件時,只執行第一條與之匹配的語句。
【例3-5】
多分支結構語句示例。
【例3-6】
判定用戶輸入操作實例。
3.2.4嵌套if語句
在上述的if選擇結構中,語句塊本身也可以是一段if語句,這樣就形成了if語句的嵌套結構,可以實現更復雜的條件判斷。
【例3-7】
根據用戶輸入的年齡和駕駛經驗,決定是否給予駕駛許可。
【分析】
在這個例子中,我們需要根據兩個條件(年齡和駕駛經驗)來做出決定,這就需要使用嵌套的if語句。
【參考代碼】
【例3-8】
根據用戶輸入的時間(小時和分鐘)來決定是早上、中午、下午、晚上還是深夜。
【分析】
在這個例子中,我們需要根據用戶輸入的時間來決定是哪個時間段。這就需要使用嵌套的if語句。
【參考代碼】
3.2.5結構化模式匹配matchcase(switchcase)
雖然使用嵌套的if語句的命令性系列指令可以被用來完成類似結構化模式匹配的效果,但它沒有聲明性方式那樣清晰。聲明性方式指定了一個匹配所要滿足的條件,并且通過顯式的模式使之更為易讀。更強大的模式匹配例子可以在Scala和Elixir等語言中找到。這種結構化模式匹配方式是聲明性的,并且會顯式地為所要匹配的數據指定條件(模式)。
模式由序列、映射、基本數據類型以及類實例構成。模式匹配使得程序能夠從復雜的數據類型中提取信息,根據數據結構實現分支,并基于不同的數據形式完成特定的動作。
matchcase語句的語法格式如下:
match語句接受一個表達式,并將其值與以一個或多個case語句塊形式給出的一系列模式進行比較。具體來說,模式匹配的操作如下:
(1)給定具有特定類型和結構的數據(subject)。
(2)針對subject在match語句中求值。
(3)從上到下對subject與case語句中的每個模式進行比較,直到確認匹配到一個模式,執行與被確認匹配的模式相關聯的動作。如果沒有確認到一個完全的匹配:如果提供了使用通配符_的最后一個case語句,則它將被用作已匹配模式;不存在使用通配符的case語句,則整個match代碼塊不執行任何操作。
【例3-9】matchcase語句示例一。
【例3-10】matchcase語句示例二。
3.3循環結構與迭代
3.3.1基本循環結構循環是編程中的一個基本概念,它允許程序執行一系列重復的操作,直到滿足特定的條件或完成既定的任務。循環的重要性在于它提供了一種強大的工具,用于處理需要多次執行相同或類似操作的情況,比如遍歷數據集合中的每個元素,或者重復執行某個計算直到達到預定的目標。
3.3.2for循環
for循環在Python中主要用于遍歷序列(如列表、元組、字符串)或其他可迭代對象,它的一般語法結構如下:
【例3-11】
字符串作為iterable示例。
在Python中,字符串可以被視為字符的集合,因此它是一個可迭代的對象。當使用for循環遍歷一個字符串時,該循環會按順序迭代字符串中的每個字符。
【例3-12】
列表作為iterable示例。
3.3.3while循環
while循環適用于循環的初值和終值并不明確但有清晰的循環條件的情況,它會一直執行循環體內的代碼,直到指定的條件不再為真。while循環的一般語法結構如下:
【例3-13】while語句示例。
下面提供一些簡單的例子來展示如何在Python中使用for循環和while循環。
【例3-14】
打印數字序列。
【例3-15】
打印字符串中的字符及其索引。
這個循環使用enumerate函數來同時獲取字符串"hello"中每個字符及其對應的索引。
【例3-16】
計算某個數的倍數。
3.3.4break語句
在Python編程中,循環是一個常用的結構,用于重復執行一段代碼直到滿足特定條件。然而,在某些情況下,我們可能遇到一些只執行循環體中的部分語句就結束循環,或者立刻轉去下一次循環的情況,這就是break和continue語句發揮作用的地方。
break語句在Python中用于立即終止當前循環的執行。當break被執行時,它會跳出最內層的for或while循環,繼續執行循環后面的代碼。
【例3-17】break語句示例一。
【例3-18】
查找特定的數字。
【例3-19】break語句示例二。
3.3.5continue語句
continue語句用于結束當前輪的循環,程序跳轉到循環頭部,然后根據頭部的要求繼續循環。它通常用于在滿足特定條件時跳過一些不需要執行的代碼。
【例3-20】continue語句示例。
continue語句和break語句使用場景如下:
1.?break
(1)當需要在找到某個條件或值后立即退出循環時。
(2)當循環內的某個條件不再滿足繼續執行的需求時。
2.?continue
(1)當需要忽略當前迭代中的剩余代碼,并立即開始下一次迭代時。
(2)當有一個特定的條件不希望執行循環體中的某些代碼時。
注意事項如下:
(1)合理使用break和continue可以提高代碼的效率和可讀性。
(2)濫用這些語句可能會導致代碼邏輯混亂,因此建議只在必要時使用它們,并確保其使用有明確的意圖。
3.3.6循環的嵌套
在Python程序中,循環不僅可以單獨使用,還可以嵌套在其他循環內部,形成多級循環結構。嵌套循環允許創建復雜的邏輯,以處理矩陣、列表集合或執行重復任務的不同階段。
嵌套循環的語法與普通循環類似,但嵌套循環是在另一個循環的內部開始的。
【例3-21】
嵌套循環示例。
【例3-22】
打印9?×?9乘法表。
注意事項如下:
(1)避免無限嵌套。確保嵌套循環有明確的退出條件,以避免創建無限循環。
(2)保持可讀性。隨著嵌套層次的增加,代碼的可讀性可能會降低。考慮使用函數或循環控制語句來提高代碼的清晰度。
(3)性能考慮。嵌套循環可能會導致性能問題,尤其是在處理大數據集時。應確保循環邏輯盡可能高效。
3.4random庫的使用
首先,在Python中,若需要使用他人預先寫好的一些功能,需要導入相對應的庫,這樣才能夠使用其中的函數。在Python中,導入庫使用import關鍵字。此處,我們需要導入random庫。
【例3-23】
生成0到100之間的隨機整數。
【例3-24】
生成一個0到10(包括0和10)之間的隨機浮點數。
【例3-25】random()函數應用示例。
【例3-26】choice()函數示例。
【例3-27】seed()函數應用示例。
本小節介紹了Python中random庫的基本使用方法,包括生成隨機整數、隨機浮點數以及隨機選擇列表中的元素。Python中的random庫提供了豐富的函數功能,通過靈活運用這些函數,可以滿足各種隨機數生成的需求。但在一些涉及安全相關的場景時,應謹慎使用隨機數。
3.5程序流程控制的應用實例
【例3-28】
請編寫一個程序,接受用戶輸入的字符串a,并輸出其逆序后的結果。例如:a="olleh",則輸出hello。【分析】
我們可以使用循環結構來遍歷字符串,并將字符逆序存儲到另一個變量中。具體來說,我們可以從字符串的末尾開始逐個取出字符,并將其加到另一個變量中,從而實現字符的逆序輸出。
【參考代碼】
通過使用for循環和range函數,我們可以實現從字符串末尾開始逐個取出字符的操作。需要注意range函數的參數設置,起始索引為字符串長度減一,結束索引為?-1,步長為?-1,這樣可以實現倒序遍歷字符串的目的。在for循環中,我們使用加號操作符將逆序后的字符依次拼接到新的字符串中。這種方法在Python中是可行的,但需要注意,字符串拼接操作可能會導致性能損耗,尤其是當字符串很長時。(此處選擇了使用本章所學的循環結構來實現字符串逆序輸出效果,請大家結合前面章節所學習的字符串的相關操作,思考能否使用一行代碼代替循環結構來實現逆序效果。)
【例3-29】
假設有多位顧客對一個產品的星級評價記錄如下:[1,5,6,4,2,3,1,2]。
(1)請編寫一個程序,打印出所有低于4星的評價。
(2)請編寫一個程序,在循環中跳過所有5星及以上的評價并打印出其余評價。
需要在一行中輸出,每個輸出之間使用空格分隔。
【分析】
對于問題(1),可以使用for循環遍歷列表中的每個評價,然后使用if語句檢查是否小于4星,如果是,則打印出來。對于問題(2),同樣可以使用for循環遍歷列表,在循環中使用continue語句跳過所有大于等于5星的評價,然后打印出其余評價。
【參考代碼】
當程序執行到continue語句時,會立即跳過本次循環中continue之后的代碼,并開始下一次循環,這樣可以在滿足特定條件時跳過某些操作(在本例中即跳過所有5星及以上的評價),從而達到控制循環執行的目的。此外,本題還要求在一行中輸出,并且每個輸出之間使用空格進行分隔,可通過設置print函數的end參數為""實現。
【參考代碼】
【例3-31】
編寫一個程序,接受用戶輸入的一個正整數,然后將該整數分解質因數,并按照升序輸出。
【分析】
因為2是最小的質數,所以2可以作為我們開始嘗試的可能的質因數。接下來,我們使用一個循環從2開始來逐個數字嘗試是否是用戶輸入的正整數的因數,直到該數字大于用戶輸入的正整數為止。在每次循環中,我們檢查當前的數字是否能整除用戶輸入的正整數,如果是,則當前的數字是用戶輸入的正整數的一個質因數。我們打印出這個質因數,并將用戶輸入的正整數更新為除去已找到的因數后的商。如果用戶輸入的正整數不等于1,則表示我們還沒有找到全部的質因數,那么我們輸出一個乘號作為分隔,并繼續嘗試下一個數作為因數。這樣,最終輸出的結果就是將輸入的整數按照質因數分解的形式進行了因數分解。
【參考代碼】
【例3-32】
編寫一個程序,根據輸入的HTTP狀態碼匹配對應的含義并輸出。如果輸入的狀態碼是400,則輸出“Badrequest”;如果輸入的狀態碼是401,則輸出“Unauthorized”;如果輸入的狀態碼是403,則輸出“Forbidden”;如果輸入的狀態碼是404,則輸出“Notfound”;對于其他任何狀態碼,則輸出“Unknownstatuscode”。
【分析】
根據輸入的HTTP狀態碼匹配對應的含義并輸出相應的信息。為了實現這個目標,我們可以使用matchcase結構,它可以更清晰地進行模式匹配和條件判斷。首先,我們接受用戶輸入的HTTP狀態碼,并將其存儲在一個變量中。然后,我們使用matchcase結構來匹配該狀態碼。這是Python3.10中新增的語法,可用于更清晰地進行模式匹配和條件判斷,在此前的Python版本中都是使用if…elif…else結構來實現類似的功能。
【參考代碼】
【例3-33】
編寫一個程序,接受一組年齡數據,然后統計并輸出不同年齡段的人數,分別為兒童(0~12歲)、青少年(13~17歲)、成年人(18~59歲)和老年人(60歲及以上)。要求使用matchcase語句實現。
【分析】
這個程序需要接受一組年齡數據,然后根據每個人的年齡來判斷他們屬于哪個年齡段。為了實現這一功能,我們可以使用matchcase語句,根據年齡的不同范圍進行匹配,并統計每個年齡段的人數。
【參考代碼】
【例3-34】
編寫一個程序,用于模擬經典的“石頭剪刀布”游戲。該程序需要實現以下功能:
(1)用戶輸入自己的選擇(石頭、剪刀或布)。
(2)程序隨機生成石頭、剪刀或布。
(3)根據游戲規則判斷勝負,并輸出游戲結果。
游戲規則如下:
(1)石頭勝剪刀。
(2)剪刀勝布。
(3)布勝石頭。
(4)如果雙方出拳一樣,則為平局。
【分析】
這個程序用到了用戶輸入、隨機數生成和條件判斷等基本編程概念。我們需要讓用戶輸入他們的選擇,然后使用隨機數生成程序的選擇。接著,需要編寫條件語句來比較用戶和程序的選擇,以確定游戲結果并將其輸出給用戶。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年03月成都市“蓉漂人才薈”成都高新區公開考核公開招聘10名事業單位工作人員筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2025年03月吉林省總工會《今天》雜志社筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 高級信息系統項目管理師綜合知識押題密卷2
- 阜新高等專科學校《暖通空調工程施工》2023-2024學年第二學期期末試卷
- 暨南大學《體育測量評價》2023-2024學年第二學期期末試卷
- 中國科學院大學《規范寫作B》2023-2024學年第一學期期末試卷
- 江陽城建職業學院《公共關系與溝通技巧》2023-2024學年第二學期期末試卷
- 上海民航職業技術學院《ROS機器人基礎》2023-2024學年第二學期期末試卷
- 交流調頻調壓牽引裝置項目風險分析和評估報告
- 林州建筑職業技術學院《建筑設計2》2023-2024學年第二學期期末試卷
- 音樂鑒賞與實踐 第一單元第四課音樂的力量(下)
- 生產設備操作指南
- 中職職教高考文言文課文及翻譯
- 公司事故隱患內部報告獎勵機制
- 年九年級語文上冊 第三單元 11《醉翁亭記》教案 新人教版五四制
- 家禽委托屠宰合同協議書
- 2024年全國職業院校技能大賽高職組(法律實務賽項)考試題庫(含答案)
- 2024年度成都市人事考試工作高頻考題難、易錯點模擬試題(共500題)附帶答案詳解
- 康復醫院建筑設計標準征求意見稿
- 酒店式公寓開發財務分析實例
- JJF 2122-2024機動車測速儀現場測速標準裝置校準規范
評論
0/150
提交評論