Lesson 3 - 邏輯判斷、循環結構
Lesson 3 - 邏輯判斷、循環結構
邏輯判斷、循環結構
tags: python
CM-540
Lesson3
Slide
課件:https://docs.google.com/presentation/d/1qh0-se2MSjAxyeE6rOPOm6hnW7SK_aeh6He7Su8Vb04/edit?usp=sharing
作業:
截止時間:2025年5月25日 23:59
題目 1: 學生成績評級
https://hamster.cpttm.org.mo/spaces/zJSnedsakiRQAL6E3Iq1YA/upload
請寫一個程式,提示使用者輸入 3 個科目的成績,然後根據以下標準進行評級和總評:
(1)科目分數判斷:
每個科目的成績範圍為 0 到 100 分。
如果任一科目的成績低於 60 分,則該科目評級為「不及格」。
(2)總評:
如果三個科目的平均成績低於 60 分,則總評為「不及格」。
如果三個科目的平均成績在 60 分(含)以上且小於 70 分,則總評為「及格」。
如果三個科目的平均成績在 70 分(含)以上且小於 80 分,則總評為「中等」。
如果三個科目的平均成績在 80 分(含)以上且小於 90 分,則總評為「優良」。
如果三個科目的平均成績在 90 分(含)以上,則總評為「優秀」。
題目 2: 超級無敵開口中
繳交網址:https://hamster.cpttm.org.mo/spaces/hH39vKqdQFC09C3ha3D-LQ/upload
奬門人節目內的超級無敵開口中, 玩法是電腦隨機抽出一個 1 - 100 之間的號碼作為幸運號碼,參加者輪流說出一個數字,電腦會根據答案和參加者的數字,將可選範圍縮窄,直到最後幸運號碼被估中為止。
要求:
系統提示:需要告知目標數字比目前估的數字大或細
若使用者輸入
bye
,則輸出答案和結束遊戲
由於目前還沒有教到導入模塊的部份,因此先提供隨機數生成方法
題目 3: 三角型的9x9乘法表(選做)
邏輯判斷
迄今為止,我們寫的Python代碼都是一條一條語句順序執行,這種代碼結構通常稱之為順序結構。
言而我們的實際流程中,必定有著非常多情況,需要按照不同的情況,輸出不同的結果。
數字比較
文字比較
字串比較是根據字元的順序進行的。通常情況下,字串的比較是以字典順序進行的,也就是根據字元的Unicode碼值進行比較。 另外,字串比較是區分大小寫的。這意味著大寫字母在比較時會被認為是小於相同字元的小寫字母。例如,字串"apple"會被認為是大於字串"Apple"。
流程控制
流程控制是學習python的重點之一,所謂流程控制是代表當有多行的程式碼時,我們可以有效的控制程式應該執行的順序和方向,先前章節的程式是由上而下一行一行執行,當學會流程控制後,程式執行將更有變化性。
流程控制就像做決定,根據不同的條件選擇不同的行動。例如:
例子
如果今天下雨,就帶傘;否則,就不帶傘。
如果成績大於 60 分,就及格;否則,就不及格。
在程式中,我們用 if
和 else
、elif
來實現這種決策邏輯。
單向選擇 (if)
使用方法
Python 特性
實際操作上,條件最終只要不為 0
(int) 或 False
,語句都會被執行。
由於文字不是 0 ,因此直接把文字放進條件判斷,結果是 True
。
單向選的獨立性
單向選擇的每次判斷(每一次if)均獨立
雙向選擇 (if、else)
else
用來處理 if 條件不成立(False)的情況(只會有一個結果):
使用方法
多重選擇 (if、elif、else)
如果有多個條件需要檢查,可以用 elif
(else if 的縮寫):
使用方法:
嵌套分支
當然根據實際開發的需要,分支結構是可以嵌套作多重。 我們使用巢狀的 if 語句來進一步細分條件,若 if 的情況大於 2 個時,可以繼續細分。
and(與)、or(或)、xor(非)
and 和 or 是 邏輯運算符,用於組合多個條件,在條件判斷中實現更複雜的邏輯。
當出現多個條件需要同時
判斷時,我們可以使用and
、or
、xor
and : 需要同時為True,結果才是True
or:只需有 1 個為True,結果就是True
xor:當兩個參數相同時為False、兩個參數不同時為True (不常用)

