#Python TQC考題910 學生基本資料
# 資料排列跟904類似可互相參考,使用2D list的概念做
male=female=0
with open(“read.dat”,”rb“) as f:
#rb模式不能加參數 encoding=”utf-8″
#但r模式可以
for line in f:
print(line.decode(“utf-8”))
#不是decoding,也不是decode=”utf-8″
if line.decode(“utf-8”).split()[2] ==”0″: female+=1
#注意0被” “包覆
elif line.decode(“utf-8″).split()[2] ==”1”: male+=1
#注意1被” “包覆
print(“Number of males %d: ” %male)
print(“Number of females %d: ” %female)
![Python TQC考題910 學生基本資料, print(line.decode("utf-8")), if line.decode("utf-8").split()[2] =="0": female += 1 - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/05/20220503135646_37.png)
“””
使用記事本編輯read.dat內容:
學號 姓名 性別 科系
101 陳小華 0 餐旅管理
202 李小安 1 廣告
303 張小威 1 英文
404 羅小美 0 法文
505 陳小凱 1 日文
“””
male=female=0
with open(“read.dat”,”rb”) as file:
for line in file:
print(line.decode(“utf-8”))
if line.decode(“utf-8″).split()[2] ==”0”: female += 1
elif line.decode(“utf-8″).split()[2] ==”1”: male += 1
print(“number of males is %d” %male)
print(“number of females is %d” %female)
![Python TQC考題910 學生基本資料, print(line.decode("utf-8")), if line.decode("utf-8").split()[2] =="0": female += 1 - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/05/20220508201405_6.png)
“””
改用2D陣列的概念做:
先把全部資料變成一個2維陣列:
[[‘學號’, ‘姓名’, ‘性別’, ‘科系’], [‘101’, ‘陳小華’, ‘0’, ‘餐旅管理’], [‘202’, ‘李小安’, ‘1’, ‘廣告’], [‘303’, ‘張小威’, ‘1’, ‘英文’], [‘404’, ‘羅小美’, ‘0’, ‘法文’], [‘505’, ‘陳小凱’, ‘1’, ‘日文’]]
再將性別欄位做成一維陣列
index 0是title,而非內容
一維陣列要不要皆可
不影響.count() 計算數量
除了是.dat檔以外
所以用跟904一樣2D陣列的寫法
“””
with open(“read.dat”,”rb”) as file:
data=[]
for line in file:
print(line.decode(“utf-8”))
data.append(line.decode(“utf-8”).split())
print(data) #檢查用,建立了一個2維list
length=len(data)
print(length)
sex=[]
for i in range(1,length):
#index 0是title姓別
sex.append(data[i][2])
print(sex)
female = sex.count(“0″) #注意0被” “包覆
male = sex.count(“1″) #注意1被” “包覆
print(“Number of males: %d” %male)
print(“Number of females: %d” %female)
![Python TQC考題910 學生基本資料, print(line.decode("utf-8")), if line.decode("utf-8").split()[2] =="0": female += 1 - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/05/20220514163523_55-1200x333.png)
#放大程式碼:
![Python TQC考題910 學生基本資料, print(line.decode("utf-8")), if line.decode("utf-8").split()[2] =="0": female += 1 - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/05/20220514163621_72.png)
#放大輸出結果:
![Python TQC考題910 學生基本資料, print(line.decode("utf-8")), if line.decode("utf-8").split()[2] =="0": female += 1 - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/05/20220514163827_88-1200x440.png)
#再放大輸出結果:
![Python TQC考題910 學生基本資料, print(line.decode("utf-8")), if line.decode("utf-8").split()[2] =="0": female += 1 - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/05/20220514170923_23.png)
#再練習一次:
![Python TQC考題910 學生基本資料, print(line.decode("utf-8")), if line.decode("utf-8").split()[2] =="0": female += 1 - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/05/20220515080851_93.png)
#再練習一次::
![Python TQC考題910 學生基本資料, print(line.decode("utf-8")), if line.decode("utf-8").split()[2] =="0": female += 1 - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/05/20220515143011_34.png)
“””
以下語法open()時
又不用rb模式了
但使用在910,出現以下錯誤:
UnicodeDecodeError: ‘cp950’ codec can’t decode byte 0x99 in position 4: illegal multibyte sequence
因為910的dat檔含有中文字
若改為僅有英數字,就可正常執行
“””
![Python TQC考題910 學生基本資料, print(line.decode("utf-8")), if line.decode("utf-8").split()[2] =="0": female += 1 - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/05/20220518132232_77.png)
“””
open()裡面再加encoding=”utf-8″
即可正常執行
“””
![Python TQC考題910 學生基本資料, print(line.decode("utf-8")), if line.decode("utf-8").split()[2] =="0": female += 1 - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/05/20220518140813_34.png)
“””
原本dat檔
都是採用rb模式開啟
但老師多教r模式開啟
順應老師的教學
再重寫此題910
Debug過程滿有趣
印出list看也沒問題
為何index out of range?
再印len出來看
迴圈多跑了一次,
最後那一次跑出
長度0的空list
break那一行要放對地方
“””
![Python TQC考題910 學生基本資料, print(line.decode("utf-8")), if line.decode("utf-8").split()[2] =="0": female += 1 - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/05/20220518151249_82.png)
“””
910與904如同雙胞胎姐妹花,資料的排列都雷同,差異為910想要開啟.dat檔
先前都採用rb模式開啟,受限於rb模式,後面就要使用 line.decode(“utf-8”),
這語法只出現在909, 910,老師教使用r模式開啟.dat檔,非常實用,既然可以採用r模式
那就用跟904一樣的解法,做這一題
“””
![Python TQC考題910 學生基本資料, print(line.decode("utf-8")), if line.decode("utf-8").split()[2] =="0": female += 1 - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/05/20220518204121_49.png)
“””
sex.append(line.split()[2])
如果注意line.split()是一個list
這一行就寫得出來
題目要顯示內容print(line)
很簡單,但不要忘了
“””
![Python TQC考題910 學生基本資料, print(line.decode("utf-8")), if line.decode("utf-8").split()[2] =="0": female += 1 - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2022/05/20220521171223_24.png)

![Python: 使用 flat_list.extend( List[pandas.Series] ) 實現 pandas.DataFrame 列擴展教學 Python: 使用 flat_list.extend( List[pandas.Series] ) 實現 pandas.DataFrame 列擴展教學](https://i2.wp.com/savingking.com.tw/wp-content/uploads/2025/04/20250421141348_0_14cedf.png?quality=90&zoom=2&ssl=1&resize=350%2C233)

![Python:如何使用 PyMuPDF (import fitz ) 提取 PDF 文本區塊並存儲為 DataFrame ; text: List[ Tuple[float|str|int] ] = page.get_text(“blocks”) Python:如何使用 PyMuPDF (import fitz ) 提取 PDF 文本區塊並存儲為 DataFrame ; text: List[ Tuple[float|str|int] ] = page.get_text(“blocks”)](https://i2.wp.com/savingking.com.tw/wp-content/uploads/2025/03/20250320084417_0_7783bd.png?quality=90&zoom=2&ssl=1&resize=350%2C233)






近期留言