TQC+ Python 第2版|第七章「綜合應用三」詳解答案
BY PJ.
-2025 年 7 月 19 日
(最後更新於: 2025 年 7 月 19 日)
Chapter 7 綜合應用三 習題
習題 1:計算空氣品質指標 (AQI)
-
題目描述
請撰寫一程式,讀取三個資料夾裡所有 csv 檔案,這些檔案分別記錄 2021.1 ~ 2021.3 每天的 AQI(檔案內容如下圖),請取出每天臺中市的 AQI 數值,並計算其平均值。 -
檔案內容範例(agx_p_488_2021-01-01.csv)
SiteName,County,AQI,Pollutant,Status,SO2,CO,03
基隆,基隆市,38,良好,1.7,0.21,34.9,34,26,8,2.7
汐止,新北市,50,良好,0.5,0.27,23.5,25,22,15,9
萬里,新北市,56,懸浮微粒,普通,1.2,0.2,,69,16,2
新店,新北市,42,良好,1.6,0.23,29.5,24,21,9,3.1
土城,新北市,46,良好,1.1,0.21,28.3,25,19,12,3
板橋,新北市,48,良好,1.2,0.31,21.4,17,19,13,10
新莊,新北市,55,細懸浮微粒,普通,1.1,0.34,22,26,
菜寮,新北市,48,良好,1.8,0.22,32,28,25,12,4.4
林口,新北市,53,細懸浮微粒,普通,0,0.2,33.1,33,2
淡水,新北市,43,良好,1.5,0.21,33.8,32,24,13,2
-
輸入輸出
(a) 輸入說明:無
(b) 輸出說明:讀取所有 csv 檔案的臺中市 AQI,並計算平均值。 -
範例
> 範例輸出
臺中市的 AQI 平均為 76.19688403065712
提示: 利用 os.listdir 或 os.walk 模組取得資料夾底下的所有檔案名稱,再逐一進行檔案處理取出 AQI 數值。
參考解法
import os
import os.path as op
# 取得目前路徑
curr_path = op.dirname(__file__)
documents = os.listdir(curr_path)
AQIs = []
for d in documents:
if '2021' in d: #三個資料夾檔名2021開頭
file_path = op.join(curr_path,d) #串接目前程式路徑及資料夾
files = os.listdir(file_path) #讀取資料夾下檔案
for file in files:
f = op.join(file_path,file) #路徑再串接檔名
with open(f,'r',encoding='utf-8') as data:
for row in data.readlines():
r = row.split(',')
if r[1] == '臺中市' and r[2] != '':
AQIs.append(eval(r[2]))
print('臺中市的 AQI 平均為',sum(AQIs) / len(AQIs))
習題 2:檢查小括號個數
-
題目描述
請撰寫一程式,讓使用者輸入包含左/右小括號之四則運算式,並判斷左/右小括號的個數是否匹配,並顯示成對或不成對的小括號數量。 -
輸入輸出
(a) 輸入說明:包含左/右小括號之四則運算式
(b) 輸出說明:判斷左/右小括號的個數是否匹配,並顯示成對或不成對的小括號數量。 -
範例
> 範例輸入1
請輸入含小括號之四則運算式:((1+2)-3)*(4/5)
> 範例輸出1
成對小括號數量 = 3
> 範例輸入2
請輸入含小括號之四則運算式:(((1+2+3)
> 範例輸出2
不成對小括號數量 = 2
> 範例輸入3
請輸入含小括號之四則運算式:((1+2)*(3+4)*(5+6))/(7+8)
> 範例輸出3
成對小括號數量 = 5
提示:本題可嘗試使用堆疊(stack)結構撰寫。
參考解法
stack = [] #左括號append,右括號pop
match = 0 #存放配對好括號對數
unmatch_right = 0 #存放未配對的右括號數
expr = input("請輸入含小括號之四則運算式:")
for x in expr:
if x == '(':
stack.append(x)
elif x == ')':
if len(stack) != 0:
stack.pop()
match += 1
else:
unmatch_right += 1
unmatch_left = len(stack)
total_unmatch = unmatch_right + unmatch_left
if total_unmatch == 0:
print(f"成對小括號數量 = {match}")
else:
print(f"不成對小括號數量 = {total_unmatch}")
YOU MAY ALSO LIKE...
#TQC #Python #TQCPython第2版 #TQCPython第二版 #綜合應用三 #Python認證 #Python教學 #Python基礎證照 #Python入門