and(與)
用於檢查 所有條件是否同時成立。 結果:只有當所有條件都為 True 時,and 的結果才是 True;否則結果為 False
or(或)
用於檢查 至少有一個條件是否成立。
結果: 只要有一個條件為 True,or 的結果就是 True; 只有當所有條件都為 False 時,結果才是 False
練習2
用戶驗證:請用戶輸入管理員的Username、Password,判斷是否管理員帳戶登入
若成功顯示"成功登入"
不論帳號錯誤還是密碼錯誤,一律顯示"用戶名或密碼錯誤"
其他不知名原因顯示"登入失敗"
管理員帳戶密碼: Username : Admin Password : Admin12345
思路
定義正確的登入帳號、密碼
由用戶輸入帳號、密碼
確定輸入為 String
判斷
循環結構
應用場景
我們在寫程序的時候,一定會遇到需要重復執行某條或某些指令的場景。例如要實現每隔1秒中在屏幕上打印一次“hello, world”並持續打印一個小時,我們肯定不能夠直接把print('hello, world')這句代碼寫3600遍,這裡同樣需要循環結構。
這顯然是不合理的,因此我們在這裡引入循環結構迴圈
的概念,循環結構就是程序中控制某條或某些指令重復執行的結構。

在Python中構造循環結構有兩種做法:
一種是 while 循環
一種是 for 循環
While 循環/迴圈
While 循環用於在某條件下,循環執行某段程序
While 結構
While循環中的條件
在While迴圈中,條件是優先判斷的,先判斷條件再執行語句。 因此條件中,沒有加入終止條件的變數,迴圈會一直執行下去,變成無限迴圈。
無限迴圈
相較於 for 迴圈,While 迴圈中含有讓程式判斷的條件,因此有機會出現無限迴圈,即迴圈條件永遠都成立,不會跳出。在正式開發程序中,我們必須避免出現無限迴圈,這會使服務端死機。
練習1:輸出 1、3、5、7、...、93、95、97、99。。
練習2:求1 - 100的和
巢狀迴圈
巢狀迴圈並非新的程式結構,只是迴圈範圍內又有迴圈,巢狀迴圈可以有好幾層,巢狀迴圈與單層迴圈運作原理相同,從外層迴圈來看,內層迴圈指示外層迴圈內的動作,因此外層迴圈作用一次,內迴圈需要執行完畢。
練習
輸出如下

練習 - 9x9乘法表

格式化輸出(f-string)變數的用法
對齊
<
靠左對齊>
靠右對齊 (默認)^
置中對齊

靠左對齊

補0

精度(取小數點後 n 位)
注意,格式輸出僅改變輸出到屏幕的狀態,並非改變變數的值。
在對應的位置加上 :.nf

儲存容器
思考一個問題:如果我要記錄 3 個學生的信息 包含:姓名、學號、年級
如果我要再記錄 10 個學生的更多信息 ? 100 個?
這樣的寫法,需要非常多的變數。隨著人數,要記錄的東西愈多,變數就需要愈多,這顯然是無必要的。
因此我們先行引入儲存容器的概念
儲存容器 - List(列表、陣列)
List 是 Python 中最基本的數據結構。List 中的每個值都有對應的位置值,稱之為索引(index),第一個索引是 0,第二個索引是 1,依此類推。
定義一個 List,使用[ ]

List 的特性
List 是有順序的,會按照 index 由0、1、2、...下去
存取方式與 string 一樣,使用
變數名[index]
進行元素存取列表的元素不需要具有相同的類型
List 中的元素可以作新增、修改、刪除(後續再詳講)
List 是一個迭代對象(iterable)
回歸剛才的問題,如果我要再記錄 10 個學生的更多信息,我們可以這樣處理。
for-in 循環/迴圈
除了 While 迴圈外,For 迴圈也是在Python中十分常用的。兩者本質意義上十分相似,作用都是重覆執行語句。
但實際上還是有一些區別:
While 循環條件是由我們定義,滿足一定條件下迴圈便會繼續執行
For 循環是一種”遍歷”機制,用於遍歷
可迭代對象(iterable)
,例如列表(list)、字串(string)、元組(tuple)等。迴圈將依序處理可迭代對象中的每個元素,直到所有元素都被處理完畢。
如果明確知道循環執行的次數或者要對一個容器進行迭代,那麼我們推薦使用for迴圈
。
for迴圈 結構
臨時變數用於存放每一個可迭代對象
較常用於 for 迴圈的可迭代對象 - range()

range(start, stop, step)
範圍可以透過range()
函數生成,可以接收3個參數(start, stop, step),取頭不取尾:
練習1:輸出 1-100

練習2:統計
定義一個內容:Today is monday, I go to school by bus.
統計一下有幾個字母 ”o” ?
練習3:9x9 乘法表

迴圈 - 跳過某一步 (continue)
在迴圈中,我們可能有部份執行語句會因應不同情況而不出現,此時可以用continue
語句,由檢測到continue關鍵字起跳過本次循環,直接進入下一次循環。
輸出 1-10,跳過2,9
迴圈 - 跳出迴圈 (break)
break 即跳出迴圈的意思,程式當遇到特定條件時,執行 break 語句即會跳出迴圈。
字串 cptTm,當遇到 T
時跳出
T
時跳出
Last updated