Skip to content

期末考-1111405038-俞星合 - #1331

Open
H-HoYu wants to merge 10 commits into
DevSecOpsLab-CSIE-NPU:mainfrom
H-HoYu:0622/Caesar-Cipher
Open

H-HoYu wants to merge 10 commits into
DevSecOpsLab-CSIE-NPU:mainfrom
H-HoYu:0622/Caesar-Cipher

Conversation

@H-HoYu

@H-HoYu H-HoYu commented Jun 22, 2026

Copy link
Copy Markdown

Caesar Cipher 題目 - RP 摘要


📋 題目摘要

題目名稱

凱撒密碼(Caesar Cipher)- 第二題

題目需求

對輸入的每一行文字,完成三個步驟:

  1. 讀取文本 - 逐行讀入直到 EOF
  2. 進行加密 - 使用 SHIFT=9 位移對字母進行加密
  3. 保留非字母 - 空白、數字、標點符號保持不變

核心演算法

輸入: 一行文字(含字母、數字、標點等)
↓
逐字符處理:
  - 大寫字母 A-Z:轉成 (ord(char) - ord('A') + 9) % 26 + ord('A')
  - 小寫字母 a-z:轉成 (ord(char) - ord('a') + 9) % 26 + ord('a')
  - 其他字符:保留原樣
↓
輸出: 加密後的文字

範例

輸入:

Hello, NPU!
abc XYZ
ABCXYZ

輸出:

Qnuux, WYD!
jkl GHI
JKLGHI

過程說明:

行1: Hello, NPU!

H(H=7) +9→ Q(16)
e(e=4) +9→ n(13)
l(l=11)+9→ u(20)
l(l=11)+9→ u(20)
o(o=14)+9→ x(23)
, → , (保留)
(空格) → (空格)
N(N=13)+9→ W(22)
P(P=15)+9→ Y(24)
U(U=20)+9→ D(3, 因為 29%26=3)
! → ! (保留)
結果: Qnuux, WYD!

行2: abc XYZ

a→j, b→k, c→l (基本位移)
X→G, Y→H, Z→I (超過Z繞回)
結果: jkl GHI

行3: ABCXYZ → JKLGHI (全大寫)


✅ 測試結果

測試執行輸出

======================================================================
開始執行綠燈測試(Green Light Tests)- 凱撒密碼 (SHIFT=9)
======================================================================

✓ Test Case 1 通過:基本情況(大小寫混合、標點)

✓ Test Case 2 通過:邊界情況(字母表尾端繞回)

✓ Test Case 3 通過:邊界情況(全大寫)

✓ Test Case 4 通過:邊界情況(空行)

✓ Test Case 5 通過:邊界情況(僅非字母)

✓ Test Case 6 通過:邊界情況(混合)

======================================================================
✓ 所有測試通過!6/6
======================================================================

測試涵蓋項目

編號 測試案例 輸入 預期輸出 邊界情況
TC1 基本(大小寫混合、標點) Hello, NPU! Qnuux, WYD! ❌ 基本
TC2 字母表尾端繞回 abc XYZ jkl GHI ✓ Z繞回
TC3 全大寫字母 ABCXYZ JKLGHI ✓ 大寫尾端
TC4 空行 (空字符串) (空字符串) ✓ 空值
TC5 僅非字母字符 123 !@# 123 !@# ✓ 數字/標點
TC6 混合複雜內容 Test123!@#XYZ Cnbc123!@#GHI ✓ 複雜混合

結果:6/6 通過(綠燈 ✅)


🔧 我跟 AI 改了什麼地方

改動 1:題目整理與驗證

原始問題: 需要從照片題目整理完整的題目分析檔,SHIFT=9

AI 給的方案:

  • 完整的題目敘述(題目概述、核心任務、輸入輸出說明)
  • Sample Input 和 Sample Output(基於 SHIFT=9)
  • 詳細的加密過程演示
  • 兩種推薦的演算法實作方案
  • 7 個邊界情況(Edge Cases)

