本題要求我們處理一個班級的考試成績(人數不固定),完成以下任務:
讀取成績:讀入全班所有學生的分數。
排序輸出:將所有分數由小到大排序後輸出。
找出指標分數:
找出所有「不及格」(低於 60 分)學生中的「最高分數」。
找出所有「及格」(等於或高於 60 分)學生中的「最低分數」。
處理特殊情況:
如果所有學生都及格(找不到不及格分數),則輸出 "best case" 而非最高不及格分數。
如果所有學生都不及格(找不到及格分數),則輸出 "worst case" 而非最低及格分數。
程式的執行流程可以分為以下幾個主要步驟:
初始化:
建立三個空的列表(List):
N
: 用於儲存所有輸入的原始成績。
FAIL
: 用於儲存所有不及格的成績。
PASS
: 用於儲存所有及格的成績。
讀取輸入:
程式讀取第一行輸入(學生人數),但在目前的解法中未使用這個值。
程式讀取第二行包含所有成績的文字,使用 input().split()
將這行文字按空格分割,得到一個包含各個成績(以字串形式存在)的列表 grades
。
儲存與轉換成績:
使用 for
迴圈遍歷 grades
列表中的每一個字串。
在迴圈中,使用 int()
將每個成績字串轉換成整數。
將轉換後的整數成績使用 append()
方法加入到 N
列表中。完成後,N
列表就包含了所有學生的整數成績。
排序與首次輸出:
使用內建函數 sorted(N)
對 N
列表中的所有成績進行升序排序,並將排序結果儲存在新的列表 sort_num
中。sorted()
不會改變原始的 N
列表。
使用 for
迴圈遍歷排序後的 sort_num
列表。
在迴圈中,使用 print(score, end=' ')
輸出每個成績。end=' '
參數使得輸出時成績之間以空格分隔,而不是預設的換行。
迴圈結束後,使用 print()
輸出一個換行符,確保後續的輸出從新的一行開始,符合題目要求的輸出格式。
成績分類:
再次使用 for
迴圈遍歷排序後的 sort_num
列表。
在迴圈中,使用 if i < 60:
判斷當前成績 i
是否小於 60。
如果小於 60,則將該成績 append()
到 FAIL
列表。
如果不小於 60(即等於或大於 60),則將該成績 append()
到 PASS
列表。
這個步驟完成後,FAIL
列表包含了所有不及格的成績,PASS
列表包含了所有及格的成績。
輸出最高不及格分數(或 best case):
使用 if FAIL:
來檢查 FAIL
列表是否包含元素。在 Python 中,一個非空列表在布林判斷中被視為 True
,空列表則為 False
。
如果 FAIL
列表不為空(即有不及格學生),則執行 print(max(FAIL))
。max()
函數會找出列表中的最大值,也就是最高的不及格分數。
如果 FAIL
列表為空(即所有學生都及格),則執行 else
區塊,輸出 "best case"。
輸出最低及格分數(或 worst case):
使用 if PASS:
來檢查 PASS
列表是否包含元素。
如果 PASS
列表不為空(即有及格學生),則執行 print(min(PASS))
。min()
函數會找出列表中的最小值,也就是最低的及格分數。
如果 PASS
列表為空(即所有學生都不及格),則執行 else
區塊,輸出 "worst case"。
這個程式透過列表儲存、排序、分類數據,並利用 max()
和 min()
函數以及條件判斷,有效地解決了題目要求,找出了關鍵的成績指標,並正確處理了所有學生都及格或都不及格的特殊情況。程式碼結構清晰,符合題目要求的輸入輸出格式。
----------------------------------------------程式碼----------------------------------------------
# 初始化三個列表:
# N 用於存放所有輸入的成績
# FAIL 用於存放不及格的成績 (小於 60 分)
# PASS 用於存放及格的成績 (大於或等於 60 分)
N = []
FAIL = []
PASS = []
# 讀取第一行輸入:學生人數
# 雖然題目要求讀取學生人數,但在這個解法中此變數實際上並未使用,
# 因為程式是根據讀取的成績數量來處理,而不是預設的人數。
# num = int(input()) # 可以選擇性地保留或移除此行
# 讀取第二行輸入:包含所有學生分數的字串,分數之間以空格分隔
# 使用 input().split() 將輸入的字串按空格分割成一個字串列表
grades = input().split()
# --- 第一階段:讀取、轉換並儲存所有成績 ---
# 遍歷 grades 列表中的每個成績(此時仍為字串格式)
for grade in grades:
# 將字串格式的成績轉換為整數
g = int(grade)
# 將轉換後的整數成績添加到 N 列表中,以收集所有成績
N.append(g)
# --- 第二階段:排序並輸出所有成績 ---
# 使用 sorted() 函數對 N 列表中的所有成績進行升序排序
# sorted() 會返回一個新的排序後的列表,原始的 N 列表不變
sort_num = sorted(N)
# 遍歷排序後的成績列表 sort_num
for score in sort_num:
# 輸出每個成績,並設置 end=' '
# 這會讓每個成績後面接一個空格,而不是預設的換行符
print(score, end = ' ')
# 在所有成績輸出完畢後,輸出一個換行符,使後續輸出從新的一行開始
print()
# --- 第三階段:區分及格與不及格成績 ---
# 再次遍歷排序後的成績列表 sort_num
for i in sort_num:
# 判斷成績是否小於 60 (不及格標準)
if i < 60:
# 如果是不及格分數,則將其添加到 FAIL 列表中
FAIL.append(i)
# 否則 (成績大於或等於 60,即為及格)
else:
# 將及格分數添加到 PASS 列表中
PASS.append(i)
# --- 第四階段:找出並輸出最高不及格分數 (或 "best case") ---
# 判斷 FAIL 列表是否為空。在 Python 中,`if 列表:` 會在列表有元素時判斷為 True
if FAIL: # 若列表不為空,表示存在不及格分數
# 使用 max() 函數找出 FAIL 列表中的最大值 (即最高的不及格分數) 並輸出
print(max(FAIL))
else: # 若列表為空,表示所有學生都及格
# 輸出 "best case"
print("best case")
# --- 第五階段:找出並輸出最低及格分數 (或 "worst case") ---
# 判斷 PASS 列表是否為空
if PASS: # 若列表不為空,表示存在及格分數
# 使用 min() 函數找出 PASS 列表中的最小值 (即最低的及格分數) 並輸出
print(min(PASS))
else: # 若列表為空,表示所有學生都不及格
# 輸出 "worst case"
print("worst case")