我的判斷與修改:

  • ✅ 驗證 SHIFT=9 在所有範例中的計算正確性
  • ✅ 確認大小寫字母分別處理的邏輯
  • ✅ 確認非字母字符保留的要求
  • ✅ 確保題目敘述與 EOF 處理邏輯清晰

改動 2:紅燈測試設計

原始問題: 需要設計至少 3 個測試案例

AI 給的方案:

  • 6 個測試案例(超過要求的 3 個)
  • 完整的測試框架和詳細注釋
  • 各測試案例的計算步驟說明

我的判斷與修改:

  • ✅ 設計了覆蓋完整邊界情況的測試案例
  • ✅ Test 1:基本情況(大小寫混合、標點)
  • ✅ Test 2:字母表尾端繞回(Z→I)
  • ✅ Test 3:全大寫字母邊界
  • ✅ Test 4:空行邊界
  • ✅ Test 5:僅非字母字符(數字、標點保留)
  • ✅ Test 6:混合複雜內容
  • ✅ 確認所有測試框架正確,顯示紅燈狀態(0/6 通過)

改動 3:解題檔實作與預期輸出修正(關鍵)

原始問題: 需要實作 solution.py,使所有 6 個測試案例通過

AI 給的方案:

  • 完整的 caesar_encrypt(text, shift=9) 函數實作
  • 使用模運算實現字母繞回:(ord(char) - ord('A') + shift) % 26 + ord('A')
  • 大小寫字母分別處理
  • 非字母字符保留原樣
  • 主程序 main() 處理 EOF

我的判斷與修改(重點):

  • ❌ 初始測試:2 個失敗(Test 1 和 Test 6 預期輸出計算有誤)
  • 修正預期輸出(手工驗證每個字符的位移):

Test 1 修正Hello, NPU!

  • 錯誤預期:Qsvvb, WYD!(e 誤算成 s)
  • 正確預期:Qnuux, WYD!(e +9 = n)
  • 驗證:H→Q, e→n, l→u, o→x 都正確

Test 6 修正Test123!@#XYZ

  • 錯誤預期:Cyvg123!@#GHI(s, t 誤算)

  • 正確預期:Cnbc123!@#GHI(T→C, e→n, s→b, t→c 正確)

  • 驗證:各字符位移都符合 (pos + 9) % 26

  • ✅ 修正後所有 6 個測試通過(綠燈 ✅)

影響: 預期輸出正確與否直接決定了測試是否通過,需要逐字符驗證 SHIFT=9 的計算。


改動 4:邊界情況處理驗證

原始問題: 確保所有邊界情況都被正確處理

AI 給的方案:

  • 對大小寫字母分別處理
  • 對非字母字符直接保留
  • 對空行直接返回空字符串

我的判斷與修改:

  • 字母表尾端繞回驗證:X(23)+9=32, 32%26=6→G ✓
  • 大小寫區分驗證:大小寫分別從 'A'/'a' 開始計算
  • 非字母保留驗證:數字 1,2,3 和標點 !,@,# 完全保留 ✓
  • 空行處理驗證:空字符串直接回傳空字符串 ✓
  • 複雜混合驗證:Test 和 123!@# 和 XYZ 混合時都正確處理 ✓

📊 改動統計

改動類型 數量 重要性
題目整理驗證 4 項 🟡 中
測試設計 6 個案例 🟡 中
預期輸出修正 2 處 🔴 高
邊界情況驗證 5 種 🔴 高

關鍵修改: 預期輸出的手工驗證(Test 1 和 Test 6),涉及逐字符計算 SHIFT=9 的位移,影響整個綠燈測試結果。


📝 最終評語

題目分析: 完整,SHIFT=9 邏輯清晰
測試設計: 6 個案例,涵蓋所有邊界情況(繞回、空行、非字母、混合)
實現驗證: 所有測試通過(6/6 綠燈),預期輸出經過逐字符驗證
改動記錄: 關鍵修改(預期輸出修正)有明確的判斷依據和計算過程

本題目完全符合「只做我要求的」原則,特別是預期輸出修正體現了對 SHIFT=9 計算的深度驗證。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant